Як виконати 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 без особливих проблем, але я не можу отримати чітке уявлення про те, як це зробити в Р. Я бачив, як частини цього можуть працювати в різних пакетах, але я не так далеко не бачив, як це могло б працювати в рамках однієї процедури або набору суміжних процедур у Р.

Відповіді:


18

Ескіз одного рішення (про інше див. Нижче):

  1. Дані повинні бути у довгому форматі (тобто за значенням на рядок), а не в широкому форматі, як у SPSS (тобто, одна тема на рядок), див. Пакет перестановки або ?reshape. Це включає, що повинна бути змінна, що вказує ідентифікатор теми (тобто ідентифікатор теми).
  2. Усі фактори (включаючи ідентифікатор теми) повинні бути класовими факторами (запустіть strу вашому кадрі даних, щоб перевірити це). Якщо цього не зробити, результати будуть помилковими.
  3. Якщо ви хочете отримати суми квадратів типу III, встановіть контрасти за замовчуванням для ефекту кодування:
    options(contrasts=c("contr.sum","contr.poly"))
  4. Вказати потрібну модель з lmeз nlmeпакета (встановити і завантажити beforehands пакета через install.packages("nlme")і library(nlme)) з використанням compund симетричною кореляційної структури. Дивіться відповідь і особливо мій коментар до прийнятої відповіді на це питання. У вашому випадку це може бути щось на зразок (якби ви надали зразкові дані, що настійно рекомендується, ви отримали б правильний код):
    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функцію.
    Пакет мультикомплектів дозволяє контрасти, використовуючи налаштування альфа-помилок (але ви можете виконувати контрасти лише за допомогою одного з ваших факторів), використовуючи glhtфункцію.
    Новий і багатообіцяючий підхід - це контрастний пакет, однак поки що він, схоже, не сприймає всіх можливих контрастів.

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


(+1) Чудова та дуже повчальна відповідь. Очікуємо публікації в блозі ...
chl

?anova.lmeне працює для мене і methods(anova)перераховує його як невидиму функцію.
Іван,

@John Ви завантажували nlmeраніше? Якщо ні, бігайте library(nlme), то це має спрацювати. Якщо він все ще не працює, install.packages("nlme")спочатку.
Генрік

ах ... Я, мабуть, не був, лише lme4
Іван,

@ Генрік, я можу перейти до 5-го кроку, але я не в змозі встановити контрасти, порівнюючи конкретні фактори між суб'єктами на конкретних рівнях фактору. Вся онлайн-документація, яку я бачив, стосується тестування відмінностей на різних рівнях факторів між суб'єктами. У вас є приклад коду? Я можу просто чекати публікації в блозі, якщо ви збираєтесь висвітлювати її там.
aquadhere
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.