समस्या:
मैंने अन्य पोस्टों में पढ़ा है जो predict
मिश्रित प्रभावों के लिए उपलब्ध नहीं है lmer
{lme4} मॉडल [R] में।
मैंने एक खिलौना डाटासेट के साथ इस विषय की खोज करने की कोशिश की ...
पृष्ठभूमि:
डेटासेट को इस स्रोत के रूप में अनुकूलित किया गया है , और इसके रूप में उपलब्ध ...
require(gsheet)
data <- read.csv(text =
gsheet2text('https://docs.google.com/spreadsheets/d/1QgtDcGJebyfW7TJsB8n6rAmsyAnlz1xkT3RuPFICTdk/edit?usp=sharing',
format ='csv'))
ये पहली पंक्तियाँ और शीर्षक हैं:
> head(data)
Subject Auditorium Education Time Emotion Caffeine Recall
1 Jim A HS 0 Negative 95 125.80
2 Jim A HS 0 Neutral 86 123.60
3 Jim A HS 0 Positive 180 204.00
4 Jim A HS 1 Negative 200 95.72
5 Jim A HS 1 Neutral 40 75.80
6 Jim A HS 1 Positive 30 84.56
हमारे पास Time
एक निरंतर माप के कुछ दोहराया अवलोकन ( ) हैं, अर्थात् Recall
कुछ शब्दों की दर, और कई व्याख्यात्मक चर, जिनमें यादृच्छिक प्रभाव ( Auditorium
जहां परीक्षण हुआ; Subject
नाम); और निश्चित प्रभाव , जैसे Education
, Emotion
(याद करने के लिए शब्द का भावनात्मक अर्थ), या का Caffeine
परीक्षण करने से पहले किया जाता।
यह विचार है कि हाइपर-कैफीनयुक्त वायर्ड विषयों के लिए याद रखना आसान है, लेकिन समय के साथ क्षमता कम हो जाती है, शायद थकान के कारण। नकारात्मक अर्थ के साथ शब्दों को याद रखना अधिक कठिन है। शिक्षा का एक पूर्वानुमानित प्रभाव होता है, और यहां तक कि सभागार भी एक भूमिका निभाता है (शायद एक अधिक शोर, या कम आरामदायक था)। यहाँ खोजपूर्ण भूखंडों के एक जोड़े हैं:
के एक समारोह के रूप में याद करते हैं दर में अंतर Emotional Tone
, Auditorium
और Education
:
जब कॉल के लिए डेटा क्लाउड पर फिटिंग लाइन:
fit1 <- lmer(Recall ~ (1|Subject) + Caffeine, data = data)
मुझे यह प्लॉट मिलता है:
library(ggplot2)
p <- ggplot(data, aes(x = Caffeine, y = Recall, colour = Subject)) +
geom_point(size=3) +
geom_line(aes(y = predict(fit1)),size=1)
print(p)
निम्नलिखित मॉडल के दौरान:
fit2 <- lmer(Recall ~ (1|Subject/Time) + Caffeine, data = data)
समाहित करने Time
और एक समानांतर कोड में एक आश्चर्यजनक साजिश मिलती है:
p <- ggplot(data, aes(x = Caffeine, y = Recall, colour = Subject)) +
geom_point(size=3) +
geom_line(aes(y = predict(fit2)),size=1)
print(p)
प्रश्न:
predict
इस lmer
मॉडल में फ़ंक्शन कैसे संचालित होता है ? जाहिर है कि यह Time
चर को ध्यान में रख रहा है, जिसके परिणामस्वरूप बहुत तंग फिट है, और जिग-जैगिंग जो Time
पहले भूखंड में चित्रित के इस तीसरे आयाम को प्रदर्शित करने की कोशिश कर रहा है ।
यदि मैं फोन करता predict(fit2)
हूं तो मुझे 132.45609
पहली प्रविष्टि मिलती है , जो पहले बिंदु से मेल खाती है। अंतिम कॉलम के रूप head
में predict(fit2)
संलग्न के आउटपुट के साथ डेटासेट यहां है :
> data$predict = predict(fit2)
> head(data)
Subject Auditorium Education Time Emotion Caffeine Recall predict
1 Jim A HS 0 Negative 95 125.80 132.45609
2 Jim A HS 0 Neutral 86 123.60 130.55145
3 Jim A HS 0 Positive 180 204.00 150.44439
4 Jim A HS 1 Negative 200 95.72 112.37045
5 Jim A HS 1 Neutral 40 75.80 78.51012
6 Jim A HS 1 Positive 30 84.56 76.39385
के लिए गुणांक fit2
हैं:
$`Time:Subject`
(Intercept) Caffeine
0:Jason 75.03040 0.2116271
0:Jim 94.96442 0.2116271
0:Ron 58.72037 0.2116271
0:Tina 70.81225 0.2116271
0:Victor 86.31101 0.2116271
1:Jason 59.85016 0.2116271
1:Jim 52.65793 0.2116271
1:Ron 57.48987 0.2116271
1:Tina 68.43393 0.2116271
1:Victor 79.18386 0.2116271
2:Jason 43.71483 0.2116271
2:Jim 42.08250 0.2116271
2:Ron 58.44521 0.2116271
2:Tina 44.73748 0.2116271
2:Victor 36.33979 0.2116271
$Subject
(Intercept) Caffeine
Jason 30.40435 0.2116271
Jim 79.30537 0.2116271
Ron 13.06175 0.2116271
Tina 54.12216 0.2116271
Victor 132.69770 0.2116271
मेरी सबसे अच्छी शर्त थी ...
> coef(fit2)[[1]][2,1]
[1] 94.96442
> coef(fit2)[[2]][2,1]
[1] 79.30537
> coef(fit2)[[1]][2,2]
[1] 0.2116271
> data$Caffeine[1]
[1] 95
> coef(fit2)[[1]][2,1] + coef(fit2)[[2]][2,1] + coef(fit2)[[1]][2,2] * data$Caffeine[1]
[1] 194.3744
इसके बजाय पाने का सूत्र क्या है 132.45609
?
त्वरित पहुँच के लिए EDIT ... अनुमानित मूल्य की गणना करने का सूत्र (स्वीकृत उत्तर के अनुसार ranef(fit2)
आउटपुट पर आधारित होगा :
> ranef(fit2)
$`Time:Subject`
(Intercept)
0:Jason 13.112130
0:Jim 33.046151
0:Ron -3.197895
0:Tina 8.893985
0:Victor 24.392738
1:Jason -2.068105
1:Jim -9.260334
1:Ron -4.428399
1:Tina 6.515667
1:Victor 17.265589
2:Jason -18.203436
2:Jim -19.835771
2:Ron -3.473053
2:Tina -17.180791
2:Victor -25.578477
$Subject
(Intercept)
Jason -31.513915
Jim 17.387103
Ron -48.856516
Tina -7.796104
Victor 70.779432
... पहली प्रविष्टि बिंदु के लिए:
> summary(fit2)$coef[1]
[1] 61.91827 # Overall intercept for Fixed Effects
> ranef(fit2)[[1]][2,]
[1] 33.04615 # Time:Subject random intercept for Jim
> ranef(fit2)[[2]][2,]
[1] 17.3871 # Subject random intercept for Jim
> summary(fit2)$coef[2]
[1] 0.2116271 # Fixed effect slope
> data$Caffeine[1]
[1] 95 # Value of caffeine
summary(fit2)$coef[1] + ranef(fit2)[[1]][2,] + ranef(fit2)[[2]][2,] +
summary(fit2)$coef[2] * data$Caffeine[1]
[1] 132.4561
इस पोस्ट का कोड यहाँ है ।
?predict
[r] कंसोल पर टाइप करता हूं, तो मुझे {आंकड़े} के लिए मूल भविष्यवाणी मिलती है ...
predict.merMod
, हालांकि ... जैसा कि आप ओपी पर देख सकते हैं, मैंने बस फोन किया predict
...
lme4
पैकेज लोड करें , फिर टाइप करें lme4 ::: predict.merMod पैकेज-विशिष्ट संस्करण देखने के लिए। से आउटपुट lmer
को क्लास के ऑब्जेक्ट में स्टोर किया जाता है merMod
।
predict
जानता है कि उस वस्तु के वर्ग के आधार पर क्या करना है जिसे इसे कार्य करने के लिए कहा जाता है। आप फोन predict.merMod
कर रहे थे , आप इसे नहीं जानते थे।
predict
2013-08-01 के संस्करण 1.0-0 के बाद से इस पैकेज में एक समारोह हुआ है। CRAN में पैकेज समाचार पृष्ठ देखें । अगर वहाँ नहीं था, आप के साथ किसी भी परिणाम प्राप्त करने में सक्षम नहीं होगाpredict
। यह न भूलें कि आप R कोड को lme4 के साथ देख सकते हैं ::: predict.merMod पर R कमांड प्रॉम्प्ट, और स्रोत पैकेज में किसी भी अंतर्निहित संकलित फ़ंक्शन के लिए स्रोत का निरीक्षण करेंlme4
।