Mengapa lme ​​dan aov mengembalikan hasil yang berbeda untuk tindakan berulang ANOVA di R?

24

Saya mencoba untuk beralih dari menggunakan ezpaket ke lmeuntuk tindakan berulang ANOVA (karena saya berharap saya akan dapat menggunakan kontras kustom dengan lme).

Mengikuti saran dari posting blog ini saya dapat mengatur model yang sama menggunakan keduanya aov(seperti halnya ez, ketika diminta) dan lme. Namun, sedangkan dalam contoh yang diberikan dalam posting itu nilai- F sangat setuju antara aovdan lme(saya memeriksanya, dan mereka melakukannya), ini bukan kasus untuk data saya. Meskipun nilai- F serupa, mereka tidak sama.

aovmengembalikan nilai-f dari 1,3399, lmemengembalikan 1,36264. Saya bersedia menerima aovhasilnya sebagai yang "benar" karena ini juga yang dikembalikan SPSS (dan inilah yang diperhitungkan untuk bidang / pengawas saya).

Pertanyaan:

  1. Alangkah baiknya jika seseorang bisa menjelaskan mengapa perbedaan ini ada dan bagaimana saya bisa gunakan lmeuntuk memberikan hasil yang kredibel. (Saya juga akan bersedia menggunakan lmeralih-alih lmeuntuk jenis barang ini, jika memberikan hasil yang "benar". Namun, saya belum menggunakannya sejauh ini.)

  2. Setelah menyelesaikan masalah ini, saya ingin menjalankan analisis kontras. Terutama saya akan tertarik pada kontras menggabungkan dua tingkat faktor pertama (yaitu, c("MP", "MT")) dan membandingkannya dengan faktor tingkat ketiga (yaitu, "AC"). Selanjutnya, menguji tingkat faktor ketiga versus keempat (yaitu, "AC"versus "DA").

Data:

tau.base <- structure(list(id = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 
9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 
22L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 
14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L, 1L, 2L, 3L, 4L, 
5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 
19L, 20L, 21L, 22L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 
11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L), .Label = c("A18K", 
"D21C", "F25E", "G25D", "H05M", "H07A", "H08H", "H25C", "H28E", 
"H30D", "J10G", "J22J", "K20U", "M09M", "P20E", "P26G", "P28G", 
"R03C", "U21S", "W08A", "W15V", "W18R"), class = "factor"), factor = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L), .Label = c("MP", "MT", "AC", "DA"
), class = "factor"), value = c(0.9648092876, 0.2128662077, 1, 
0.0607615485, 0.9912814024, 3.22e-08, 0.8073856412, 0.1465590332, 
0.9981672618, 1, 1, 1, 0.9794401938, 0.6102546108, 0.428651501, 
1, 0.1710644881, 1, 0.7639763913, 1, 0.5298989196, 1, 1, 0.7162733447, 
0.7871177434, 1, 1, 1, 0.8560509327, 0.3096989662, 1, 8.51e-08, 
0.3278862311, 0.0953598576, 1, 1.38e-08, 1.07e-08, 0.545290432, 
0.1305621416, 2.61e-08, 1, 0.9834051136, 0.8044114935, 0.7938839461, 
0.9910112678, 2.58e-08, 0.5762677121, 0.4750002288, 1e-08, 0.8584252623, 
1, 1, 0.6020385797, 8.51e-08, 0.7964935271, 0.2238374288, 0.263377904, 
1, 1.07e-08, 0.3160751898, 5.8e-08, 0.3460325565, 0.6842217296, 
1.01e-08, 0.9438301877, 0.5578367224, 2.18e-08, 1, 0.9161424562, 
0.2924856039, 1e-08, 0.8672987992, 0.9266688748, 0.8356425464, 
0.9988463913, 0.2960361777, 0.0285680426, 0.0969063841, 0.6947998266, 
0.0138254805, 1, 0.3494775301, 1, 2.61e-08, 1.52e-08, 0.5393467752, 
1, 0.9069223275)), .Names = c("id", "factor", "value"), class = "data.frame", row.names = c(1L, 
6L, 10L, 13L, 16L, 17L, 18L, 22L, 23L, 24L, 27L, 29L, 31L, 33L, 
42L, 43L, 44L, 45L, 54L, 56L, 58L, 61L, 64L, 69L, 73L, 76L, 79L, 
80L, 81L, 85L, 86L, 87L, 90L, 92L, 94L, 96L, 105L, 106L, 107L, 
108L, 117L, 119L, 121L, 124L, 127L, 132L, 136L, 139L, 142L, 143L, 
144L, 148L, 149L, 150L, 153L, 155L, 157L, 159L, 168L, 169L, 170L, 
171L, 180L, 182L, 184L, 187L, 190L, 195L, 199L, 202L, 205L, 206L, 
207L, 211L, 212L, 213L, 216L, 218L, 220L, 222L, 231L, 232L, 233L, 
234L, 243L, 245L, 247L, 250L))

