Masalah:
Saya telah membaca di posting lain yang predict
tidak tersedia untuk lmer
model efek campuran {lme4} di [R].
Saya mencoba menjelajahi subjek ini dengan dataset mainan ...
Latar Belakang:
Dataset diadaptasi dari sumber ini , dan tersedia sebagai ...
require(gsheet)
data <- read.csv(text =
gsheet2text('https://docs.google.com/spreadsheets/d/1QgtDcGJebyfW7TJsB8n6rAmsyAnlz1xkT3RuPFICTdk/edit?usp=sharing',
format ='csv'))
Ini adalah baris dan header pertama:
> 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
Kami memiliki beberapa pengamatan berulang ( Time
) dari pengukuran kontinu, yaitu Recall
laju beberapa kata, dan beberapa variabel penjelas, termasuk efek acak (di Auditorium
mana tes berlangsung; Subject
nama); dan memperbaiki efek , seperti Education
, Emotion
(konotasi emosional dari kata yang harus diingat), atau dari dicerna sebelum ujian.Caffeine
Idenya adalah mudah diingat untuk subjek berkabel hyper-caffeinated, tetapi kemampuannya menurun seiring waktu, mungkin karena kelelahan. Kata-kata dengan konotasi negatif lebih sulit untuk diingat. Pendidikan memiliki efek yang dapat diprediksi, dan bahkan auditorium memainkan peran (mungkin orang lebih berisik, atau kurang nyaman). Inilah beberapa plot eksplorasi:
Perbedaan dalam tingkat mengingat sebagai fungsi dari Emotional Tone
, Auditorium
dan Education
:
Saat memasang garis pada cloud data untuk panggilan:
fit1 <- lmer(Recall ~ (1|Subject) + Caffeine, data = data)
Saya mendapatkan plot ini:
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)
sedangkan model berikut:
fit2 <- lmer(Recall ~ (1|Subject/Time) + Caffeine, data = data)
menggabungkan Time
dan kode paralel mendapat plot mengejutkan:
p <- ggplot(data, aes(x = Caffeine, y = Recall, colour = Subject)) +
geom_point(size=3) +
geom_line(aes(y = predict(fit2)),size=1)
print(p)
Pertanyaan:
Bagaimana predict
fungsi beroperasi dalam lmer
model ini ? Jelas itu mempertimbangkan Time
variabel, menghasilkan kesesuaian yang lebih ketat, dan zig-zag yang mencoba menampilkan dimensi ketiga ini Time
digambarkan dalam plot pertama.
Jika saya menelepon predict(fit2)
saya mendapatkan 132.45609
entri pertama, yang sesuai dengan poin pertama. Berikut adalah head
dataset dengan output predict(fit2)
terlampir sebagai kolom terakhir:
> 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
Koefisien untuk fit2
adalah:
$`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
Taruhan terbaik saya adalah ...
> 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
Apa rumus untuk mendapatkan sebagai gantinya 132.45609
?
EDIT untuk akses cepat ... Rumus untuk menghitung nilai prediksi (sesuai dengan jawaban yang diterima akan didasarkan pada ranef(fit2)
output:
> 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
... untuk titik masuk pertama:
> 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
Kode untuk posting ini ada di sini .
sumber
predict
fungsi dalam paket ini sejak Versi 1.0-0, dirilis 2013-08-01. Lihat halaman berita paket di CRAN . Jika tidak ada, Anda tidak akan bisa mendapatkan hasil apa punpredict
. Jangan lupa bahwa Anda dapat melihat kode R dengan lme4 ::: predict.merMod pada prompt perintah R, dan periksa sumber untuk mengetahui fungsi kompilasi yang mendasarinya dalam paket sourcelme4
.?predict
di konsol [r], saya mendapatkan prediksi dasar untuk {stats} ...predict.merMod
... Seperti yang Anda lihat di OP, saya hanya meneleponpredict
...lme4
paket, lalu ketik lme4 ::: predict.merMod untuk melihat versi khusus paket. Output darilmer
disimpan dalam objek kelasmerMod
.predict
tahu apa yang harus dilakukan tergantung pada kelas objek yang dipanggil untuk ditindaklanjuti. Anda meneleponpredict.merMod
, Anda tidak tahu itu.Jawaban:
Sangat mudah untuk bingung dengan presentasi koefisien saat Anda menelepon
coef(fit2)
. Lihatlah ringkasan fit2:Ada penyadapan keseluruhan 61,92 untuk model, dengan koefisien kafein 0,212. Jadi untuk kafein = 95 Anda memperkirakan penarikan rata-rata 82,06.
Alih-alih menggunakan
coef
, gunakanranef
untuk mendapatkan perbedaan dari setiap intersep efek-acak dari intersep rata-rata pada level berikutnya yang lebih tinggi dari sarang:Nilai untuk Jim di Time = 0 akan berbeda dari yang nilai rata-rata 82,06 dengan jumlah dari kedua nya
Subject
dan nyaTime:Subject
koefisien:yang saya pikir dalam kesalahan pembulatan 132,46.
Nilai intersep yang dikembalikan
coef
tampaknya mewakili keseluruhan intersep plusSubject
atauTime:Subject
perbedaan spesifik, sehingga lebih sulit untuk bekerja dengan mereka; jika Anda mencoba melakukan perhitungan di atas dengancoef
nilai - nilai Anda akan menghitung ganda intersep keseluruhan.sumber
ranef
memeriksa kode R dilme4
. Saya mengklarifikasi presentasi di beberapa tempat.lme4
output. Selain itu, data yang disajikan tampaknya hanya untuk ilustrasi dan bukan sebagai studi nyata untuk dianalisis.