Masalah:
Saya telah membaca di posting lain yang predicttidak tersedia untuk lmermodel 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 Recalllaju beberapa kata, dan beberapa variabel penjelas, termasuk efek acak (di Auditoriummana tes berlangsung; Subjectnama); 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, Auditoriumdan 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 Timedan 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 predictfungsi beroperasi dalam lmermodel ini ? Jelas itu mempertimbangkan Timevariabel, menghasilkan kesesuaian yang lebih ketat, dan zig-zag yang mencoba menampilkan dimensi ketiga ini Timedigambarkan dalam plot pertama.
Jika saya menelepon predict(fit2)saya mendapatkan 132.45609entri pertama, yang sesuai dengan poin pertama. Berikut adalah headdataset 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 fit2adalah:
$`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 .
?predictdi konsol [r], saya mendapatkan prediksi dasar untuk {stats} ...
predict.merMod... Seperti yang Anda lihat di OP, saya hanya menelepon predict...
lme4paket, lalu ketik lme4 ::: predict.merMod untuk melihat versi khusus paket. Output dari lmerdisimpan dalam objek kelas merMod.
predicttahu apa yang harus dilakukan tergantung pada kelas objek yang dipanggil untuk ditindaklanjuti. Anda menelepon predict.merMod, Anda tidak tahu itu.




predictfungsi 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.