Dan kodenya:

require(nlme)

summary(aov(value ~ factor+Error(id/factor), data = tau.base))

anova(lme(value ~ factor, data = tau.base, random = ~1|id))
Henrik
sumber
Sepertinya Anda baru saja menjawab bagian tentang perbedaan Anda dalam jawaban Anda di sini ; jika tidak, harap edit pertanyaan ini sehingga kami tahu kesulitan apa yang tersisa.
Aaron - Pasang kembali Monica
2
@ Harun, selama ada perbedaan dalam lmehasil dari buku teks standar ANOVA (diberikan oleh aov, dan yang saya butuhkan), ini bukan pilihan bagi saya. Dalam makalah saya, saya ingin melaporkan ANOVA, bukan sesuatu seperti ANOVA. Menariknya Venables & Ripley (2002, p. 285) menunjukkan bahwa kedua pendekatan mengarah pada perkiraan yang identik. Tetapi perbedaan nilai-nilai F membuat saya merasa tidak enak. Lebih jauh, Anova()(dari car) hanya mengembalikan nilai Chi² untuk lmeobjek. Karena itu bagi saya, pertanyaan pertama saya belum dijawab.
Henrik
Saya mengerti (tetapi tidak berbagi) kewaspadaan Anda tentang lme; tetapi untuk kontras, glhtbekerja pada lmcocok juga, bukan hanya lmecocok. (Juga, lmehasilnya adalah hasil buku teks standar juga.)
Aaron - Reinstate Monica
Sayangnya Anda tidak dapat menentukan lmuntuk analisis ukuran berulang. Hanya aovdapat menangani tindakan berulang tetapi akan mengembalikan objek kelas aovlistyang sayangnya tidak ditangani oleh glht.
Henrik
3
lmmenggunakan kesalahan residual sebagai istilah kesalahan untuk semua efek; ketika ada efek yang harus menggunakan istilah kesalahan yang berbeda, aovdiperlukan (atau sebaliknya, menggunakan hasil dari lmuntuk menghitung F-statistik secara manual). Dalam contoh Anda, istilah kesalahan untuk factoradalah id:factorinteraksi, yang merupakan istilah kesalahan residual dalam model aditif. Bandingkan hasil Anda dengan anova(lm(value~factor+id)).
Aaron - Pasang kembali Monica

Jawaban:

28

Mereka berbeda karena model lme memaksa komponen varians idmenjadi lebih besar dari nol. Melihat tabel anova mentah untuk semua istilah, kita melihat bahwa kesalahan kuadrat rata-rata untuk id kurang dari itu untuk residual.

> anova(lm1 <- lm(value~ factor+id, data=tau.base))

          Df  Sum Sq Mean Sq F value Pr(>F)
factor     3  0.6484 0.21614  1.3399 0.2694
id        21  3.1609 0.15052  0.9331 0.5526
Residuals 63 10.1628 0.16131   

