Как интерпретировать эти пользовательские контрасты?


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, которую вы использовали для оценки. Как именно вы использовали функцию контрастов?
— Филипп

Кстати geom_points(position=position_dodge(width=0.75)), исправим то, как точки на вашем графике не совпадают с прямоугольниками.
— летает

После моего вопроса, @flies, было введение geom_jitter, которое является ярлыком для всех параметров geom_point (), которые дрожат.
— Роман Луштрик

Я не заметил дрожание там. делает geom_jitter(position_dodge)работу? Я использую, geom_points(position_jitterdodge)чтобы добавить точки на боксы с уклонением.
— летает

@flies увидеть документы для geom_jitter здесь . По моему опыту, так как мой ответ выше, я считаю ненужным использовать boxplots. Когда-либо. Если у меня много точек, я использую графики для скрипки, которые показывают плотность точек в более тонких деталях, чем блокпосты. Boxplots были изобретены еще при построении многих точек или их плотности было неудобно. Возможно, пришло время задуматься об отказе от этой (с ограниченными возможностями) визуализации.
— Роман Луштрик

Ответы:


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 раза 1-й уровень вычитается из 0,2-кратного сумма остальных).

Второй член сравнивает первые 2 уровня с последними 3. Третий сравнивает первые 3 уровня с последними2, а четвертый сравнивает первые 4 уровня с последним.

Если вы хотите выполнить сравнение, которое вы описываете (сравнить каждую пару), то вам нужна кодировка фиктивной переменной:

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