Как выполнить трехсторонний (бинарные факторы) межсубъектный дисперсионный анализ с основными эффектами и всеми взаимодействиями в R

Участники исследования были рандомизированы по Источнику (Эксперт против Привлекательности) и по Аргументу (Сильный против Слабости) и были разделены на категории по типу Монитора (Высокий или Низкий). Я хочу проверить значимость основных эффектов, двусторонних взаимодействий и трехсторонних взаимодействий следующего фрейма данных, в частности,

Основные эффекты = Самоконтроль (Высокий или Низкий), Аргумент (Сильный или Слабый), Источник (Привлекательный или Экспертный).

Двустороннее взаимодействие = СамоконтрольАргумент, СамоконтрольИсточник, Аргумент*Источник

Трехстороннее взаимодействие = СамоконтрольАргументИсточник

Это код:

data<-data.frame(Monitor=c(rep("High.Self.Monitors", 24),rep("Low.Self.Monitors", 24)),
                 Argument=c(rep("Strong", 24), rep("Weak", 24), rep("Strong", 24), rep("Weak", 24)),
                 Source=c(rep("Expert",12),rep("Attractive",12),rep("Expert",12),rep("Attractive",12),
                          rep("Expert",12),rep("Attractive",12),rep("Expert",12),rep("Attractive",12)),
                 Response=c(4,3,4,5,2,5,4,6,3,4,5,4,4,4,2,3,5,3,2,3,4,3,2,4,3,5,3,2,6,4,4,3,5,3,2,3,5,5,7,5,6,4,3,5,6,7,7,6,
                            3,5,5,4,3,2,1,5,3,4,3,4,5,4,3,2,4,6,2,4,4,3,4,3,5,6,4,7,6,7,5,6,4,6,7,5,6,4,4,2,4,5,4,3,4,2,3,4))
data$Monitor<-as.factor(data$Monitor)
data$Argument<-as.factor(data$Argument)
data$Source<-as.factor(data$Source)

Я хотел бы получить основные эффекты, а также все двусторонние взаимодействия и трехстороннее взаимодействие. Однако, если я наберу anova(lm(Response ~ Monitor*Argument*Source, data=data)), я получу:

Analysis of Variance Table

Response: Response
               Df  Sum Sq Mean Sq F value    Pr(>F)    
Monitor         1  24.000 24.0000 13.5322 0.0003947 ***
Source          1   0.667  0.6667  0.3759 0.5413218    
Monitor:Source  1   0.667  0.6667  0.3759 0.5413218    
Residuals      92 163.167  1.7736                      
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

и если я введу summary(aov(Response ~ Monitor*Argument*Source, data=data))

Call:
lm.default(formula = Response ~ Monitor * Argument * Source, 
    data = data)

Residuals:
    Min      1Q  Median      3Q     Max 
-2.7917 -0.7917  0.2083  1.2083  2.5417 

Coefficients: (4 not defined because of singularities)
                                                   Estimate Std. Error t value Pr(>|t|)    
(Intercept)                                          3.4583     0.2718  12.722  < 2e-16 ***
MonitorLow.Self.Monitors                             1.1667     0.3844   3.035  0.00313 ** 
ArgumentWeak                                             NA         NA      NA       NA    
SourceExpert                                         0.3333     0.3844   0.867  0.38817    
MonitorLow.Self.Monitors:ArgumentWeak                    NA         NA      NA       NA    
MonitorLow.Self.Monitors:SourceExpert               -0.3333     0.5437  -0.613  0.54132    
ArgumentWeak:SourceExpert                                NA         NA      NA       NA    
MonitorLow.Self.Monitors:ArgumentWeak:SourceExpert       NA         NA      NA       NA    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.332 on 92 degrees of freedom
Multiple R-squared:  0.1344,    Adjusted R-squared:  0.1062 
F-statistic: 4.761 on 3 and 92 DF,  p-value: 0.00394

Любые мысли или идеи?

Изменить Изображение данных


person Community    schedule 09.11.2015    source источник
comment
Похоже, с summary(aov(Response ~ Monitor*Argument*Source, data=data)) вы получили именно то, что хотели. Я предполагаю, что NA связаны с недостатком степеней свободы для оценки желаемых эффектов. Если вы укажете еще несколько (сколько субъектов в каждом условии) или приведете воспроизводимый пример, это поможет.   -  person Giora Simchoni    schedule 09.11.2015
comment
@GioraSimchoni Код для набора данных есть.   -  person    schedule 09.11.2015


Ответы (1)


Ваши данные плохо рандомизированы, как вы говорите. Для того чтобы оценить трехстороннее взаимодействие, вам потребуется группа испытуемых, имеющих сочетание уровней трех факторов «Низкий», «Сильный» и «Эксперт». У вас нет такой группы.

Смотреть на:

table(data[,1:3])

Например.

person Giora Simchoni    schedule 09.11.2015
comment
Извините, Гиора, но это вопрос в учебнике «Планирование экспериментов и анализ данных» (стр. 397). знак равно - person ; 09.11.2015
comment
У вопроса есть проблема... Высокий Самоконтроль всегда приходит с сильными аргументами - поэтому нет достаточных вариаций. Однако вы можете изменить это, если это фиктивный набор данных: rep(level1, 24), затем rep(level2, 12), затем rep(level3, 6) для каждого из уровней. - person Giora Simchoni; 09.11.2015