Як інтерпретувати ці власні контрасти?


10

Я роблю однобічний ANOVA (для кожного виду) із спеціальними контрастами.

     [,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

де я порівнюю інтенсивність 0,5 проти 5, 5 проти 12,5 тощо. Це дані, над якими я працюю

введіть тут опис зображення

з наступними результатами

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 - це загальне середнє значення для "ніфаргу". По інтенсивності1 я порівнюю засоби для інтенсивності 0,5 проти 5.

Якби я зрозумів це право, коефіцієнт інтенсивності1 у 2,2 повинен бути половиною різниці між засобами рівня інтенсивності 0,5 та 5. Однак мої ручні обчислення не відповідають тим, які наведені в підсумках. Чи може хтось чіп у тому, що я роблю неправильно?

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 

Чи можете ви надати функцію lm () з R, яку ви використовували для оцінки. Як саме ви використовували функцію контрастів?
Філіпп

btw geom_points(position=position_dodge(width=0.75))виправить так, як точки вашого сюжету не вирівнюються з полями.
летить

@flies з мого питання, там було введено geom_jitter, що є ярликом для всіх параметрів geom_point (), які тремтять.
Роман Луштрик

Я там не помітив тремтіння. робить geom_jitter(position_dodge)роботу? Я використовував, geom_points(position_jitterdodge)щоб додати крапки до боксерів з ухиленням.
летить

@flies побачити документи для geom_jitter тут . З мого досвіду з моєї вищевикладеної відповіді, я вважаю непотрібним використовувати боксерські машини. Колись. Якщо у мене багато очок, я використовую сюжетні скрипки, які показують щільність точок набагато тоншими деталями, ніж боксерські. Боксерські машини були винайдені ще тоді, коли намічали багато точок або їх щільність була не зручною. Можливо, саме час ми починаємо думати про відмову від цієї (інвалідної) візуалізації.
Роман Луштрик

Відповіді:


10

Матриця, яку ви вказали для контрастів, в принципі правильна. Щоб перетворити його у відповідну контрастну матрицю , потрібно обчислити узагальнену інверсію початкової матриці.

Якщо Mваша матриця:

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 

Тепер обчисліть узагальнену інверсію за допомогою ginvта перенесіть результат, використовуючи 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

Результат ідентичний результату @Greg Snow. Використовуйте цю матрицю для свого аналізу.

Це набагато простіший спосіб, ніж це робити вручну.


Існує ще простіший спосіб генерувати матрицю ковзних відмінностей (також повторних контрастів ). Це можна зробити за допомогою функції contr.sdifта кількості рівнів факторів як параметра. Якщо у вас є п'ять рівнів фактора, як у вашому прикладі:

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

Якщо матриця вгорі - це те, як ви кодуєте фіктивні змінні (те, що ви передаєте на Cабо contrastфункцію в R), то вони перший порівнюють 1-й рівень з іншими (насправді в 0,8 рази перший віднімається в 0,2 рази від сума інших).

Другий член порівнює 1-й рівень з останнім 3. Третій порівнює 1-й рівень з останнім2, а 4-й рівень порівнює 1-й рівень з останнім.

Якщо ви хочете зробити порівняння, які ви описуєте (порівняйте кожну пару), то кодування фіксованої змінної, яке ви хочете, це:

      [,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

Чи потрібне також використання цієї узагальненої матриці інверезу при використанні aov()замість lm()? Я запитую, бо я прочитав кілька навчальних посібників, в яких контрастні матриці для aov()побудовані так само, як та, яку дав Роман. Наприклад, див. Розділ 5 в cran.r-project.org/doc/contrib/Vikneswaran-ED_companion.pdf
crsh

2
aovФункція викликає lmфункцію , щоб зробити основні обчислення, так як речі , контрастними матриці будуть мати той же ефект в обох.
Грег Сноу
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.