Подтвердить что ты не робот

Повторные измерения/внутри объекта ANOVA в R

Я пытаюсь запустить ANOVA с повторяющимися комментариями, используя R. Я просмотрел различные примеры на разных сайтах, но они никогда не говорят об ошибке, с которой я сталкиваюсь. Я предполагаю, что я неправильно понимаю что-то важное.

ANOVA Я пытаюсь запустить некоторые данные из эксперимента, используя человеческих участников. Он имеет один DV и три IV. Все уровни всех IV-х выполняются на всех участниках, что делает его трехсторонним повторным измерением/внутри-субъектами ANOVA.

Код, который я запускаю в R, выглядит следующим образом:

aov.output = aov(DV~ IV1 * IV2 * IV3 + Error(PARTICIPANT_ID / (IV1 * IV2 * IV3)),
                 data=fulldata)

Когда я запустил это, я получаю следующее предупреждение:

Error() model is singular

Любые идеи, что я могу делать неправильно?

4b9b3361

Ответ 1

Попробуйте использовать функцию lmer в пакете lme4. Функция aov, вероятно, не подходит здесь. Ищите ссылки от Dougles Bates, например. http://lme4.r-forge.r-project.org/book/Ch4.pdf (другие главы тоже велики, но это глава повторных мер, это вступление: http://lme4.r-forge.r-project.org/book/Ch1.pdf). R-код находится в одном и том же месте и для продольных данных, кажется, в наши дни, как правило, считается неправильным, чтобы просто подогнать OLS вместо компонентов модели дисперсии, например, в пакете lme4, или в nlme, который мне кажется в последнее время сильно обогнал lme4. Вы можете отметить ссылку Брайана Рипли, указанную в разделе комментариев выше, просто рекомендует также переключиться на lme.

Кстати, огромное преимущество от прыжка - вы сможете получить оценки уровня каждого эффекта в качестве корректировки среднего значения с типичным синтаксисом:

lmer(DV ~ 1  +IV1*IV2*IV3 +(IV1*IV2*IV3|Subject), dataset))

Обратите внимание, что ваши случайные эффекты будут оцениваться по вектору.

Ответ 2

Я знаю, что ответ был выбран для этого сообщения. Я все же хочу указать, как указать правильный коэффициент ошибки/случайный эффект при подгонке модели aov или lmer к многорежимным данным повторных измерений. Я предполагаю, что обе независимые переменные (IV) фиксированы и пересекаются друг с другом и с субъектами, то есть все предметы подвергаются воздействию всех комбинаций IV. Я собираюсь использовать данные, взятые из экспериментального Deisign Kirks: процедуры для поведенческих наук (2013).

library(lme4)
library(foreign)
library(lmerTest)
library(dplyr)

file_name <- "http://www.ats.ucla.edu/stat/stata/examples/kirk/rbf33.dta" #1
d <- read.dta(file_name) %>%                                              #2
  mutate(a_f = factor(a), b_f = factor(b), s_f = factor(s))               #3

head(d)
    ##   a b s  y a_f b_f s_f
    ## 1 1 1 1 37   1   1   1
    ## 2 1 2 1 43   1   2   1
    ## 3 1 3 1 48   1   3   1
    ## 4 2 1 1 39   2   1   1
    ## 5 2 2 1 35   2   2   1

В этом исследовании 5 испытуемых подвергаются двум методам лечения - типу ритма (a) и продолжительности тренировки (b) - по 3 уровня каждый. Переменной результата является отношение к меньшинству. В # 3 я сделал a, b и s в фактор-переменные a_f, b_f и s_f. Пусть p и q - числа уровней для a_f и b_f (3 каждый), а n - размер выборки (5).

В этом примере степени свободы (dfs) для тестов a_f, b_f и их взаимодействия должны быть p-1 = 2, q-1 = 2 и (p-1) * (q-1) = 4, соответственно. Df для члена ошибки s_f является (n-1) = 4, а df для члена ошибки In (s_f: a_f: b_f) является (n-1) (pq-1) = 32. Поэтому правильная модель должна предоставить вам эти dfs.

Использование aov

Теперь попробуйте использовать различные спецификации модели, используя aov:

aov(y ~ a_f*b_f + Error(s_f), data=d) %>% summary()         # m1

aov(y ~ a_f*b_f + Error(s_f/a_f:b_f), data=d) %>% summary() # m2

aov(y ~ a_f*b_f + Error(s_f/a_f*b_f), data=d) %>% summary() # m3

Просто указывая ошибку как Error(s_f) в m1, вы получите правильные значения dfs и F, соответствующие значениям в книге. m2 также дает то же значение, что и m1, но также печально известная модель "Предупреждение: ошибка()". m3 делает что-то странное. Он далее разбивает внутри остатков в m1 (634.9) на остатки для трех членов ошибки: s_f: a_f (174.2), s_f: b_f (173.6) и s_f: a_f: b_f (287.1). Это неверно, так как мы не получили три условия ошибки, когда мы запускаем двухстороннюю связь между объектами ANOVA! Множественные термины ошибок также противоречат точке использования блок-факториалов, что позволяет использовать тот же самый коэффициент ошибок для теста A, B и AB, в отличие от схем с раздельными графиками, для которых требуется 2 условия ошибки.

Использование lmer

Как мы можем получить те же самые dfs и F-значения, используя lmer? Если ваши данные сбалансированы, приближение Kenward-Roger, используемое в lmerTest, даст вам точные dfs и F-ratio.

lmer(y ~ a_f*b_f + (1|s_f), data=d) %>% anova()         # mem1

lmer(y ~ a_f*b_f + (1|s_f/a_f:b_f), data=d) %>% anova() # mem2

lmer(y ~ a_f*b_f + (1|s_f/a_f*b_f), data=d) %>% anova() # mem3

lmer(y ~ a_f*b_f + (1|s_f:a_f:b_f), data=d) %>% anova() # mem4

lmer(y ~ a_f*b_f + (a_f*b_f|s_f), data=d) %>% anova()   # mem5

Снова просто указывая случайный эффект как (1|s_f), вы получите правильные dfs и F-отношения (mem1). mem2-5 даже не дал результатов, по-видимому, количество случайных эффектов, которые ему нужно было оценить, было больше, чем размер выборки.