Saya menggunakan lmer di R untuk memeriksa efek kondisi ( cond
) pada beberapa hasil. Berikut adalah beberapa data yang dibuat, di mana s adalah pengidentifikasi subjek dan a
, b
dan c
kondisi.
library("tidyr")
library("dplyr")
set.seed(123)
temp <- data.frame(s = paste0("S", 1:30),
a = rnorm(30, -2, 1),
b = rnorm(30, -3, 1),
c = rnorm(30, -4, 1))
Saya ingin membandingkan
- level
a
ke rata-rata levelb
danc
dan - level
b
ke levelc
.
Pertanyaan saya adalah, bagaimana cara mengatur kontras untuk melakukan ini sedemikian rupa sehingga intersep mencerminkan rata-rata dari tiga kondisi dan dua estimasi yang dihitung secara langsung mencerminkan perbedaan sebagaimana didefinisikan dalam 1. dan 2.?
Saya mencoba
c1 <- cbind(c(-0.5, 0.25, 0.25), c(0, -0.5, 0.5))
gather(temp, cond, result, a, b, c) %>%
lmer(result ~ cond + (1|s), data = ., contrasts = list(cond = c1))
di mana cond2
tampaknya OK, tetapi cond1
tidak.
Mengikuti Bagaimana menafsirkan kontras khusus ini? , Saya mencoba menggunakan invers umum, sebagai gantinya, tetapi perkiraan ini juga tidak masuk akal.
c2 <- t(ginv(c1))
gather(temp, cond, result, a, b, c) %>%
lmer(result ~ cond + (1|s), data = ., contrasts = list(cond = c2))
Saya mencoba kontras Helmert juga, tetapi cara masih tidak cocok.
gather(temp, cond, result, a, b, c) %>%
mutate(cond = factor(cond, levels = c("c", "b", "a"))) %>%
lmer(result ~ cond + (1|s), data = ., contrasts = list(cond = contr.helmert))
Apa cara yang benar untuk melakukan ini?
Jawaban:
Untuk langkah-langkah berikut, kita membutuhkan bingkai data dalam format panjang. Frame data
dat
berisi variabel dependenresult
, yang kategoris prediktorcond
(tingkatan:a
,b
, danc
), dan faktor acaks
.Berikut ini, saya akan menggambarkan dua pendekatan untuk membuat matriks kontras yang sesuai dengan kondisi yang ingin Anda bandingkan:
Kontras khusus
Matriks
mat
sesuai dengan perbedaan level.Untuk membuat matriks kontras aktual, kami menghitung invers umum dengan
ginv
(dariMASS
).Matriks kontras ini
cMat
dapat digunakan dilmer
.Seperti yang Anda lihat, perkiraan efek tetap sesuai dengan perbedaan yang ditentukan di atas. Selanjutnya, intersep mewakili rata-rata keseluruhan.
Helmert kontras dengan
contr.helmert
Anda juga dapat menggunakan
contr.helmert
fungsi bawaan untuk membuat matriks kontras.Namun, pesanan tidak sesuai dengan yang Anda tentukan dalam pertanyaan. Karenanya, kita harus membalik urutan kolom dan baris. Kolom pertama berkorespondensi dengan
b
vs.a
dan yang kedua berkorespondensi denganc
rata-rata darib
dana
.Bandingkan matriks kontras
cHelmert2
untukcMat
. Anda akan melihat bahwa kolom adalah versi skala dari matriks lain.Hasilnya
lmer
adalah:sumber
mat
akankahc(1, -1/3, -1/3, -1/3)
? Jadi saya selalu mengatur angka seperti pada rumus (a + (b + c + d) / 3) dan kemudianginv
menskala dengan tepat sehingga koefisien langsung mencerminkan perbedaannya. Dan ketika Anda mengubah urutan dalam contoh Helmert, itu hanya untuk mencocokkan pertanyaan? Kalau tidak, hasilnya harus sama, terlepas dari urutan kontrasnya, bukan?