Как выполнить 4 на 4 смешанных ANOVA с контрастами между и внутри субъектами, используя R?

11

Начинающий пользователь R здесь борется с повторными измерениями ANOVA.

У меня есть набор данных, который состоит из одного фактора между субъектами с 4 уровнями (закодированного в единую переменную, называемую «группы»), и одного из фактора субъектов с 4 уровнями (кодированного в четырех отдельных переменных «DV1», «DV2», «DV3» ',' DV4 ').

У меня есть следующие цели:

  1. Запустите повторные измерения ANOVA.
  2. Сравните группы, используя пользовательские контрасты (как в команде LMATRIX в SPSS).
  3. Сравните различные уровни DV, используя пользовательские контрасты (как в команде MMATRIX в SPSS).
  4. Выполните комбинацию 2) и 3) одновременно, поэтому я сравниваю только определенные группы на определенных уровнях фактора внутри субъекта.
  5. Запустите набор контрастов, которые НЕ суммируют до нуля.

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

aquadhere
источник

Ответы:

18

Эскиз одного решения (другое см. Ниже):

  1. Данные должны быть в длинном формате (т. Е. В значении на строку), а не в широком формате, как в SPSS (т. Е. Один субъект на строку), см. Пакет изменения формы, или ?reshape. Это включает в себя то, что должна быть переменная, указывающая идентификатор субъекта (то есть идентификатор субъекта).
  2. Все факторы (включая идентификатор субъекта) должны относиться к классовым факторам ( strдля проверки проверьте их на фрейме данных). Если вы этого не сделаете, ваши результаты будут неверными.
  3. Если вы хотите получить суммы квадратов типа III, установите контрасты по умолчанию для кодирования:
    options(contrasts=c("contr.sum","contr.poly"))
  4. Укажите желаемую модель с lmeпомощью nlmeпакета (установите и загрузите пакет предварительно с помощью install.packages("nlme")и library(nlme)), используя компоновочную симметричную структуру корреляции. Смотрите ответ и особенно мой комментарий к принятому ответу на этот вопрос. В вашем случае это может быть что-то вроде (если бы вы предоставили образцы данных, что настоятельно рекомендуется, вы бы получили правильный код):
    my.anova <- lme(dv ~ group*within, data = your.df, random = ~1|id, correlation = corCompSymm(form = ~1|id))
  5. Используйте обобщенную anovaфункцию для получения таблицы anova (см. ?anova.lme):
    anova(my.anova)
    Чтобы получить суммы квадратов типа III, используйте anovaкоманду с аргументом, typeустановленным в "marginal"(это работает, только если для контрастов задано кодирование эффектов, см. Пункт 3):
    anova(my.anova, type = "marginal")
  6. Приспособленный объект типа lmeтеперь позволяет различным функциям выполнять контрасты. Наиболее гибким решением (но довольно неудобным) является Lаргумент в вызове anova.lme(см. Снова ?anova.lme).
    Другие решения также требуют lmeв качестве аргумента подогнанного объекта:
    также очень гибкая estimableфункция из пакета gmodels . Этот пакет также предлагает fit.contrastsфункцию.
    Пакет multcomp позволяет использовать контрасты с помощью корректировки альфа-ошибки (но вы можете выполнять контрасты только с помощью одного из ваших факторов), используя glhtфункцию. Тем не менее,
    новый и многообещающий подход - это контрастный пакет, который пока не дает всех возможных контрастов.

Альтернативным решением является использование стандартного ANOVA через комбинацию afexи, lsmeansкак указано в afex-vignette .

Хенрик
источник
(+1) Отличный и очень поучительный ответ. Ожидание сообщения в блоге ...
chl
?anova.lmeне работает для меня и methods(anova)перечисляет его как невидимую функцию.
Джон
@ Джон ты загружал nlmeраньше? Если нет, запустите library(nlme), то должно работать. Если это все еще не работает, install.packages("nlme")сначала.
Хенрик
ах ... видимо, я не имел, только lme4
Джон
@ Хенрик, я могу перейти к шагу 5, но я не могу настроить контрасты, сравнивая конкретные факторы между субъектами на конкретных уровнях факторов внутри субъекта. Вся онлайн-документация, которую я видел, имеет отношение к тестированию различий на разных уровнях факторов между субъектами. У вас есть пример кода? Я могу просто подождать сообщения в блоге, если вы собираетесь освещать его там.
августа