Ketika kita menghitung komponen varians, ini berarti bahwa varians karena id akan negatif. Ingatan saya tentang memori kuadrat rata-rata yang diharapkan adalah goyah, tetapi perhitungannya kira-kira seperti itu

(0.15052-0.16131)/3 = -0.003597.

Ini terdengar aneh tetapi bisa terjadi. Apa artinya adalah bahwa rata-rata untuk setiap id lebih dekat satu sama lain daripada yang Anda harapkan satu sama lain mengingat jumlah variasi residual dalam model.

Sebaliknya, menggunakan lme memaksa varian ini lebih besar dari nol.

> summary(lme1 <- lme(value ~ factor, data = tau.base, random = ~1|id))
...
Random effects:
 Formula: ~1 | id
        (Intercept)  Residual
StdDev: 3.09076e-05 0.3982667

Ini melaporkan penyimpangan standar, mengkuadratkan untuk mendapatkan hasil varians 9.553e-10untuk varians id dan 0.1586164untuk varians residual.

Sekarang, Anda harus tahu bahwa menggunakan aovtindakan berulang hanya tepat jika Anda percaya bahwa korelasi antara semua pasangan tindakan berulang adalah sama; ini disebut senyawa simetri. (Secara teknis, kebulatan diperlukan tapi ini sudah cukup untuk saat ini.) Salah satu alasan untuk menggunakan lmelebih aovadalah bahwa hal itu dapat menangani berbagai jenis struktur korelasi.

Dalam kumpulan data khusus ini, estimasi untuk korelasi ini negatif; ini membantu menjelaskan bagaimana rata-rata kesalahan kuadrat untuk id lebih kecil dari kesalahan kuadrat residual. Korelasi negatif berarti bahwa jika pengukuran pertama seseorang berada di bawah rata-rata, rata-rata, yang kedua akan di atas rata-rata, menjadikan total rata-rata untuk individu tersebut lebih rendah dari yang kita harapkan jika ada korelasi nol atau korelasi positif.

Menggunakan lmedengan efek acak setara dengan memasang model simetri majemuk di mana korelasi itu dipaksa menjadi non-negatif; kita bisa cocok dengan model di mana korelasinya dibiarkan negatif menggunakan gls:

> anova(gls1 <- gls(value ~ factor, correlation=corCompSymm(form=~1|id),
                    data=tau.base))
Denom. DF: 84 
            numDF   F-value p-value
(Intercept)     1 199.55223  <.0001
factor          3   1.33985   0.267

Tabel ANOVA ini setuju dengan tabel dari aovfit dan dari lmfit.

Oke, lalu bagaimana? Nah, jika Anda percaya bahwa varians dari iddan korelasi antara pengamatan harus non-negatif, lmefit sebenarnya lebih tepat daripada fit menggunakan aovatau lmkarena estimasi varians residualnya sedikit lebih baik. Namun, jika Anda yakin korelasi antar pengamatan bisa negatif, aovatau lmatau glslebih baik.

Anda mungkin juga tertarik mengeksplorasi struktur korelasi lebih lanjut; untuk melihat struktur korelasi umum, Anda akan melakukan sesuatu seperti

gls2 <- gls(value ~ factor, correlation=corSymm(form=~unclass(factor)|id),
data=tau.base)

Di sini saya hanya membatasi output ke struktur korelasi. Nilai 1 hingga 4 mewakili empat level factor; kita melihat bahwa faktor 1 dan faktor 4 memiliki korelasi negatif yang cukup kuat:

> summary(gls2)
...
Correlation Structure: General
 Formula: ~unclass(factor) | id 
 Parameter estimate(s):
 Correlation: 
  1      2      3     
2  0.049              
3 -0.127  0.208       
4 -0.400  0.146 -0.024

Salah satu cara untuk memilih di antara model-model ini adalah dengan uji rasio kemungkinan; ini menunjukkan bahwa model efek acak dan model struktur korelasi umum tidak berbeda secara statistik; ketika itu terjadi, model yang lebih sederhana biasanya lebih disukai.

