2015-09-11 6 views
3

В контексте двухстороннего ANOVA я хотел бы вводить уровни контрастности для одного фактора (10, 20, 30 градусов) в пределах уровней другого фактора (SpeciesA, SpeciesB). Это предполагает, что эффект взаимодействия значителен, поэтому контрасты не могут быть просто сделаны на основном температурном эффекте.R: Специальные контрасты внутри эффекта взаимодействия

Я попытался сделать это внутри EZanova, multcomp и phia, но не смог разобраться в синтаксисе, который работает. Я пропустил пакет, который позволяет это?

Контраст и коэффициенты

Contrast1: ли 10 градусов отличаться от 20 и 30 для видов A? Породы: Temp (2, -1, -1,0,0,0) Contrast2: Разница в 10 градусах от 20 до 30 для видов B? Виды: Темп (0,0,0,2, -1, -1) Контраст3: Имеет ли 10 градусов для видов A отличные от 20 и 30 градусов для видов B? Вид: Темп (2,0,0,0, -1, -1)

species<-rep(c("speciesA","speciesB"),each=12) 
temp<-rep(rep(c("10","20","30"),each=4),2) 
y<-rnorm(24,5,3) 
(result<-anova(lm(y~species*temp))) 
+0

Проверьте 'контрасты' в пакете' stats'. Существуют различные функции, которые можно использовать для создания контрастной матрицы (например, 'контрасты',' contr.treatment', 'contr.poly',' contr.helmert' и т. Д.) –

+0

Я пробовал: 'anova (lm (y ~ species * temp + C (temp, contr = matrix (c (2, -1, -1,0,0,0,0,0,0,2, -1, -1,2,0,0, 0, -1, -1), nrow = 3, ncol = 6, byrow = T), how.many = 6) + C (вид, contr = matrix (c (2, -1, -1,0) , 0,0,0,0,0,2, -1, -1,2,0,0,0, -1, -1), nrow = 2, ncol = 6, byrow = T), как. many = 6))) ', но выход был тем же, что и без добавления контрастных матриц с' C() '. –

ответ

1

Это часть базовой-R. См. Страницу ?contrasts. Я проиллюстрирую первый запрошенный контраст; два других должны быть очень простыми. Я предполагаю, что вы хотите, чтобы эти контрастные значения p вычислялись отдельно, поэтому я использую аргумент how.many, чтобы ограничить конструкцию контрастности одним сравнением. В противном случае вы бы получили 5 контрастов, так как по умолчанию функции contrasts пытается построить охватывающее множество ортогональных контрастов:

set.seed(123) 
species <- rep(c("speciesA","speciesB"),each=12) 
temp <- rep(rep(c("10","20","30"),each=4),2) 
y<-rnorm(24,5,3) 

intvar <- interaction(species, temp) # create an interaction variable 
?contrasts 

нужно знать, какие уровни, которые правильно заказать значение контрастности:

> levels(intvar) 
[1] "speciesA.10" "speciesB.10" "speciesA.20" "speciesB.20" "speciesA.30" 
[6] "speciesB.30" 

Так это должно создать контраст по сравнению с 10 20 или 30 углов между видами A:

contrasts(intvar, how.many=1) <- c(2,0,-1,0,-1,0) 
anova(lm(y~intvar)) 
#------------ 
Analysis of Variance Table 

Response: y 
      Df Sum Sq Mean Sq F value Pr(>F) 
intvar  1 0.013 0.0129 0.0015 0.9695 
Residuals 22 190.306 8.6503  

Вы, кажется, на довольно ранней стадии learni ng R, поэтому я бы посоветовал вам научиться строить dataframes для передачи data= -arguments для функций регрессии, вместо того, чтобы работать с «свободными» объектами в вашем рабочем пространстве и, пожалуйста, не забирайте неприятную привычку использовать attach.

+0

Спасибо за отзыв/полезную информацию. Код, который вы предоставили, дает четкий путь к контрастам по полному набору средств взаимодействия. В идеале я хотел бы сделать этот контраст в двухстороннем ANOVA, что означает, что знаменатель для коэффициента контраста F является MSResidual из полного ANOVA (т. Е. С остатками от полной модели и 18 df). Я могу сделать это вручную, используя двухсторонний вывод ANOVA в сочетании с вашим кодом. По-видимому, еще нет простого способа сделать это в R без каких-либо ручных вычислений. –

+0

Всего было 21 df, поэтому «полная модель» с 5 контрастами имела бы 21-5 = 16 df в остатках.Если бы у вас было только 3 контраста в «полной модели» (которая не кажется полной в каком-либо смысле, что я понимаю), то число 18 будет иметь смысл в отношении df в остатках. Никаких ручных расчетов не требуется ... просто четкая спецификация желаемого. Это звучит как домашняя проблема, поэтому я оставил ее с частями для «читателя», чтобы заполнить. Мне никогда не нравилось заполнять чужой домашнее задание для них (и не получало никакого кредита). –