Sorun:
Diğer okuduğunuz mesajlarınpredict
karışık etkiler için geçerli değildir lmer
: [R] de {lme4} modelleri.
Bu konuyu bir oyuncak veri seti ile keşfetmeye çalıştım ...
Arka fon:
Veri kümesi bu kaynaktan uyarlanır ve ...
require(gsheet)
data <- read.csv(text =
gsheet2text('https://docs.google.com/spreadsheets/d/1QgtDcGJebyfW7TJsB8n6rAmsyAnlz1xkT3RuPFICTdk/edit?usp=sharing',
format ='csv'))
Bunlar ilk satırlar ve başlıklar:
> 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
Bazı tekrar gözlemleri (sahip Time
sürekli bir ölçüm, yani bir) Recall
bazı kelimelerin hızı ve de dahil olmak üzere çeşitli açıklayıcı değişkenler, rastgele etkileri ( Auditorium
, test gerçekleştirildi Subject
isim); ve sabit etkiler gibi Education
, Emotion
(kelimenin duygusal çağrışım hatırlamak) veya ve sindirilen testten önce.Caffeine
Fikir hiper-kafeinli kablolu konular için hatırlamak kolay, ama yetenek, belki yorgunluk nedeniyle, zamanla azalır. Olumsuz çağrışımları olan sözcükleri hatırlamak daha zordur. Eğitimin tahmin edilebilir bir etkisi vardır ve oditoryum bile bir rol oynar (belki biri daha gürültülü ya da daha az rahattı). İşte birkaç keşif alanı:
Bir fonksiyonu olarak hatırlama oranındaki farklılıklar Emotional Tone
, Auditorium
ve Education
:
Çağrı için veri bulutuna çizgiler takarken:
fit1 <- lmer(Recall ~ (1|Subject) + Caffeine, data = data)
Bu arsa anladım:
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)
şu model ise:
fit2 <- lmer(Recall ~ (1|Subject/Time) + Caffeine, data = data)
dahil etmek Time
ve paralel bir kod şaşırtıcı bir arsa alır:
p <- ggplot(data, aes(x = Caffeine, y = Recall, colour = Subject)) +
geom_point(size=3) +
geom_line(aes(y = predict(fit2)),size=1)
print(p)
Soru:
predict
İşlev bu lmer
modelde nasıl çalışır ? Açıkça görülüyor ki Time
değişken çok daha sıkı bir uyumla sonuçlandı Time
ve ilk çizimde gösterilen bu üçüncü boyutu göstermeye çalışan zig-zagging göz önüne alındı .
Ben ararsam predict(fit2)
alıyorum 132.45609
ilk noktaya hangi karşılık, ilk giriş için. İşte head
çıkışını ile veri kümesinin predict(fit2)
son sütunu olarak ekli:
> 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
Katsayıları 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
En iyi şansım ...
> 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
Bunun yerine almak için formül nedir 132.45609
?
Hızlı erişim için EDIT ... Öngörülen değeri hesaplamak için formül (kabul edilen cevaba göre ranef(fit2)
çıktıya göre olacaktır :
> 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
... ilk giriş noktası için:
> 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
Bu yazının kodu burada .
?predict
[r] konsolda, ben ... Temel {istatistikler} için tahmin olsun
predict.merMod
, yine de ... OP'de gördüğünüz gibi, basitçe aradım predict
...
lme4
Paketi yükleyin , sonra pakete özgü sürümü görmek için lme4 ::: predict.merMod yazın. Çıktısı lmer
bir sınıf nesnesine kaydedilir merMod
.
predict
üzerinde durulması gereken nesnenin sınıfına bağlı olarak ne yapılması gerektiğini bilmesidir. Arayordun predict.merMod
, bilmiyordun.
predict
Bu pakette 2013-08-01'de yayınlanan Sürüm 1.0-0’dan bu yana bir işlev bulunduğunu unutmayın. CRAN'daki paket haber sayfasına bakın . Olmasaydı, sonuç alamazdınızpredict
. R kodunu, R komut isteminde lme4 ::: predict.merMod ile görebildiğinizi ve kaynak paketinde bulunan derlenmiş tüm fonksiyonların kaynağını inceleyebileceğinizi unutmayınlme4
.