如何从 lmer 模型中仅提取随机效应相关参数?

How to extract only the random effects correlation parameters from an lmer model?

我正在尝试从 lmer 输出中提取随机效应相关参数。

这是我的模型:

m <- lmer(RT ~ Condition + (1 + Condition| Participant), data)

给我以下输出:

REML criterion at convergence: 6533.6

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-3.4666 -0.6318 -0.0232  0.5696  4.1010 

Random effects:
 Groups      Name        Variance Std.Dev. Corr             
 Participant (Intercept) 0.045483 0.21327                   
             Condition2  0.001271 0.03565  -0.43            
             Condition3  0.005774 0.07599  -0.04 -0.09      
             Condition4  0.003817 0.06178  -0.57  0.60  0.69
 Residual                0.147445 0.38399                   
Number of obs: 6841, groups:  Participant, 39

Fixed effects:
            Estimate Std. Error t value
(Intercept)  1.57546    0.03537  44.544
Condition2   0.06677    0.01420   4.703
Condition3  -0.09581    0.01798  -5.328
Condition4   0.02710    0.01639   1.653

Correlation of Fixed Effects:
           (Intr) Cndtn2 Cndtn3
Condition2 -0.334              
Condition3 -0.157  0.307       
Condition4 -0.476  0.508  0.571

但是,我只想提取随机效应的特定相关参数,比如Condition3 和Condition2 之间的相关性(-0.04)。有人知道怎么做吗?

我尝试使用 VarCorr() 函数,它只显示随机效应的结果,但仍然不允许我从中提取特定值。如果有任何帮助,我将不胜感激!

您想使用 lme4::VarCorr 提取这些值。这是一个例子。

library(lme4)

data("sleepstudy")

sl <- sleepstudy

m1 <- lmer(
  Reaction ~ Days + (Days | Subject),
  data = sl
)
summary(m1)
Linear mixed model fit by REML ['lmerMod']
Formula: Reaction ~ Days + (Days | Subject)
   Data: sl

REML criterion at convergence: 1743.6

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-3.9536 -0.4634  0.0231  0.4634  5.1793 

Random effects:
 Groups   Name        Variance Std.Dev. Corr
 Subject  (Intercept) 612.10   24.741       
          Days         35.07    5.922   0.07
 Residual             654.94   25.592       
Number of obs: 180, groups:  Subject, 18

Fixed effects:
            Estimate Std. Error t value
(Intercept)  251.405      6.825  36.838
Days          10.467      1.546   6.771

Correlation of Fixed Effects:
     (Intr)
Days -0.138

在这里,我们要提取 (Intercept)Days 之间的相关性。我们这样做:

(ranef_vals <- data.frame(VarCorr(m1)))
       grp        var1 var2       vcov       sdcor
1  Subject (Intercept) <NA> 612.100158 24.74065799
2  Subject        Days <NA>  35.071714  5.92213766
3  Subject (Intercept) Days   9.604409  0.06555124
4 Residual        <NA> <NA> 654.940008 25.59179572


我们在这里需要的值位于 sdcor 列的第三行。

ranef_vals$sdcor[3]
[1] 0.06555124

@mfidino 的回答很好。或者

cc <- cov2cor(VarCorr(m1)$Subject)
cc["Days",  "(Intercept)"]

cc <- attr(VarCorr(m1)$Subject, "corr")
cc["Days", "(Intercept)"]

$Subject 部分是必需的,因为 lmer 模型可以有多个随机效应项,所以 VarCorr 总是作为 list 返回协方差矩阵的数量(根据对应分组变量的名称命名)