Bagaimana melakukan ANOVA 4 dengan 4 campuran dengan kontras antara dan di dalam subyek menggunakan R?


11

Pengguna pemula R di sini berjuang dengan tindakan berulang ANOVA.

Saya memiliki dataset yang terdiri dari satu antara faktor subjek dengan 4 level (dikodekan dalam variabel tunggal yang disebut 'grup'), dan satu dalam faktor subyek dengan 4 level (dikodekan dalam empat variabel terpisah 'DV1', 'DV2', 'DV3 ',' DV4 ').

Saya memiliki tujuan sebagai berikut:

  1. Jalankan langkah-langkah ANOVA yang diulang secara keseluruhan.
  2. Bandingkan grup yang menggunakan kontras khusus (seperti pada perintah LMATRIX di SPSS).
  3. Bandingkan level DV yang berbeda menggunakan kontras khusus (seperti dalam perintah MMATRIX di SPSS).
  4. Lakukan kombinasi 2) dan 3) secara bersamaan sehingga saya hanya membandingkan kelompok-kelompok tertentu pada tingkat tertentu dari faktor dalam-mata pelajaran.
  5. Jalankan serangkaian kontras yang TIDAK menjumlahkan ke nol.

Saya tahu saya bisa melakukan ini di SPSS tanpa banyak masalah, tapi saya tidak bisa mendapatkan ide yang jelas tentang bagaimana melakukan ini di R. Saya telah melihat bagaimana bagian-bagian ini dapat bekerja dalam paket yang berbeda, tetapi saya belum begitu jauh terlihat bagaimana ini bisa bekerja dalam satu prosedur atau serangkaian prosedur terkait di R.

Jawaban:


18

Sketsa satu solusi (untuk solusi lain lihat di bawah):

  1. Data harus dalam format panjang (yaitu, pada nilai per baris) alih-alih dalam format lebar seperti pada SPSS (yaitu, satu subjek per baris), lihat paket membentuk ulang, atau ?reshape. Itu termasuk bahwa perlu ada variabel yang menunjukkan pengidentifikasi subjek (yaitu, id subjek).
  2. Semua faktor (termasuk pengidentifikasi subjek) harus dari faktor kelas (dijalankan strpada bingkai data Anda untuk memeriksanya). Jika Anda tidak melakukan ini, hasil Anda akan salah.
  3. Jika Anda ingin mendapatkan jumlah kuadrat tipe-III, atur kontras default untuk pengkodean efek:
    options(contrasts=c("contr.sum","contr.poly"))
  4. Tentukan model yang diinginkan dengan lmedari nlmepaket (instal dan muat paket sebelum menyerahkan melalui install.packages("nlme")dan library(nlme)) menggunakan struktur korelasi simetris komputer. Lihat jawabannya dan terutama komentar saya untuk jawaban yang diterima untuk pertanyaan ini. Dalam kasus Anda itu bisa jadi seperti (jika Anda akan memberikan data sampel, yang sangat disarankan, Anda akan menerima kode yang benar):
    my.anova <- lme(dv ~ group*within, data = your.df, random = ~1|id, correlation = corCompSymm(form = ~1|id))
  5. Gunakan anovafungsi generik untuk mendapatkan tabel anova (lihat ?anova.lme):
    anova(my.anova)
    Untuk mendapatkan jumlah kuadrat tipe-III gunakan anovaperintah dengan argumen yang typedisetel ke "marginal"(ini hanya berfungsi jika kontras diatur ke efek pengkodean, lihat poin 3):
    anova(my.anova, type = "marginal")
  6. Objek tipe pas lmesekarang memungkinkan beragam fungsi untuk melakukan kontras. Solusi yang paling fleksibel (tetapi yang agak tidak berguna) adalah Largumen dalam panggilan untuk anova.lme(lihat lagi ?anova.lme).
    Solusi lain juga memerlukan lmeobjek yang dipasang sebagai argumen:
    Juga sangat fleksibel adalah estimablefungsi dari paket gmodels . Paket ini juga menawarkan fit.contrastsfungsi.
    The multcomp paket memungkinkan kontras menggunakan penyesuaian alpha-kesalahan (tetapi Anda hanya dapat melakukan kontras menggunakan salah satu faktor Anda), menggunakan glhtfungsi. Namun,
    pendekatan baru dan menjanjikan adalah paket kontras , sejauh ini tampaknya tidak mengesampingkan semua kemungkinan kontras.

Solusi alternatif adalah dengan menggunakan ANOVA standar melalui kombinasi afexdan lsmeanssebagaimana diuraikan dalam- afexsketsa .


(+1) Respons yang bagus dan sangat instruktif. Menunggu posting blog ...
chl

?anova.lmetidak berfungsi untuk saya dan methods(anova)mencantumkannya sebagai fungsi yang tidak terlihat.
John

@ John Apakah Anda memuat nlmesebelumnya? Jika tidak, jalankan library(nlme), maka itu akan berhasil. Jika masih tidak berfungsi, install.packages("nlme")pertama.
Henrik

ah ... Sepertinya saya belum, hanya lme4
John

@ Henrick, saya bisa naik ke langkah 5, tetapi saya tidak dapat mengatur kontras yang membandingkan faktor antar-subjek yang spesifik pada tingkat faktor dalam-subjek tertentu. Semua dokumentasi online yang saya lihat berkaitan dengan menguji perbedaan di berbagai tingkat faktor antar-subjek. Apakah Anda memiliki kode contoh? Saya hanya bisa menunggu posting blog jika Anda akan menutupinya di sana.
aquadhere
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.