Aktualizacja maja 2017 r . : Jak się okazuje, jest wiele tego, co tu napisałem trochę niesłuszne . Niektóre aktualizacje są wprowadzane w całym poście.
Zgadzam się bardzo z tym, co już powiedział Ben Bolker (dziękuję za wiadomość afex::mixed()
), ale pozwólcie, że dodam jeszcze kilka ogólnych i szczegółowych przemyśleń na ten temat.
Skoncentruj się na efektach stałych i losowych oraz na sposobie raportowania wyników
W przypadku rodzaju badań eksperymentalnych, które są reprezentowane w przykładowym zbiorze danych od Jonathana Barona, ważne jest pytanie, czy zmanipulowane czy nie czynnik ma ogólny efekt. Na przykład, czy znajdujemy ogólny główny efekt lub interakcję Task
? Ważną kwestią jest to, że w tych zbiorach danych zwykle wszystkie czynniki są pod pełną kontrolą eksperymentalną i losowo przypisywane. W związku z tym zainteresowanie skupia się zwykle na ustalonych efektach.
Natomiast składowe efektów losowych można postrzegać jako parametry „uciążliwe”, które wychwytują wariancję systemową (tj. Różnice międzyosobnicze w wielkości efektu), które niekoniecznie są istotne dla pytania głównego. Z tego punktu widzenia sugerowana przez Barr i in. następuje nieco naturalnie. Łatwo sobie wyobrazić, że eksperymentalna manipulacja nie dotyczy wszystkich osób w dokładnie taki sam sposób i chcemy to kontrolować. Z drugiej strony liczba czynników lub poziomów zwykle nie jest zbyt duża, więc niebezpieczeństwo nadmiernego dopasowania wydaje się stosunkowo niewielkie.
W związku z tym podążałbym za sugestią Barra i in. i podaj maksymalną strukturę efektów losowych i zgłoś testy stałych efektów jako moje główne wyniki. Aby przetestować ustalone efekty, sugerowałbym również użycie, afex::mixed()
ponieważ raportuje testy efektów lub czynników (zamiast testu parametrów) i oblicza te testy w dość rozsądny sposób (np. Używa tej samej struktury efektów losowych dla wszystkich modeli, w których pojedynczy efekt jest usuwany, używa kontrastów suma do zera, oferuje różne metody obliczania wartości p , ...).
Co z przykładowymi danymi
Problem z podanymi danymi przykładowymi polega na tym, że dla tego zestawu danych maksymalna struktura efektów losowych prowadzi do przesyconego modelu, ponieważ istnieje tylko jeden punkt danych na komórkę projektu:
> with(df, table(Valence, Subject, Task))
, , Task = Cued
Subject
Valence Faye Jason Jim Ron Victor
Neg 1 1 1 1 1
Neu 1 1 1 1 1
Pos 1 1 1 1 1
, , Task = Free
Subject
Valence Faye Jason Jim Ron Victor
Neg 1 1 1 1 1
Neu 1 1 1 1 1
Pos 1 1 1 1 1
W rezultacie lmer
dławiki w strukturze maksymalnych efektów losowych:
> lmer(Recall~Task*Valence + (Valence*Task|Subject), df)
Error: number of observations (=30) <= number of random effects (=30) for term
(Valence * Task | Subject); the random-effects parameters and the residual variance
(or scale parameter) are probably unidentifiable
Niestety, według mojej wiedzy nie ma uzgodnionego sposobu rozwiązania tego problemu. Ale pozwól mi naszkicować i przedyskutować niektóre:
Pierwszym rozwiązaniem może być usunięcie najwyższego losowego nachylenia i przetestowanie efektów dla tego modelu:
require(afex)
mixed(Recall~Task*Valence + (Valence+Task|Subject), df)
Effect F ndf ddf F.scaling p.value
1 Task 6.56 1 4.00 1.00 .06
2 Valence 0.80 2 3.00 0.75 .53
3 Task:Valence 0.42 2 8.00 1.00 .67
Jednak to rozwiązanie jest trochę ad hoc i nie jest nadmiernie motywowane.
Aktualizacja maja 2017 r .: To podejście, które obecnie popieram. Zobacz ten post na blogu i szkic rozdziału, którego jestem współautorem , sekcja „Struktury efektów losowych dla tradycyjnych projektów ANOVA”.
Alternatywnym rozwiązaniem (i takim, które może być popierane przez dyskusję Barr i wsp.) Może być zawsze usunięcie losowych nachyleń w celu uzyskania najmniejszego efektu. Wiąże się to jednak z dwoma problemami: (1) Jakiej struktury efektów losowych używamy, aby dowiedzieć się, jaki jest najmniejszy efekt, i (2) R niechętnie usuwa efekt niższego rzędu, taki jak efekt główny, jeśli efekty wyższego rzędu, takie jak interakcja tego efektu jest obecna (patrz tutaj ). W rezultacie należałoby ręcznie ustawić tę strukturę efektów losowych i przekazać tak skonstruowaną matrycę modelu do wywołania Lmer.
Trzecim rozwiązaniem może być zastosowanie alternatywnej parametryzacji części efektów losowych, a mianowicie takiej, która odpowiada modelowi RM-ANOVA dla tych danych. Niestety (?) lmer
Nie zezwala na „ujemne wariancje”, więc ta parametryzacja nie odpowiada dokładnie RM-ANOVA dla wszystkich zestawów danych , patrz dyskusja tutaj i gdzie indziej (np. Tutaj i tutaj ). „Lmer-ANOVA” dla tych danych to:
> mixed(Recall~Task*Valence + (1|Subject) + (1|Task:Subject) + (1|Valence:Subject), df)
Effect F ndf ddf F.scaling p.value
1 Task 7.35 1 4.00 1.00 .05
2 Valence 1.46 2 8.00 1.00 .29
3 Task:Valence 0.29 2 8.00 1.00 .76
Biorąc pod uwagę wszystkie te problemy, po prostu nie użyłbym lmer
do dopasowania zestawów danych, dla których istnieje tylko jeden punkt danych na komórkę projektu, chyba że dostępne jest bardziej uzgodnione rozwiązanie problemu maksymalnej struktury losowych efektów.
Zamiast tego chciałbym, aby nadal można było użyć klasycznej ANOVA. Użycie jednego z opakowań car::Anova()
w afex
wynikach byłoby:
> aov4(Recall~Task*Valence + (Valence*Task|Subject), df)
Effect df MSE F ges p
1 Valence 1.44, 5.75 4.67 1.46 .02 .29
2 Task 1, 4 4.08 7.35 + .07 .05
3 Valence:Task 1.63, 6.52 2.96 0.29 .003 .71
Zauważ, że afex
teraz pozwala również zwrócić model wyposażony w aov
który można przekazać do lsmeans
testów post hoc (ale do testu efektów zgłoszone przez car::Anova
są jeszcze bardziej rozsądne):
> require(lsmeans)
> m <- aov4(Recall~Task*Valence + (Valence*Task|Subject), df, return = "aov")
> lsmeans(m, ~Task+Valence)
Task Valence lsmean SE df lower.CL upper.CL
Cued Neg 11.8 1.852026 5.52 7.17157 16.42843
Free Neg 10.2 1.852026 5.52 5.57157 14.82843
Cued Neu 13.0 1.852026 5.52 8.37157 17.62843
Free Neu 11.2 1.852026 5.52 6.57157 15.82843
Cued Pos 13.6 1.852026 5.52 8.97157 18.22843
Free Pos 11.0 1.852026 5.52 6.37157 15.62843
Confidence level used: 0.95