我想用随机效应拟合线性高原模型。我找到了一种适合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
函数为混合效果建模,但是我不知道如何使用线性高原模型拟合它。
答案 0 :(得分: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
进行此操作比较麻烦,因为您必须定义一个返回梯度以及目标函数值的函数。