其他一些答案是可行的,但我声称最好的答案是使用为此设计的访问器方法—— VarCorr
(这与lme4
的前身nlme
包中的相同)。
最新版本lme4
(版本 1.1-7,但以下所有内容可能适用于 >= 1.0 版本)中的更新,VarCorr
比以前更灵活,并且应该做你想做的一切,而无需在拟合的模型对象内四处寻找。
library(lme4)
study <- lmer(Reaction ~ Days + (1|Subject), data = sleepstudy)
VarCorr(study)
## Groups Name Std.Dev.
## Subject (Intercept) 37.124
## Residual 30.991
默认情况下VarCorr()
打印标准偏差,但如果您愿意,您可以获取方差:
print(VarCorr(study),comp="Variance")
## Groups Name Variance
## Subject (Intercept) 1378.18
## Residual 960.46
(comp=c("Variance","Std.Dev.")
将打印两者)。
为了获得更大的灵活性,您可以使用该as.data.frame
方法转换VarCorr
对象,该方法给出了分组变量、效果变量以及方差/协方差或标准差/相关性:
as.data.frame(VarCorr(study))
## grp var1 var2 vcov sdcor
## 1 Subject (Intercept) <NA> 1378.1785 37.12383
## 2 Residual <NA> <NA> 960.4566 30.99123
最后,VarCorr
对象的原始形式(如果您不必这样做,您可能不应该与您混淆)是方差-协方差矩阵的列表,其中包含编码标准偏差和相关性的附加(冗余)信息,以及属性 ( "sc"
) 给出残差标准偏差并指定模型是否具有估计的尺度参数 ( "useSc"
)。
unclass(VarCorr(fm1))
## $Subject
## (Intercept) Days
## (Intercept) 612.089748 9.604335
## Days 9.604335 35.071662
## attr(,"stddev")
## (Intercept) Days
## 24.740448 5.922133
## attr(,"correlation")
## (Intercept) Days
## (Intercept) 1.00000000 0.06555134
## Days 0.06555134 1.00000000
##
## attr(,"sc")
## [1] 25.59182
## attr(,"useSc")
## [1] TRUE
##