簡體   English   中英

如何擬合具有混合效果的 nls 模型

[英]How to fit a nls model with mixed effects

我想擬合具有隨機效應的線性平台模型。 我找到了一種用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包,但我不知道如何與它適合線性台階模型。

您可以使用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執行此nlmer有點nlmer因為您必須定義一個函數來返回梯度以及目標函數的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM