2015-03-25 11 views
5

मैं मिश्रित प्रभाव मॉडल फिट करने की कोशिश कर रहा हूं और फिर उस मॉडल का उपयोग ऐसे नए डेटासेट पर अनुमान उत्पन्न करने के लिए करता हूं जिसमें विभिन्न स्तर हो सकते हैं। मुझे उम्मीद थी कि एक नए डेटासेट पर अनुमान अनुमानित मानकों के औसत मूल्य का उपयोग करेंगे, लेकिन ऐसा लगता है कि ऐसा नहीं लगता है। यहाँ एक न्यूनतम काम कर उदाहरण है:नए स्तरों पर lme4 के साथ भविष्यवाणी

library(lme4) 
d = data.frame(x = rep(1:10, times = 3), 
       y = NA, 
       grp = rep(1:3, each = 10)) 
d$y[d$grp == 1] = 1:10 + rnorm(10) 
d$y[d$grp == 2] = 1:10 * 1.5 + rnorm(10) 
d$y[d$grp == 3] = 1:10 * 0.5 + rnorm(10) 
fit = lmer(y ~ (1+x)|grp, data = d) 
newdata = data.frame(x = 1:10, grp = 4) 
predict(fit, newdata = newdata, allow.new.levels = TRUE) 

इस उदाहरण में, मैं अनिवार्य रूप से अलग प्रतिगमन समीकरण (1, 1.5 और 0.5 की ढलानों) के साथ तीन समूहों को परिभाषित कर रहा हूँ। हालांकि, जब मैं एक अदृश्य स्तर के साथ एक नए डेटासेट पर भविष्यवाणी करने का प्रयास करता हूं, तो मुझे निरंतर अनुमान मिलता है। मैं इस नए डेटा के लिए पूर्वानुमान उत्पन्न करने के लिए ढलान और अवरोध के अपेक्षित मूल्य की अपेक्षा करता था। क्या मैं गलत चीज़ की उम्मीद कर रहा हूं? या, मैं अपने कोड के साथ क्या गलत कर रहा हूँ?

+2

मेरा मानना ​​है कि 'predict.merMod' नए स्तर के लिए मॉडल के निश्चित प्रभाव भागों से गुणांक का उपयोग करता है। 'वाई ~ एक्स + (एक्स | जीआरपी)' एक अधिक समझदार मॉडल विनिर्देश है। – Roland

+0

आह, यह समझ में आता है! यदि आप इसे उत्तर के रूप में जोड़ते हैं तो मैं इसे स्वीकार करूंगा। –

उत्तर

8

मैं आमतौर पर एक निश्चित ढलान के बिना एक यादृच्छिक ढलान शामिल नहीं होगा। ऐसा लगता है कि predict.merMod मेरे साथ सहमत है, क्योंकि ऐसा लगता है कि यह केवल नए स्तरों की भविष्यवाणी करने के लिए केवल निश्चित प्रभावों का उपयोग करता है। दस्तावेज कहता है "भविष्यवाणी पहले से अप्रबंधित स्तर वाले डेटा के लिए बिना शर्त (आबादी-स्तर) मानों का उपयोग करेगी, लेकिन इन मानों को आपके मॉडल विनिर्देश के साथ अनुमानित प्रतीत नहीं होता है।

इस प्रकार, मैं इस मॉडल का सुझाव:

fit = lmer(y ~ x + (x|grp), data = d) 
newdata = data.frame(x = 1:10, grp = 4) 
predict(fit, newdata = newdata, allow.new.levels = TRUE) 
#  1   2   3   4   5   6   7   8   9  10 
#1.210219 2.200685 3.191150 4.181616 5.172082 6.162547 7.153013 8.143479 9.133945 10.124410 

यह वही है के रूप में केवल मॉडल की तय प्रभाव भाग का उपयोग कर:

t(cbind(1, newdata$x) %*% fixef(fit)) 
#   [,1]  [,2] [,3]  [,4]  [,5]  [,6]  [,7]  [,8]  [,9] [,10] 
#[1,] 1.210219 2.200685 3.19115 4.181616 5.172082 6.162547 7.153013 8.143479 9.133945 10.12441 
5

हो सकता है कि यह काफी स्पष्ट नहीं है, लेकिन मुझे लगता है कि ?predict.merMod राज्यों (उचित रूप से) के लिए प्रलेखन स्पष्ट रूप से तब होता है जब allow.new.levels=TRUE। मुझे लगता है कि अस्पष्टता में क्या "बिना शर्त (जनसंख्या-स्तर) को महत्व देता है" का अर्थ हो सकता है ...

allow.new.levels: अगर तार्किक 'newdata' में नए स्तर (या एनए मान) अनुमति दी जाती है। यदि गलत (डिफ़ॉल्ट), 'newdata' में ऐसे नए मान एक त्रुटि को ट्रिगर करेंगे; यदि सही है, तो भविष्यवाणी के साथ पूर्व शर्त रहित स्तर (या एनएएस) के साथ डेटा के बिना शर्त (आबादी-स्तर) मानों का उपयोग करेगी।

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