2016-09-06 22 views
0

工作數據看起來像:R:從自舉混合效應模型獲得係數&CI導致

set.seed(1234) 
df <- data.frame(y = rnorm(1:30), 
       fac1 = as.factor(sample(c("A","B","C","D","E"),30, replace = T)), 
       fac2 = as.factor(sample(c("NY","NC","CA"),30,replace = T)), 
       x = rnorm(1:30)) 

lme模型擬合爲:

library(lme4) 
mixed <- lmer(y ~ x + (1|fac1) + (1|fac2), data = df) 

我用bootMer運行參數引導和我可以成功獲得固定係數(截距)和SEs &隨機效應:

mixed_boot_sum <- function(data){s <- sigma(data) 
c(beta = getME(data, "fixef"), theta = getME(data, "theta"), sigma = s)} 

mixed_boot <- bootMer(mixed, FUN = mixed_boot_sum, nsim = 100, type = "parametric", use.u = FALSE) 

我的第一個問題是如何從自舉結果mixed_boot獲得兩個隨機效應的每個單獨水平的係數(斜率)?

我沒有問題,使用augment功能從broom包提取mixed模型的係數(斜率),見下圖:

library(broom) 
mixed.coef <- augment(mixed, df) 

然而,這似乎是broom不能boot類對象處理。我無法直接在mixed_boot上使用上述功能。

我也試圖通過增加mmList修改mixed_boot_sum(我想這將是我所期待的),但[R抱怨爲:

Error in bootMer(mixed, FUN = mixed_boot_sum, nsim = 100, type = "parametric", : 
    bootMer currently only handles functions that return numeric vectors 

此外,是否有可能同時獲得固定的CI &通過指定FUN以及隨機效果?

現在,我很困惑FUN正確的規格,以達到我的需求。任何有關我的問題的幫助將不勝感激!

回答

1

我的第一個問題是如何從自舉結果mixed_boot中獲得兩個隨機效應的各個級別的係數(斜率)?

我不確定你的意思是「每個等級的係數(斜率)」。 broom::augment(mixed, df)給出的預測(殘差等),每個觀察值。如果你想在每個級別的預測係數我會嘗試

mixed_boot_coefs <- function(fit){ 
    unlist(coef(fit)) 
} 

其原始模型給出

mixed_boot_coefs(mixed) 
## fac1.(Intercept)1 fac1.(Intercept)2 fac1.(Intercept)3 fac1.(Intercept)4 
##  -0.4973925  -0.1210432  -0.3260958   0.2645979 
## fac1.(Intercept)5   fac1.x1   fac1.x2   fac1.x3 
##  -0.6288728   0.2187408   0.2187408   0.2187408 
##   fac1.x4   fac1.x5 fac2.(Intercept)1 fac2.(Intercept)2 
##   0.2187408   0.2187408  -0.2617613  -0.2617613 
## ... 

如果你想生成的對象,以更清楚地命名,你可以使用:

flatten <- function(cc) setNames(unlist(cc), 
           outer(rownames(cc),colnames(cc), 
             function(x,y) paste0(y,x))) 

mixed_boot_coefs <- function(fit){ 
    unlist(lapply(coef(fit),flatten)) 
} 

當運行通過bootMer/confint/boot::boot.ci這些功能將給每個這些值的置信區間(請注意,所有的斜坡facW.xZ在各組之間是相同的,因爲該模型僅假設截距爲隨機變化)。換句話說,無論您知道如何從擬合模型中提取信息(條件模式/ BLUPs,分組變量的每個級別的預測截距和斜率,參數估計[fixefgetME],隨機效應在特定條件下的預測[predict] ...)可以用於bootMerFUN變元,,只要您可以將其結構扁平化爲簡單的數字矢量即可。

+0

非常感謝! @Ben Bolker。這很好。還有一個問題,是否有可能在使用'coef'時恢復每個級別變量的原始名稱?我看到,在你的結果中,R產生的是數字而不是原來的名字。 – Chuan

相關問題