Bagaimana menentukan matriks kontras (dalam R) untuk perbedaan antara satu level dan rata-rata yang lain?

9

Saya memiliki model regresi yang terlihat seperti ini:

Y=β0+β1X1+β2X2+β3X3+β12X1X2+β13X1X3+β123X1X2X3

... atau dalam notasi R: y ~ x1 + x2 + x3 + x1:x2 + x1:x3 + x1:x2:x3

Katakanlah dan adalah variabel kategori dan adalah numerik. Masalahnya adalah bahwa memiliki tiga tingkat dan bukannya kontras standar, saya perlu menguji:X 2 X 3 X 1 X 1 a , X 1 b , X 1 cX1X2X3X1X1a,X1b,X1c

  • Apakah intersep untuk level berbeda secara signifikan dari intersep rata-rata untuk level dan . X 1 b X 1 cX1aX1bX1c
  • Apakah respons berbeda secara signifikan antara level dan rata-rata level dan .X 1 a X 1 b X 1 cX2X1aX1bX1c
  • Apakah kemiringan berbeda secara signifikan antara level dan rata-rata level dan .X 1 a X 1 b X 1 cX3X1aX1bX1c

Berdasarkan posting ini sepertinya matriks yang saya inginkan adalah ...

 2
-1
-1

Jadi saya lakukan contrasts(mydata$x1)<-t(ginv(cbind(2,-1,-1))). Perkiraan berubah, tetapi begitu juga yang lain. Saya dapat mereproduksi estimasi baru dengan mengurangi nilai prediksi dari kelompok dan berarti (ketika dan berada pada tingkat referensi) dari dua kali nilai pada level tersebut. Tapi saya tidak bisa percaya bahwa saya menentukan matriks kontras saya dengan benar kecuali saya juga bisa mendapatkan koefisien yang sama. b e t a 1 X 1 b X 1 c X 3 = 0 X 2 X 1 aβ1beta1X1bX1cX3=0X2X1a

Adakah yang punya saran tentang bagaimana membungkus kepala saya di sekitar hubungan antara sarana sel dan kontras? Terima kasih. Apakah ada nama standar untuk jenis kontras ini?


Aha! Menurut tautan yang diposkan dalam jawaban Glen_b , intinya adalah, Anda dapat mengonversi APAPUN perbandingan grup berarti Anda ingin menjadi atribut kontras gaya-R sebagai berikut:

  1. Buat matriks persegi. Baris mewakili tingkat faktor Anda dan kolom mewakili kontras. Kecuali yang pertama, yang memberi tahu model apa yang harus diwakili oleh intersep.
  2. Jika Anda ingin intersep Anda menjadi grand mean, isi kolom pertama dengan semua nilai non-nol yang sama, tidak peduli apa. Jika Anda ingin intersep menjadi salah satu cara level, masukkan angka di baris itu dan isi sisanya dengan nol. Jika Anda ingin intersep menjadi rata-rata dari beberapa level, masukkan angka pada baris dan nol tersebut di sisanya. Jika Anda ingin menjadi rata-rata tertimbang, gunakan angka yang berbeda, jika tidak gunakan nomor yang sama. Anda bahkan dapat memasukkan nilai negatif di kolom intersepsi dan itu mungkin berarti sesuatu juga, tapi itu benar-benar mengubah kontras lainnya, jadi saya tidak tahu untuk apa itu
  3. Isi sisa kolom dengan nilai positif dan negatif yang menunjukkan level apa yang Anda inginkan dibandingkan dengan yang lain. Saya lupa mengapa menjumlahkan ke nol adalah penting, tetapi sesuaikan nilainya sehingga kolom yang melakukan penjumlahan menjadi nol.
  4. Ubah posisi matriks menggunakan t()fungsi.
  5. Gunakan ginv()dari MASSpaket atau solve()untuk mendapatkan kebalikan dari matriks transpos.
  6. Jatuhkan kolom pertama, mis mycontrast<-mycontrast[,-1]. Anda sekarang memiliki matriks apx p-1, tetapi informasi yang Anda masukkan untuk intersep Anda dikodekan dalam matriks secara keseluruhan selama langkah 5.
  7. Jika Anda ingin label dalam output ringkasan lebih menyenangkan untuk dibaca daripada lm()output default et al., Beri nama kolom matriks Anda sesuai. Namun intersep akan selalu secara otomatis dinamai (Intercept).
  8. Jadikan matriks Anda kontras baru untuk faktor yang dimaksud, misalnya contrasts(mydata$myfactor)<-mymatrix
  9. Run lm()(dan mungkin banyak fungsi lainnya yang menggunakan formula) seperti biasa dalam standar R tanpa harus beban glht, doByatau contrasts.

Glen_b, terima kasih, dan terima kasih Kelompok Konsultasi Statistik UCLA. Statistik terapan saya, prof, menghabiskan beberapa hari untuk membahas topik ini, dan saya masih tidak tahu bagaimana cara menulis matriks kontras saya sendiri. Dan sekarang, satu jam membaca dan bermain dengan R, dan saya akhirnya berpikir saya mendapatkannya. Kurasa aku seharusnya mendaftar ke UCLA saja. Atau Universitas StackExchange.

f1r3br4nd
sumber

Jawaban:

5

Itu perbandingan satu dengan rata-rata semua variabel kemudian adalah (selain dari skala), yang disebut pengkodean Helmert atau kontras Helmert . Yang Anda berikan adalah kontras pertama, yang lain akan menjadi versi skala dari .(0,1,1)

Apa yang disebut R coding helmert, ini disebut 'reverse Helmert'. Mereka setara hingga perubahan urutan variabel.

Glen_b -Reinstate Monica
sumber
Haruskah ekivalen "hingga perubahan urutan variabel" harus "diberikan pembalikan urutan tingkat"? Jadi untuk mendapatkan jenis helmert SAS / SPSS (dibandingkan dengan rata-rata level yang tersisa), kita harus membalik urutan level faktor yang bersangkutan, atau rev ​​() setiap kolom lalu rev ​​() setiap baris matriks dikembalikan oleh contra.helmert?
tim
@ Tim "perubahan tatanan variabel" tidak dimaksudkan untuk berarti " setiap perubahan urutan variabel", tapi secara harfiah a perubahan urutan variabel (yaitu, satu pada khususnya).
Glen_b -Reinstate Monica