簡體   English   中英

使用 lapply 從多個 lmer 模型中提取系數

[英]Extracting coefficients from multiple lmer models using lapply

我在這方面已經有一段時間了,但我無法有效地做到這一點。 我想跨多個變量運行多個 lmer 模型,並從每個模型中提取系數以放入數據幀。

到目前為止,我有以下內容

ivlist<-c("hp",  "drat", "wt", "qsec", "vs", "am", "gear", "carb")
mtcars<-mtcars
mtcars$id<- sample(c(1:16), 32, replace=TRUE, prob = c(1/16, 1/16, 1/16, 1/16, 1/16, 1/16, 1/16, 1/16, 1/16, 1/16, 1/16, 1/16, 1/16, 1/16, 1/16, 1/16))



mod <- lapply(ivlist, function(x) {
  lmer(substitute(mpg ~ cyl + disp + i*disp + (1|id), list(i = as.name(x))), data = mtcars, na.action=na.exclude)
})
res <- lapply(seq_along(mod[c(1:8)]), function(j) {
model = names(mod[[j]])
Vcov <- vcov(mod[[j]], useScale = FALSE)
betas <- fixef(mod[[j]])
se <- sqrt(diag(Vcov))
zval <- betas / se
pval <- 2 * pnorm(abs(zval), lower.tail = FALSE)})

do.call(cbind(names,betas, se, zval, pval), res)

我現在卡住了。 它告訴我沒有 se 對象。 你們能幫忙嗎。 如果你能建議我如何只為交互效果做到這一點,那就更好了。

先感謝您

R ,我們得到最后一個輸出作為return 在這里,我們可能需要以list或命名向量的形式返回所有對象

res <- lapply(seq_along(mod[c(1:8)]), function(j) {
        model <- names(mod[[j]])
         Vcov <- vcov(mod[[j]], useScale = FALSE)
         betas <- fixef(mod[[j]])
         se <- sqrt(diag(Vcov))
         zval <- betas / se
         pval <- 2 * pnorm(abs(zval), lower.tail = FALSE)
         list(betas = betas, se = se, zval = zval, pval = pval)
     })

do.call(rbind, lapply(res, as.data.frame))
#                  betas           se       zval         pval
#(Intercept)  39.5138536412 2.988611e+00 13.2214778 6.595523e-40
#cyl           0.3492185844 9.057326e-01  0.3855648 6.998190e-01
#disp         -0.0805987883 2.376294e-02 -3.3917859 6.943868e-04
#hp           -0.1074943073 3.537576e-02 -3.0386435 2.376459e-03
#disp:hp       0.0003166872 1.121111e-04  2.8247615 4.731583e-03
#(Intercept)1 10.6595603973 1.187663e+01  0.8975240 3.694394e-01
#cyl1         -0.8828858263 7.606152e-01 -1.1607522 2.457427e-01
# ...

暫無
暫無

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

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