【发布时间】:2015-04-01 20:39:21
【问题描述】:
我创建了一个循环,以将非线性模型拟合到参与者的六个数据点(每个参与者有 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 值。
我也愿意接受其他解决方案,让参与者在数据中循环运行。
【问题讨论】: