Jak wykonać mieszaną ANOVA 4 na 4 z kontrastami pomiędzy i wewnątrz badanych za pomocą R?

11

Początkujący użytkownik R tutaj zmaga się z ANOVA z powtarzanymi pomiarami.

Mam zestaw danych, który składa się z jednego czynnika między podmiotami z 4 poziomami (zakodowanymi w jednej zmiennej zwanej „grupami”) i jednego w obrębie czynników podmiotu z 4 poziomami (zakodowanymi w czterech osobnych zmiennych „DV1”, „DV2”, „DV3 ”,„ DV4 ”).

Mam następujące cele:

  1. Przeprowadź ANOVA z powtarzanymi pomiarami.
  2. Porównaj grupy za pomocą niestandardowych kontrastów (jak w poleceniu LMATRIX w SPSS).
  3. Porównaj różne poziomy DV za pomocą niestandardowych kontrastów (jak w poleceniu MMATRIX w SPSS).
  4. Wykonaj kombinację 2) i 3) jednocześnie, więc porównuję tylko niektóre grupy na określonych poziomach czynnika wewnątrz badanych.
  5. Uruchom zestaw kontrastów, które NIE sumują się do zera.

Wiem, że mogę to zrobić w SPSS bez większego problemu, ale nie mam jasnego pojęcia, jak to zrobić w R. Widziałem, jak to może działać w różnych pakietach, ale tak nie jest daleko widzieliśmy, jak to może działać w ramach jednej procedury lub zestawu powiązanych procedur w R.

aquadhere
źródło

Odpowiedzi:

18

Szkic jednego rozwiązania (inne patrz poniżej):

  1. Dane muszą być w długim formacie (tzn. Według wartości na wiersz) zamiast w formacie szerokim, jak w SPSS (tj. Jeden temat na wiersz), zobacz pakiet przekształceń lub ?reshape. Obejmuje to, że musi istnieć zmienna wskazująca identyfikator podmiotu (tj. Identyfikator podmiotu).
  2. Wszystkie czynniki (w tym identyfikator podmiotu) muszą należeć do klasy (należy je uruchomić strw ramce danych, aby to sprawdzić). Jeśli tego nie zrobisz, Twoje wyniki będą błędne.
  3. Jeśli chcesz uzyskać sumy kwadratów typu III, ustaw domyślne kontrasty do kodowania efektów:
    options(contrasts=c("contr.sum","contr.poly"))
  4. Określić żądany model z lmeod nlmeopakowania (zainstalować i załadować beforehands opakowania poprzez install.packages("nlme")i library(nlme)), stosując compund symetrycznej struktury korelacji. Zobacz odpowiedź, a zwłaszcza mój komentarz do zaakceptowanej odpowiedzi na to pytanie. W twoim przypadku może to być coś podobnego (gdybyś dostarczył przykładowe dane, co jest zdecydowanie zalecane, otrzymasz poprawny kod):
    my.anova <- lme(dv ~ group*within, data = your.df, random = ~1|id, correlation = corCompSymm(form = ~1|id))
  5. Użyj anovafunkcji ogólnej, aby uzyskać tabelę anova (patrz ?anova.lme):
    anova(my.anova)
    Aby uzyskać sumę kwadratów typu III, użyj anovapolecenia z typeustawionym argumentem "marginal"(działa to tylko wtedy, gdy dla kodowania efektów ustawione są kontrasty, patrz punkt 3):
    anova(my.anova, type = "marginal")
  6. Dopasowany obiekt typu lmeumożliwia teraz różnorodne funkcje do wykonywania kontrastów. Najbardziej elastycznym rozwiązaniem (ale raczej niewygodnym) jest Largument w wezwaniu do anova.lme(zobacz ponownie ?anova.lme).
    Inne rozwiązania również wymagają dopasowania lmeobiektu jako argumentu:
    również bardzo elastyczna jest estimablefunkcja z pakietu gmodels . Ten pakiet oferuje również fit.contrastsfunkcję. Multcomp pakiet umożliwia regulację kontrastu z użyciem alfa-błędu (ale można wykonać tylko za pomocą kontrastów jeden z czynników), korzystając z funkcji. Nowym i obiecującym podejściem jest pakiet kontrastowy , jednak jak dotąd nie wydaje się, by zawierał on wszystkie możliwe kontrasty.
    glht

Alternatywnym rozwiązaniem jest użycie standardowej ANOVA poprzez połączenie afexi lsmeanszgodnie z afexopisem w- winiecie .

Henrik
źródło
(+1) Świetna i bardzo pouczająca odpowiedź. Oczekiwanie na wpis na blogu ...
chl
?anova.lmenie działa dla mnie i methods(anova)wyświetla ją jako funkcję niewidoczną.
Jan
@John Czy ładowałeś nlmewcześniej? Jeśli nie, uruchomlibrary(nlme) , to powinno działać. Jeśli nadal nie działa, install.packages("nlme")najpierw.
Henrik
ah ... najwyraźniej nie, tylko lme4
Jan
@ Henrick, mogę przejść do kroku 5, ale nie jestem w stanie skonfigurować kontrastów porównujących określone czynniki między podmiotami na poziomach poszczególnych czynników. Cała dokumentacja online, którą widziałem, dotyczy testowania różnic na różnych poziomach czynników między podmiotami. Czy masz jakiś przykładowy kod? Mogę tylko poczekać na wpis na blogu, jeśli chcesz go tam opisać.
aquadhere