【发布时间】:2018-01-12 15:17:40
【问题描述】:
我是 R 编程的新手,并且正在研究 R 中的动态模型,但是 面临一个我现在无法弄清楚的问题。感谢任何帮助或 建议。我的数据是这样的:
data <- data.frame(time=c(60,75,90,105,120, 135,
150,165,180, 195,210,225,240,255,270,300),
A=c(1,2,3,4,5,6,7,8,7,6,5,4,3,2,1,0),
B=c(3,4,5,6,7,8,9,10,8,7,6,5,4,3,2,1),
C=c(6,7,9,11,13,14,15,16,15,14,13,12,11,10,9,8),
D=c(5,6,7,8,11,12,14,13,12,10,6,5,3,3,2,1),
E=c(3,4,5,6,7,8,8,6,5,4,4,3,2,2,1,1))
for(n in c(1:5) ){
IR <- data[,1+n]
time <- data[,1]
d<-data.frame(time, IR)
Mod<-function(t, parms){
derivs<-function(t, state, parms){
with(as.list(c(state, parms)),{
I <- if(t>60 & t<165 ){I} else{0}
dQ=k1+I-k*Q2
return(list(c(dQ)),IR=Q/2)
state<-c(Q=1)
return(ode(y=state, times=time, func=derivs, parms=parms, method ="rk4"))
pars<-c( k1=0.1,k=0.1)
Objective<-function(x, parset=names(x)){
pars[parset]<-x
tout<-d$time
out<-Mod(tout,pars)
return(modCost(obs=d, model=out, weight="mean", method="Marq"))
}
lower = c(k1=0, k=0)
upper=c( k1=10, k=10)
m1<-modFit(p=pars, f=Objective,lower=lower, upper=upper)
out1 <- data.frame(summary(m1)$par)
out1$ID <- k
if(k==1){
coefficients <- out1
} else {
coefficients <- rbind(coefficients, out1)
}
}
我的数据比上面一个更复杂,我无法适应它们 加一,这就是我添加 for 循环的原因。通过这种方式,我可以拟合参数 每个数据集 A、B、C、D E 的 k1 和 k。但现在我想拟合参数 k 只交叉数据 A、B、C、D、E 一次。有什么办法可以做到 这个动态模型?
【问题讨论】: