我创建了一个循环来让参与者(每个参与者有6个数据点)将非线性模型拟合到六个数据点。第一个模型是单参数模型。这个模型的代码很好用。时间变量已定义。参与者变量是id变量。数据是长形式的(每个参与者的每个数据点一行)。wrapnls:错误:在初始参数估计时的奇异梯度矩阵
这里是1个参数的循环代码的工作原理:
1_p_model <- dlply(discounting_long, .(Participant), function(discounting_long) {wrapnls(indiff ~ 1/(1+k*time), data = discounting_long, start = c(k=0))})
然而,当我试图符合二参数模型,我得到这个错误“错误:奇异梯度矩阵的初始参数估计”,而仍然使用wrapnls功能。我意识到模型可能超过参数化,这就是为什么我试图使用wrapnls而不是仅仅使用nls(或nlsList)。在我的领域有些人坚持要看到两种模式的适合。我认为这个wrapnls模型避免了0或接近0的残差问题。这是我的代码不起作用。该模型的起始值和限制是该领域的标准。
2_p_model <- dlply(discounting_long, .(Participant), function(discounting_long) {nlxb(indiff ~ 1/(1+k*time^s), data = discounting_long, lower = c (s = 0), start = c(k=0, s=.99), upper = c(s=1))})
我意识到,我可以使用nlxb(这确实让我为每个参与者正确的参数值),但功能并没有给预测值或每个数据点的残差(至少我不认为这)我想要计算AIC值。
我也接受其他解决方案,让参与者通过数据运行循环。