wrapnls:Error:初始参数估计时的奇异梯度矩阵

时间:2015-04-01 20:39:22

标签: r nls

我创建了一个循环,使参与者将非线性模型拟合到六个数据点(每个参与者有6个数据点)。第一个模型是单参数模型。以下是适用于该模型的代码。时间变量已定义。参与者变量是id变量。数据格式很长(每个参与者的每个数据点都有一行)。

以下是带有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值。

我也对参与者运行数据循环的其他解决方案持开放态度。

1 个答案:

答案 0 :(得分:0)

你最后提到'nlxb不会给你残余',但确实如此。如果您拨打nlxb的结果被称为fit,则残差位于fit$resid。因此,只需将它们添加到原始数据中即可获得拟合值。老实说,我不知道为什么nlxb没有使用predict()函数,但至少有一种方法可以获得预测值。

相关问题