如何使用混合效果拟合nls模型

问题描述 投票:1回答:1

我想要拟合具有随机效应的线性平台模型。我找到了一种方法来适应nls()的功能,但我不知道如何包含随机效果。这是我到目前为止:

#create data
x=c(1:6,1:6)
y=c(10,21,27,35,33,35,9,20,28,32,30,31)
z=c("A","A","A","A","A","A","B","B","B","B","B","B")
df<-data.frame(x,y,z)

#create linear-plateau function
lp=function(x, a, b, c){
  ifelse(x > c, a + b * c, a + b * x)
  }

#fit the model without random effects
p10=nls(y ~ lp(x, a, b, c), data = df, start = list(a = 0, b = 15, c = 4))


plot(y~x)
lines(x=c(0, coef(p10)["c"],max(df$x)), 
      y=c(coef(p10)["a"],
          (coef(p10)["a"] + coef(p10)["b"] * coef(p10)["c"]),
          (coef(p10)["a"] + coef(p10)["b"] * coef(p10)["c"])),lty=2)

我想要做的是将z作为随机效应包括在内,因为从相同的z级别收集的所有数据都不是独立的。我知道如何使用nlmer包中的lme4函数来模拟混合效果,但我不知道如何使用它来拟合线性平台模型。

r function mixed-models nls nonlinear-functions
1个回答
1
投票

你可以用nlme包来做到这一点,但是你给我们的数据不足以成功地拟合随机效应模型。

首先拟合gnls()(广义非林最小二乘)模型,该模型允许组间的固定效应差异:

library(nlme)
p20 = gnls(y ~ lp(x, a, b, c),
           params= list(a+b~z, c~1),
           data = df,
           start = list(a = c(0,0), b=c(15,15), c=4))

(我最初尝试使用params = list(a+b+c~z),对start进行了适当的更改,但是没有成功。可能有可能调整控制参数以使该模型工作......)

现在作为随机效应模型。这没有成功 - 你几乎肯定需要有两个以上的团体 - 但它应该给你这个想法。

p30 = nlme(y ~ lp(x, a, b, c),
           random = a+b~1|z,
           fixed = a+b+c ~ 1,
           data = df,
           start = c(a=0, b=15, c=4)
           )

使用nlmer执行此操作有点麻烦,因为您必须定义一个返回渐变的函数以及目标函数的值。

© www.soinside.com 2019 - 2024. All rights reserved.