Alcune delle altre risposte sono realizzabili, ma sostengo che la risposta migliore è utilizzare il metodo accessor progettato per questo - VarCorr
(questo è lo stesso del predecessore lme4
, il pacchetto nlme
).
UPDATE nelle versioni recenti di lme4
(versione 1.1-7, ma tutto sotto è probabilmente applicabile alle versioni> = 1.0), VarCorr
è più flessibile rispetto a prima, e dovrebbe fare tutto quello che vuoi, senza mai ricorrere alla pesca intorno all'interno dell'oggetto modello montato.
library(lme4)
study <- lmer(Reaction ~ Days + (1|Subject), data = sleepstudy)
VarCorr(study)
## Groups Name Std.Dev.
## Subject (Intercept) 37.124
## Residual 30.991
Per impostazione predefinita deviazioni VarCorr()
stampa standard, ma è possibile ottenere variazioni, invece, se si preferisce:
print(VarCorr(study),comp="Variance")
## Groups Name Variance
## Subject (Intercept) 1378.18
## Residual 960.46
(comp=c("Variance","Std.Dev.")
stamperà entrambi).
Per una maggiore flessibilità, è possibile utilizzare il metodo as.data.frame
per convertire l'oggetto VarCorr
, che dà la variabile di raggruppamento, variabili effetto (s), e la varianza/covarianza o standard di deviazione/correlazioni:
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
Infine, la forma grezza dell'oggetto VarCorr
(che probabilmente non dovresti rovinare con te se non devi) è un elenco di matrici di varianza-covarianza con informazioni aggiuntive (ridondanti) che codificano le deviazioni standard e le correlazioni, nonché come attributi ("sc"
) dando la deviazione standard residua e specificando se il modello ha un parametro di scala stimato ("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
##
Se si desidera che i valori siano VarCorr() è molto più efficiente. Date un'occhiata al post di Ben Bolker – Thierry
questo è un po 'obsoleto ora (anche se la domanda originale si riferisce a "oggetti mer", che sono per definizione associati a pre-1.0 'lme4' - la classe è ora chiamata' merMod'. –