我想在许多数据集上拟合曲线,按治疗分组。这与 nlslist 配合得很好,但现在我想为我的参数引入上限。
当我用 nls 分别适合每个组时,引入边界确实非常有效,但当我想用 nlslist 加快我的工作(我有更多的数据集)时显然不是这样。
任何人都可以在这里帮助我解决这个问题吗?
我的数据集的一个例子:
DF1<-data.frame(treatment = rep(c("mineral","residues"),4),
N_level = c(0,0,100,100,200,200,300,300),
yield = c(8,8.5,10,10.5,11,9.8,9.5,9.7))
DF1
treatment N_level yield
1 mineral 0 8.0
2 residues 0 8.5
3 mineral 100 10.0
4 residues 100 10.5
5 mineral 200 11.0
6 residues 200 9.8
7 mineral 300 9.5
8 residues 300 9.7
尝试仅使用 nls 拟合此数据集效果很好:
fit_mineral <- nls(formula = yield ~ a + b*0.99^N_level +c*N_level,
data=subset(DF1, subset = treatment == "mineral"),
algorithm = "port", start = list(a = 12, b = -8, c= -0.01),
upper = list(a=1000, b=-0.000001, c=-0.000001))
适合矿物
Nonlinear regression model
model: yield ~ a + b * 0.99^N_level + c * N_level
data: subset(DF1, subset = treatment == "mineral")
a b c
13.7882 -5.8685 -0.0126
residual sum-of-squares: 0.4679
但是一旦我尝试在 nlslist 中组合东西,它就不起作用:
fit_mineral_and_residues <- nlsList(model = yield ~ a + b*0.99^N_level +c*N_level
| treatment, data=DF1,
algorithm = "port", start = list(a = 12, b = -8, c= -0.01),
upper = list(a=1000, b=-0.000001, c=-0.000001))
错误信息:
Error in nlsList(model = yield ~ a + b * 0.99^N_level + c * N_level | :
unused arguments (algorithm = "port", upper = list(a = 1000, b = -1e-06, c = -1e-06))