predict () lmer Karışık Etki Modelleri için İşlev


27

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 Timesürekli bir ölçüm, yani bir) Recallbazı kelimelerin hızı ve de dahil olmak üzere çeşitli açıklayıcı değişkenler, rastgele etkileri ( Auditorium, test gerçekleştirildi Subjectisim); ve sabit etkiler gibi Education, Emotion(kelimenin duygusal çağrışım hatırlamak) veya ve sindirilen testten önce.miligram.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ı:


görüntü tanımını buraya girin

Bir fonksiyonu olarak hatırlama oranındaki farklılıklar Emotional Tone, Auditoriumve Education:

görüntü tanımını buraya girin


Çağrı için veri bulutuna çizgiler takarken:

fit1 <- lmer(Recall ~ (1|Subject) + Caffeine, data = data)

Bu arsa anladım:

aşağıdaki kodla (içindeki <code> tahmin (fit1) </code> çağrısına dikkat edin):

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 Timeve 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)

görüntü tanımını buraya girin


Soru:

predictİşlev bu lmermodelde nasıl çalışır ? Açıkça görülüyor ki Timedeğişken çok daha sıkı bir uyumla sonuçlandı Timeve 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.45609ilk 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 .


3
predictBu 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ız predict. 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ın lme4.
EdM

1
Teşekkürler, görmezden gelinen ya da dahil edilen rastgele efektlerin olduğu işlevler var. Nasıl hesaplandığını nerede bulabileceğimi biliyor musun? Ben yazarsanız ?predict[r] konsolda, ben ... Temel {istatistikler} için tahmin olsun
Antoni Parellada

@EdM ... evet, bu benim için yeni ... Teşekkürler. Aramamıştım predict.merMod, yine de ... OP'de gördüğünüz gibi, basitçe aradım predict...
Antoni Parellada

1
lme4Paketi yükleyin , sonra pakete özgü sürümü görmek için lme4 ::: predict.merMod yazın. Çıktısı lmerbir sınıf nesnesine kaydedilir merMod.
EdM

4
R'nin en güzel yanlarından biri, bunun gibi bir işlevin predictüzerinde durulması gereken nesnenin sınıfına bağlı olarak ne yapılması gerektiğini bilmesidir. Arayordun predict.merMod, bilmiyordun.
EdM

Yanıtlar:


25

Aradığınızda katsayıların sunumuyla karıştırılmak kolaydır coef(fit2). Fit2'nin özetine bakın:

> summary(fit2)
Linear mixed model fit by REML ['lmerMod']
Formula: Recall ~ (1 | Subject/Time) + Caffeine
   Data: data
REML criterion at convergence: 444.5

Scaled residuals: 
 Min       1Q   Median       3Q      Max 
-1.88657 -0.46382 -0.06054  0.31430  2.16244 

Random effects:
 Groups       Name        Variance Std.Dev.
 Time:Subject (Intercept)  558.4   23.63   
 Subject      (Intercept) 2458.0   49.58   
 Residual                  675.0   25.98   
Number of obs: 45, groups:  Time:Subject, 15; Subject, 5

Fixed effects:
Estimate Std. Error t value
(Intercept) 61.91827   25.04930   2.472
Caffeine     0.21163    0.07439   2.845

Correlation of Fixed Effects:
 (Intr)
Caffeine -0.365

Kafein katsayısı 0.212 olan model için toplam 61.92'lik kesişme noktası var. Yani kafein = 95 için ortalama 82.06 hatırlama olacağını tahmin ediyorsunuz.

Kullanmak yerine , bir sonraki daha yüksek yuvalama düzeyindeki her bir rastgele etki kesişim noktasının ortalama kesişim noktasından farkını almak için coefkullanın ranef:

> 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

Jim = 0 sırasındaki değerler, hem onun Subject hem de Time:Subjectkatsayılarının toplamına göre, 82.06 ortalama değerinden farklı olacaktır :

82,06+17.39+33.04=132,49

sanırım 132.46. yuvarlama hatası içinde.

Tarafından döndürülen kesişme değerleri coefgenel kesişme noktasını artı Subjectveya Time:Subjectbelirli farklılıkları temsil ediyor gibi görünmektedir , bu nedenle bunlarla çalışmak daha zordur; Eğer yukarıdaki hesaplamayı coefdeğerlerle yapmaya kalkarsanız, toplam kesmeyi iki kat sayıyor olursunuz.


Teşekkür ederim! Bu olağanüstü! Ben o açık bırakarak bir anlamı budur ... var sanmıyorum o, cevap değil mi?
Antoni Parellada

Ben yaklaşık ipucu var ranefR kodunu inceleyerek dan lme4. Sunumu birkaç yerde açıkladım.
EdM

(+1) Not: kişi içinde iç içe geçmiş zaman rastgele etkiler bir şekilde garip görünüyor.
Michael M

@MichaelM: Evet, sunulan veriler iç içe geçmiş bir tasarımdan ziyade çarpı (Time x Subject) gibi görünüyor, ancak bu OP'nin lme4çıktıları nasıl yorumlayacağı sorusunu gündeme getirdiği yol . Ayrıca, sunulan veriler analiz edilecek gerçek bir çalışma olmaktan ziyade örnekleme olarak görünüyordu.
EdM
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.