Bagaimana menafsirkan kontras khusus ini?


10

Saya melakukan ANOVA satu arah (per spesies) dengan kontras khusus.

     [,1] [,2] [,3] [,4]
0.5    -1    0    0    0
5       1   -1    0    0
12.5    0    1   -1    0
25      0    0    1   -1
50      0    0    0    1

di mana saya membandingkan intensitas 0,5 melawan 5, 5 melawan 12,5 dan seterusnya. Ini adalah data yang saya kerjakan

masukkan deskripsi gambar di sini

dengan hasil sebagai berikut

Generalized least squares fit by REML
  Model: dark ~ intensity 
  Data: skofijski.diurnal[skofijski.diurnal$species == "niphargus", ] 
       AIC      BIC    logLik
  63.41333 67.66163 -25.70667

Coefficients:
            Value Std.Error  t-value p-value
(Intercept) 16.95 0.2140872 79.17334  0.0000
intensity1   2.20 0.4281744  5.13809  0.0001
intensity2   1.40 0.5244044  2.66970  0.0175
intensity3   2.10 0.5244044  4.00454  0.0011
intensity4   1.80 0.4281744  4.20389  0.0008

 Correlation: 
           (Intr) intns1 intns2 intns3
intensity1 0.000                      
intensity2 0.000  0.612               
intensity3 0.000  0.408  0.667        
intensity4 0.000  0.250  0.408  0.612 

Standardized residuals:
       Min         Q1        Med         Q3        Max 
-2.3500484 -0.7833495  0.2611165  0.7833495  1.3055824 

Residual standard error: 0.9574271 
Degrees of freedom: 20 total; 15 residual

16.95 adalah rata-rata global untuk "niphargus". Dalam intensity1, saya membandingkan cara untuk intensitas 0,5 melawan 5.

Jika saya memahami hak ini, koefisien untuk intensitas1 dari 2,2 harus menjadi setengah perbedaan antara rata-rata tingkat intensitas 0,5 dan 5. Namun, perhitungan tangan saya tidak cocok dengan ringkasan. Adakah yang bisa menyalahkan apa yang saya lakukan salah?

ce1 <- skofijski.diurnal$intensity
levels(ce1) <- c("0.5", "5", "0", "0", "0")
ce1 <- as.factor(as.character(ce1))
tapply(skofijski.diurnal$dark, ce1, mean)
       0    0.5      5 
  14.500 11.875 13.000 
diff(tapply(skofijski.diurnal$dark, ce1, mean))/2
      0.5       5 
  -1.3125  0.5625 

Bisakah Anda memberikan fungsi lm () dari R yang Anda gunakan untuk memperkirakan. Bagaimana tepatnya Anda menggunakan fungsi kontras?
Philippe

btw geom_points(position=position_dodge(width=0.75))akan memperbaiki cara poin-poin dalam plot Anda tidak sejajar dengan kotak.
terbang

@ Terbang sejak pertanyaan saya, sudah ada pengantar geom_jitter, yang merupakan jalan pintas untuk semua parameter geom_point () yang jitter.
Roman Luštrik

Saya tidak melihat jitter di sana. apakah geom_jitter(position_dodge)bekerja? Saya telah menggunakan geom_points(position_jitterdodge)untuk menambahkan titik ke boxplots dengan menghindari.
terbang

@ terbang lihat dokumen untuk di geom_jitter sini . Dalam pengalaman saya sejak jawaban saya di atas, saya merasa tidak perlu menggunakan plot box. Pernah. Jika saya memiliki banyak titik, saya menggunakan plot biola yang menunjukkan kerapatan poin dalam detail yang jauh lebih baik daripada plot kotak. Boxplots diciptakan kembali ketika merencanakan banyak titik atau kepadatannya tidak nyaman. Mungkin sudah saatnya kita mulai berpikir untuk menjatuhkan visualisasi (cacat) ini.
Roman Luštrik

Jawaban:


10

Matriks yang Anda tentukan untuk kontras pada prinsipnya benar. Untuk mengubahnya menjadi matriks kontras yang sesuai , Anda perlu menghitung kebalikan umum dari matriks asli Anda.

Jika Mmatriks Anda:

M

#     [,1] [,2] [,3] [,4]
#0.5    -1    0    0    0
#5       1   -1    0    0
#12.5    0    1   -1    0
#25      0    0    1   -1
#50      0    0    0    1 

Sekarang, hitung invers umum menggunakan ginvdan transpos hasilnya menggunakan t:

library(MASS)
t(ginv(M))

#     [,1] [,2] [,3] [,4]
#[1,] -0.8 -0.6 -0.4 -0.2
#[2,]  0.2 -0.6 -0.4 -0.2
#[3,]  0.2  0.4 -0.4 -0.2
#[4,]  0.2  0.4  0.6 -0.2
#[5,]  0.2  0.4  0.6  0.8

Hasilnya identik dengan yang ada di @Greg Snow. Gunakan matriks ini untuk analisis Anda.

Ini adalah cara yang jauh lebih mudah daripada melakukannya secara manual.


Bahkan ada cara yang lebih mudah untuk menghasilkan matriks perbedaan geser (alias kontras berulang ). Ini dapat dilakukan dengan fungsi contr.sdifdan jumlah level faktor sebagai parameter. Jika Anda memiliki lima tingkat faktor, seperti dalam contoh Anda:

library(MASS)
contr.sdif(5)

#   2-1  3-2  4-3  5-4
#1 -0.8 -0.6 -0.4 -0.2
#2  0.2 -0.6 -0.4 -0.2
#3  0.2  0.4 -0.4 -0.2
#4  0.2  0.4  0.6 -0.2
#5  0.2  0.4  0.6  0.8

4

Jika matriks di atas adalah bagaimana Anda menyandikan variabel dummy (apa yang Anda lewati ke Catau contrastfungsi dalam R) maka mereka yang pertama adalah membandingkan tingkat 1 dengan yang lain (sebenarnya 0,8 kali yang pertama dikurangi dari 0,2 kali jumlah yang lain).

Istilah kedua membandingkan level ke-2 ke-3. 3. ke-3 membandingkan ke-3 ke-2 ke-2 dan ke-4 membandingkan ke-4 ke-4 ke yang terakhir.

Jika Anda ingin melakukan perbandingan yang Anda gambarkan (bandingkan setiap pasangan) maka pengkodean variabel dummy yang Anda inginkan adalah:

      [,1] [,2] [,3] [,4]
[1,] -0.8 -0.6 -0.4 -0.2
[2,]  0.2 -0.6 -0.4 -0.2
[3,]  0.2  0.4 -0.4 -0.2
[4,]  0.2  0.4  0.6 -0.2
[5,]  0.2  0.4  0.6  0.8

Apakah penggunaan matriks inver general ini juga diperlukan saat menggunakan, aov()bukan lm()? Saya bertanya, karena saya telah membaca beberapa tutorial, di mana matriks kontras aov()dibuat seperti yang diberikan oleh Roman. Misalnya, lihat Bab 5 di cran.r-project.org/doc/contrib/Vikneswaran-ED_companion.pdf
crsh

2
The aovfungsi panggilan lmfungsi untuk melakukan perhitungan utama, sehingga hal-hal seperti matriks kontras akan memiliki efek yang sama di kedua.
Greg Snow
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.