错误错误:当使用nlmer时,步长因子降低到0.001以下而不减少pwrs

时间:2014-10-16 19:25:11

标签: r mixed-models

我认为这可能更像是一个统计问题,而不是R问题,但在尝试将nlmer函数拟合到数据时,我有一个错误Error: step factor reduced below 0.001 without reducing pwrss。我的数据是:https://www.dropbox.com/s/cri5n7lewhc8j02/chweight.RData?dl=0

我试图适应模型,以便我可以根据时间预测雏鸡的体重,对于饮食1的雏鸡。我做了以下事情:

   cw1<-subset(ChickWeight, ChickWeight$Diet==1)
m1 <- nlmer(weight~ SSlogis(Time, Asym, xmid, scal) ~ Asym|Chick, cw1, start=c(Asym = 190, xmid = 730, scal = 350))

还有其他方法可以解决此错误吗?我认为这个错误与Asym值有关,但我并不了解它在做什么,所以任何简短的指导都会有所帮助。

1 个答案:

答案 0 :(得分:1)

我被要求改进我的答案,所以这是我尝试这样做的。

此错误通常会被触发,因为您的起始值不足以接近&#34; true&#34;值,因此优化器无法通过远离它们来找到适合的任何局部改进。你需要尝试提供更好的起始猜测 - 这有时可以通过在几个点上代数求解方程来实现,如this article等许多地方所述。其他时候,您可以绘制数据并尝试对参数可能做出有根据的猜测,如果您知道参数&#34;做什么&#34;在非线性函数内(也就是说,参数a可能代表渐近线,b是缩放器,c是平均变化率等等。这对我个人来说很难,因为我没有数学背景,但我经常能够在大部分时间做出合理的猜测。

然而,为了更直接地回答这个问题,这里有一些可重现的代码,应该说明有问题的错误来自糟糕的起始猜测。

#Create independentand dependent variables, X and Y, and a grouping variable Z.
xs = rep(1:10, times = 10)
ys = 3 + 2*exp(-0.5*xs)
zs = rep(1:10, each=10)
#Put random noise in X.
for (i in 1:100) {
xs[i] = rnorm(1, xs[i], 2)
}
df1 = data.frame(xs, ys, zs) #Assemble data into data frame.

require(lme4) #Turn on our package.
#Define our custom function--in this case, a three-parameter exponential model.
funct1 = funct1 = deriv(~beta0 + beta1*exp(beta2*xs), namevec=c('beta0',
    'beta1', 'beta2'), function.arg=c('xs','beta0', 'beta1','beta2'))
#This will return the exact same error because our starting guesses are way off.
test1 = nlmer(ys ~ funct1(xs, beta0, beta1, beta2) ~ (beta0|zs), data = df1, 
    start=c(beta0=-50,beta1=200,beta2=3))
#Our starting guesses are much better now, and so nlmer is able to converge this time.
test1 = nlmer(ys ~ funct1(xs, beta0, beta1, beta2) ~ (beta0|zs), data = df1, 
    start=c(beta0=3.2,beta1=1.8,beta2=-0.3))