我试图找到k的值,它是Decompostion models中的常量
Wt = W0 e^-kt
我正在使用R脚本来计算它。但是,我在选择数据集方面遇到了麻烦。
示例数据
Site Treatment Month Repli WD
W2 0 0 2 1
W3 0 0 1 .9
W7 0 0 3 .7
W12 0 0 4 .7
W2 0 1 2 .4
W3 0 1 1 .3
W7 0 1 3 .3
W12 0 1 4 .2
W2 0 3 2 .2
W3 0 3 1 .1
W7 0 3 3 .1
W12 0 3 4 .1
W2 0 4 2 .9
W3 0 4 1 .9
W7 0 4 3 .8
W12 0 4 4 .8
k=numeric(max(Cs$Repli))
pred=array(0,dim=c(4,max(Cs$Repli)))
resid=array(0,dim=c(4,max(Cs$Repli)))
obs=array(0,dim=c(4,max(Cs$Repli)))
现在这部分我遇到了问题 非线性回归
for(i in 1:max(Cs$Repli)){
s1=subset(Cs,Cs$Repli==i)
在我的原始数据中,它只选择四个这样的数据集(这很好)可能是因为有最大Repli值?
Site Treatment Month Repli
W12 0 0 4
W12 0 1 4
W12 0 3 4
W12 0 5 4
然后我运行以下命令,然后我得到这4个数据的K值。现在我想选择W2或任何其他。我怎样才能做到这一点?我尝试了不同的东西,但我无法得到结果。我尝试使用%in%但是(i)上面的脚本也在下面使用,所以我不能使用%in%。任何帮助都会非常感激。
Month=s1$Month
WD=s1$WD
nonlin = nls(WD ~ 1*exp(-k*Month), trace=TRUE, start = list(k = .01))
summary(nonlin)
pr=predict(nonlin)
res=residuals(nonlin)
k[i]=coef(nonlin)[1]
pred[,i]=pr
resid[,i]=res
obs[,i]=WD
} #end of nls for loop
我可以提供原始数据。
答案 0 :(得分:0)
如果要检查已处理的子集,可以使用另外的变量W_subsets
来存储已处理的子集:
# before the nls loop
W_subsets <- rep(list(NA), max(Cs$Repli))
# inside the nls loop
W_subsets[[i]] <- s1
正如我所看到的,W_subsets
的输出是正确的:
[[1]]
Site Treatment Month Repli WD
2 W3 0 0 1 0.9
6 W3 0 1 1 0.3
10 W3 0 3 1 0.1
14 W3 0 4 1 0.9
[[2]]
Site Treatment Month Repli WD
1 W2 0 0 2 1.0
5 W2 0 1 2 0.4
9 W2 0 3 2 0.2
13 W2 0 4 2 0.9
... etc. to W12