2011-12-15 11 views
36

से यादृच्छिक प्रभाव भिन्नताएं निकालें मेरे पास एक मेर ऑब्जेक्ट है जिसमें निश्चित और यादृच्छिक प्रभाव हैं। मैं यादृच्छिक प्रभावों के लिए भिन्नता अनुमान कैसे निकालूं? यहां मेरे प्रश्न का सरलीकृत संस्करण है।lme4 मेर मॉडल ऑब्जेक्ट

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 पैकेज में किसी भी निकालने वाले कार्यों की भी जांच की गई। कृपया सहायता कीजिए!

उत्तर

12

lmer एक एस 4 वस्तु देता है, तो यह काम करना चाहिए:

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

कौन सा प्रिंट:

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

... सामान्य में, आप print का स्रोत देख सकते हैं और summary "मेर" ऑब्जेक्ट्स के लिए विधियां:

class(study) # mer 
selectMethod("print", "mer") 
selectMethod("summary", "mer") 
+5

यदि आप मान चाहते हैं तो VarCorr() अधिक कुशल है। बेन बोल्कर – Thierry

+1

के पोस्ट पर एक नज़र डालें, यह अब कुछ हद तक पुराना है (हालांकि मूल प्रश्न "मेर ऑब्जेक्ट्स" का संदर्भ देता है, जो पूर्व-1.0 'lme4' से जुड़ी परिभाषा के अनुसार है - कक्षा को अब' MerMod'। –

-6

एक उदाहरण के रूप

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 

अंत।

+2

एर, आपका कोड 'एलएम()' का उपयोग करता है, प्रश्न 'lmer()' के बारे में थे, जो * एक ही चीज़ नहीं है। –

+0

यह सही है, यह आर ऑब्जेक्ट्स तक पहुंचने का एक सामान्य तरीका था। – abcde123483

6
> attributes(summary(study))$REmat 
Groups  Name   Variance Std.Dev. 
"Subject" "(Intercept)" "1378.18" "37.124" 
"Residual" ""   " 960.46" "30.991" 
+0

मैं गलत हो सकता हूं, वहां 'गुण' (सारांश (अध्ययन)) में 'रीमेट' नहीं दिखता है ' – blazej

62

कुछ अन्य उत्तर काम करने योग्य हैं, लेकिन मेरा दावा है कि सबसे अच्छा जवाब यह है कि 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(study)) 
##  grp  var1 var2  vcov sdcor 
## 1 Subject (Intercept) <NA> 1378.1785 37.12383 
## 2 Residual  <NA> <NA> 960.4566 30.99123 

:

अधिक लचीलेपन के लिए, आप VarCorr वस्तु है, जो समूहीकरण चर देता है, प्रभाव चर (रों), और विचरण/सहप्रसरण या मानक विचलन/सह-संबंध कन्वर्ट करने के लिए as.data.frame विधि का उपयोग कर सकते हैं अंत में, 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 
## 
+0

VarCorr केवल std विचलन प्रदान करने के लिए प्रतीत होता है कि भिन्न लोगों में क्या नहीं है जो सामान्य लोगों में सही रिपोर्ट करना चाहते हैं? – user1320502

+3

(1) मानक विचलन को चौकोर करना बहुत आसान है; (2) 'प्रिंट (VarCorr (fitted_model), comp = "भिन्नता") 'या' as.data.frame (VarCorr (fitted_model)) 'आसानी से भिन्नताओं को पुनर्प्राप्त करेगा; (3) रिपोर्टिंग भिन्नता बनाम मानक विचलन संदर्भ निर्भर है - यदि आम तौर पर सोचने की कोशिश कर रहे हैं तो मैं भिन्नता पसंद करता हूं फिक्स्ड इफेक्ट्स की परिमाण की तुलना करने की कोशिश करते समय var decomposition/अनुपात समझाया गया है और std devs –

+0

आपकी टिप्पणी बेन के लिए धन्यवाद, बहुत उपयोगी! – user1320502

संबंधित मुद्दे