> anova(lme1, gls2)
     Model df      AIC      BIC    logLik   Test  L.Ratio p-value
lme1     1  6 108.0794 122.6643 -48.03972                        
gls2     2 11 111.9787 138.7177 -44.98936 1 vs 2 6.100725  0.2965
Aaron - Pasang kembali Monica
sumber
2
Sebenarnya mungkin untuk menggunakan simetri gabungan dengan lmeuntuk memperoleh hasil yang sama seperti dengan aov(dan dengan demikian memungkinkan lmeuntuk semua ANOVA), yaitu menggunakan argumen korelasi dalam panggilan ke lme:anova(lme(value ~ factor, data = tau.base, random = ~1|id, correlation = corCompSymm(form = ~1|id)))
Henrik
1
Temuan yang bagus. Tapi tidak adakah parameter tambahan yang cocok? Ini memiliki tiga parameter varians; varians untuk id, varians residual, dan korelasinya, sedangkan gls hanya memiliki varians residual dan korelasi.
Aaron - Pasang kembali Monica
1
Argumen Anda terdengar masuk akal, namun hasilnya tidak setuju. Semua tabel anova ( aov, lmetanpa simetri gabungan, dan lmedengan simetri gabungan) memiliki jumlah dfs yang persis sama.
Henrik
1
Anda harus meyakinkan saya bahwa ketiga parameter tersebut benar-benar overparametrization dari dua parameter pertama. Sudahkah Anda mengetahui bagaimana mereka terkait?
Aaron - Reinstate Monica
1
Tidak, saya percaya output dari anova.lme(). Dari jawaban Anda, saya mendapat bahwa hubungan antara ANOVA dan model campuran terletak pada struktur korelasinya. Saya kemudian membaca bahwa memaksakan struktur korelasi simetris compund mengarah ke kesetaraan antara dua pendekatan. Karena itu saya memberlakukannya. Saya tidak tahu apakah ini memakan df lain. Namun hasilnya tidak setuju dengan interpretasi ini.
Henrik
2

aov()cocok dengan model melalui lm()menggunakan kuadrat terkecil, lmecocok melalui kemungkinan maksimum. Perbedaan dalam bagaimana parameter dari model linier diperkirakan kemungkinan bertanggung jawab atas perbedaan (sangat kecil) dalam nilai-f Anda.

Dalam praktiknya, (misalnya untuk pengujian hipotesis) perkiraan ini sama, jadi saya tidak melihat bagaimana seseorang dapat dianggap 'lebih kredibel' daripada yang lain. Mereka datang dari berbagai paradigma pemasangan model.

Untuk kontras, Anda perlu mengatur matriks kontras untuk faktor Anda. Venebles dan Ripley menunjukkan bagaimana melakukan ini pada hal 143, hal.146 dan hal.293-294 dari edisi ke-4.

Chris
sumber
Hmm, tapi mengapa terkadang ada perbedaan dan terkadang hasilnya persis sama? Selain itu, maka tampaknya tidak mungkin untuk menggunakan lmeatau lmeruntuk menghitung ANOVA (secara tegas) karena menggunakan metode yang serupa tetapi tidak identik. Jadi apakah tidak ada cara menghitung kontras untuk ANOVA ukuran berulang di R?
Henrik
Jika sistem pemodelan Anda benar-benar linier daripada kuadrat terkecil dan ML harus memberikan statistik f yang sama. Hanya ketika ada struktur lain dalam data bahwa kedua metode akan memberikan hasil yang berbeda. Pinheiro dan Bates membahas hal ini dalam buku model efek campuran mereka Juga mereka mungkin tidak 'sama persis', jika Anda pergi cukup jauh dalam angka sig saya yakin Anda akan menemukan beberapa perbedaan. Tetapi untuk semua tujuan praktis mereka sama.
Chris