使用 for (variable in vector) { 在 R 中确定 k 值
Determination of k value using for (variable in vector) { in R
我试图找到 k 的值,它是分解模型中的常数
Wt = W0 e^-kt
我正在使用 R 脚本来计算它。但是,我在 selection 数据集上遇到了问题。
示例数据
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)
在我的原始数据中 select 只有四个这样的数据集(没关系)可能是因为具有最大 Repli 值?
Site Treatment Month Repli
W12 0 0 4
W12 0 1 4
W12 0 3 4
W12 0 5 4
然后我 运行 下面的命令然后我得到这 4 个数据的 K 值。现在我想 select 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
我可以提供原始数据
如果你想检查你处理了哪些子集,你可以使用一个额外的变量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
我试图找到 k 的值,它是分解模型中的常数
Wt = W0 e^-kt
我正在使用 R 脚本来计算它。但是,我在 selection 数据集上遇到了问题。
示例数据
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)
在我的原始数据中 select 只有四个这样的数据集(没关系)可能是因为具有最大 Repli 值?
Site Treatment Month Repli
W12 0 0 4
W12 0 1 4
W12 0 3 4
W12 0 5 4
然后我 运行 下面的命令然后我得到这 4 个数据的 K 值。现在我想 select 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
我可以提供原始数据
如果你想检查你处理了哪些子集,你可以使用一个额外的变量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