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 .
?predict
di konsol [r], saya mendapatkan prediksi dasar untuk {stats} ...
predict.merMod
... Seperti yang Anda lihat di OP, saya hanya menelepon predict
...
lme4
paket, lalu ketik lme4 ::: predict.merMod untuk melihat versi khusus paket. Output dari lmer
disimpan dalam objek kelas merMod
.
predict
tahu apa yang harus dilakukan tergantung pada kelas objek yang dipanggil untuk ditindaklanjuti. Anda menelepon predict.merMod
, Anda tidak tahu itu.
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
.