46

固定効果とランダム効果を持つ mer オブジェクトがあります。変量効果の分散推定値を抽出するにはどうすればよいですか? これが私の質問の簡略版です。

study <- lmer(Reaction ~ Days + (1|Subject), data = sleepstudy)
study

これにより、長い出力が得られます。この場合、長すぎません。とにかく、明示的に選択するにはどうすればよいですか

Random effects:
Groups   Name        Variance Std.Dev.
Subject  (Intercept) 1378.18  37.124  
Residual              960.46  30.991  

出力の一部?価値そのものが欲しい。

私は長い間見てきました

str(study)

そこには何もありません!また、lme4 パッケージのエクストラクタ関数をチェックしても無駄でした。助けてください!

4

7 に答える 7

81

他の答えのいくつかは実行可能ですが、最良の答えは、このために設計されたアクセサメソッドを使用することであると主張します- (これは、の前身であるパッケージVarCorrと同じです)。lme4nlme

の最近のバージョンlme4(バージョン 1.1-7、ただし、以下のすべてはおそらくバージョン >= 1.0 に適用可能)のUPDATEVarCorrは、以前よりも柔軟であり、適合したモデル オブジェクト内で釣りをすることに頼ることなく、必要なすべてを実行する必要があります。

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
## 
于 2011-12-15T23:46:52.610 に答える
14

lmerS4オブジェクトを返すので、これはうまくいくはずです:

remat <- summary(study)@REmat
print(remat, quote=FALSE)

どちらが印刷されますか:

 Groups   Name        Variance Std.Dev.
 Subject  (Intercept) 1378.18  37.124  
 Residual              960.46  30.991  

...一般に、 「mer」オブジェクトのprintおよびメソッドのソースを見ることができます。summary

class(study) # mer
selectMethod("print", "mer")
selectMethod("summary", "mer")
于 2011-12-15T21:42:12.670 に答える
5
> attributes(summary(study))$REmat
 Groups     Name          Variance  Std.Dev.
 "Subject"  "(Intercept)" "1378.18" "37.124"
 "Residual" ""            " 960.46" "30.991"
于 2011-12-15T21:41:38.583 に答える
0

このパッケージは、次のような場合に役立ちます ( https://easystats.github.io/insight/reference/index.html )

library("insight")

get_variance_random(study) #Where study is your fit mixed model
于 2020-04-26T15:46:16.467 に答える
-7

試す

attributes(study)

例として:

> women
   height weight
1      58    115
2      59    117
3      60    120
4      61    123
5      62    126
6      63    129
7      64    132
8      65    135
9      66    139
10     67    142
11     68    146
12     69    150
13     70    154
14     71    159
15     72    164

> lm1 <- lm(height ~ weight, data=women)
> attributes(lm1)
$names
 [1] "coefficients"  "residuals"     "effects"       "rank"         
 [5] "fitted.values" "assign"        "qr"            "df.residual"  
 [9] "xlevels"       "call"          "terms"         "model"        

$class
[1] "lm"

> lm1$coefficients
(Intercept)      weight 
 25.7234557   0.2872492 

> lm1$coefficients[[1]]

[1] 25.72346


> lm1$coefficients[[2]]

[1] 0.2872492

終わり。

于 2011-12-15T21:38:52.660 に答える