Harap berikan kode R yang memungkinkan seseorang untuk melakukan ANOVA antar-subyek dengan -3, -1, 1, 3 kontras. Saya mengerti ada perdebatan mengenai tipe Sum of Squares (SS) yang sesuai untuk analisis semacam itu. Namun, sebagai tipe standar SS yang digunakan dalam SAS dan SPSS (Tipe III) dianggap standar di daerah saya. Jadi saya ingin hasil analisis ini untuk mencocokkan dengan sempurna apa yang dihasilkan oleh program statistik tersebut. Agar diterima suatu jawaban harus langsung memanggil aov (), tetapi jawaban lain dapat dipilih (khususnya jika mudah dimengerti / digunakan).
sample.data <- data.frame(IV=rep(1:4,each=20),DV=rep(c(-3,-3,1,3),each=20)+rnorm(80))
Sunting: Harap dicatat, kontras yang saya minta bukanlah kontras linear atau polinomial yang sederhana tetapi merupakan kontras yang diturunkan oleh prediksi teoretis, yaitu jenis kontras yang dibahas oleh Rosenthal dan Rosnow.
sumber
Jawaban:
Jumlah kuadrat tipe III untuk ANOVA sudah tersedia melalui
Anova()
fungsi dari paket mobil .Pengkodean kontras dapat dilakukan dengan beberapa cara, menggunakan
C()
,contr.*
keluarga (seperti yang ditunjukkan oleh @nico), atau langsungcontrasts()
fungsi / argumen. Ini dirinci dalam §6.2 (hal. 144-151) dari Statistik Terapan Modern dengan S (Springer, 2002, edisi ke-4). Perhatikan bahwaaov()
ini hanyalah fungsi pembungkus untuklm()
fungsi tersebut. Sangat menarik ketika seseorang ingin mengontrol jangka waktu kesalahan model (seperti dalam desain dalam-subjek), tetapi jika tidak, keduanya menghasilkan hasil yang sama (dan apa pun cara Anda cocok dengan model Anda, Anda masih dapat menampilkan ANOVA atau LM- seperti ringkasan dengansummary.aov
atausummary.lm
).Saya tidak punya SPSS untuk membandingkan dua output, tetapi sesuatu seperti
layak untuk dicoba pada contoh pertama.
Tentang pengkodean faktor dalam R vs SAS: R menganggap tingkat dasar atau referensi sebagai tingkat pertama dalam urutan leksikografis, sedangkan SAS mempertimbangkan yang terakhir. Jadi, untuk mendapatkan hasil yang sebanding, Anda harus menggunakan
contr.SAS()
atau untukrelevel()
faktor R Anda.sumber
Anova(lm(DV ~ C(IV, c(-3,-1,1,3),1), data=sample.data), type="III")
harus lebih baik. Tolong beri tahu saya jika Anda setuju.Ini mungkin terlihat seperti sedikit promosi diri (dan saya kira begitu). Tapi saya mengembangkan paket lsmeans untuk R (tersedia di CRAN) yang dirancang untuk menangani situasi seperti ini. Inilah cara kerjanya sebagai contoh:
Anda dapat menentukan kontras tambahan dalam daftar jika Anda mau. Untuk contoh ini, Anda akan mendapatkan hasil yang sama dengan kontras polinomial linier bawaan:
Untuk mengonfirmasi ini, perhatikan bahwa
"poly"
spesifikasi mengarahkannya untuk meneleponpoly.lsmc
, yang menghasilkan hasil ini:Jika Anda ingin melakukan uji gabungan dari beberapa kontras, gunakan
test
fungsi denganjoint = TRUE
. Sebagai contoh,Ini akan menghasilkan tes "tipe III". Tidak seperti
car::Anova()
itu, ia akan melakukannya dengan benar terlepas dari pengkodean kontras yang digunakan pada tahap pemasangan model. Ini karena fungsi linier yang diuji ditentukan secara langsung daripada secara implisit melalui reduksi model. Fitur tambahan adalah bahwa kasus di mana kontras yang diuji secara linear tergantung terdeteksi, dan statistik uji yang benar dan derajat kebebasan dihasilkan.sumber
Anda mungkin ingin melihat posting blog ini:
Memperoleh ANOVA yang sama menghasilkan R seperti pada SPSS - kesulitan dengan jumlah kuadrat Tipe II dan Tipe III
( Spoiler: tambahkan
options(contrasts=c("contr.sum", "contr.poly"))
di awal skrip Anda)sumber
Ketika Anda melakukan kontras, Anda melakukan kombinasi linier sel tertentu yang dinyatakan dalam konteks istilah kesalahan yang sesuai. Dengan demikian, konsep "Tipe SS" tidak bermakna dengan kontras. Setiap kontras pada dasarnya adalah efek pertama menggunakan Tipe I SS. "Jenis SS" berkaitan dengan apa yang sebagian atau dicatat oleh ketentuan lainnya. Sebagai kontras, tidak ada yang sebagian atau dicatat. Kontrasnya berdiri sendiri.
sumber
Fakta bahwa tes tipe III digunakan di tempat kerja Anda adalah alasan terlemah untuk tetap menggunakannya. SAS telah melakukan kerusakan besar pada statistik dalam hal ini. Tafsir Bill Venables, yang dirujuk di atas, adalah sumber yang bagus untuk ini. Katakan saja tidak untuk tipe III; ini didasarkan pada gagasan keseimbangan yang salah dan memiliki daya yang lebih rendah karena pembobotan sel yang konyol dalam kasus yang tidak seimbang.
Cara yang lebih alami dan tidak rentan kesalahan untuk mendapatkan kontras umum, dan untuk dapat menggambarkan apa yang Anda lakukan, disediakan oleh fungsi
rms
paket R.contrast.rms
Kontras bisa sangat kompleks tetapi bagi pengguna sangat sederhana karena mereka dinyatakan dalam perbedaan nilai prediktif. Tes dan kontras simultan didukung. Ini menangani efek regresi nonlinier, efek interaksi nonlinier, kontras parsial, semua jenis hal.sumber
Coba perintah Anova di perpustakaan mobil. Gunakan argumen type = "III", karena defaultnya adalah tipe II. Sebagai contoh:
sumber
Juga mempromosikan diri sendiri, saya menulis sebuah fungsi untuk ini: https://github.com/samuelfranssens/type3anova
Instal sebagai berikut:
Anda juga perlu
car
menginstal paket.sumber