Повторные измерения / в пределах предметов ANOVA в R - PullRequest
13 голосов
/ 17 апреля 2011

Я пытаюсь запустить 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

Есть идеи, что я могу делать не так?

Ответы [ 2 ]

13 голосов
/ 18 апреля 2011

Попробуйте использовать функцию lmer в пакете lme4.Функция AOV, вероятно, здесь не подходит.Ищите ссылки от Дуглса Бейтса, например, 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))

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

9 голосов
/ 08 августа 2014

Я знаю, что ответ был выбран для этого поста. Я все еще хочу указать, как указать правильный термин ошибки / случайный эффект при подборе модели aov или lmer к данным многократного повторного измерения. Я предполагаю, что обе независимые переменные (IV) являются фиксированными и скрещиваются друг с другом и с субъектами, что означает, что все субъекты подвергаются воздействию всех комбинаций IV. Я собираюсь использовать данные, взятые из Экспериментального дизайна Кирка: Процедуры для Поведенческих Наук (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 субъектов подвергались 2 процедурам - типу удара (а) и продолжительности тренировки (б) - по 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 для условия ошибки Within (s_f: a_f: b_f) равно ( n *) * -1 тысяча тридцать-одна) ( рд -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, но также печально известное «Предупреждение: ошибка () модель единственная». м3 делает что-то странное. Далее выполняется разбиение внутри остатков в 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? Если ваши данные сбалансированы, приближение Кенварда-Роджера, используемое в 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 даже не дал результатов, предположительно, количество случайных эффектов, которое нужно было оценить, было больше, чем размер выборки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...