Ich habe mit der aov()
Funktion eine ANOVA mit wiederholten Messungen innerhalb der Probanden durchgeführt . Meine abhängige Variable ist nicht normal verteilt, daher bin ich sehr daran interessiert, Annahme-Tests für meine Analyse durchzuführen. Es scheint, dass das bloße Aufrufen plot()
der Ausgabe bei wiederholten Messungen nicht funktioniert. Daher habe ich die Residuen und die angepassten Werte für ein interessierendes Modell manuell genommen und gegeneinander aufgetragen. Ich gehe davon aus, dass ich auf diese Weise planen würde, die Annahme der Homoskedastizität zu testen.
Das Diagramm enthält 2 vertikale Bänder (siehe Abbildung unten). Es stellt sich heraus, dass die angepassten Werte alle um 2 Werte zentriert sind (obwohl ==
sie nicht genau gleich sind), wobei einer der negative des anderen ist.
Ich habe 2 Fragen:
1) Ist dies der richtige Weg, um die Annahme der Homoskedastizität manuell zu testen? Wenn nicht, wie würde ich bei Designs mit wiederholten Messungen vorgehen (da nur das Aufrufen plot()
nicht funktioniert)?
2) Wenn es richtig ist, was sagt mir diese Handlung? Warum sind die angepassten Werte so gruppiert? Was kann ich daraus schließen?
Vielen Dank für jede Eingabe hier. Wenn Sie bessere Möglichkeiten kennen, um Annahmen in rm-ANOVAs zu überprüfen (vorzugsweise zu zeichnen), wären dies ebenfalls nützliche Informationen.
Ich habe hier einige Scheindaten eingefügt, um das Szenario zu replizieren:
#Create mock data (there's probably a more efficient way to do this.. would also be nice to know! :) )
p <- sort(rep(1:20,8))
y <- rep(rep(1:2,4),20)
z <- rep(rep(c(1,1,2,2),2),20)
w <- rep(c(1,1,1,1,2,2,2,2),20)
x <- rnorm(160,10,2)
d <- data.frame(x,p=factor(p),y=factor(y),z=factor(z),w=factor(w))
#Run repeated-measures ANOVA
ex.aov <- aov(x ~ y*z*w + Error(p/(y*z*w)), d)
#Try to plot full object (doesn't work)
plot(ex.aov)
#Try to plot section of object (doesn't work)
plot(ex.aov[["p:y:z"]])
#Plot residuals against fitted (custom "skedasticity" plot - works)
plot(residuals(ex.aov[["p:y:z"]])~fitted(ex.aov[["p:y:z"]]))
Beginnen Sie mit der Bearbeitung
In Anbetracht der von @Stefan bereitgestellten Informationen habe ich nachfolgend einige zusätzliche Details hinzugefügt, wobei ich die von ihm vorgeschlagene verbesserte Datenstruktur verwendet habe:
# Set seed to make it reproducible
set.seed(12)
#New variable names and generation
subj <- sort(factor(rep(1:20,8)))
x1 <- rep(c('A','B'),80)
x2 <- rep(c('A','B'),20,each=2)
x3 <- rep(c('A','B'),10, each=4)
outcome <- rnorm(80,10,2)
d3 <- data.frame(outcome,subj,x1,x2,x3)
#Repeated measures ANOVA
ex.aov <- aov(outcome ~ x1*x2*x3 + Error(subj/(x1*x2*x3)), d3)
#proj function
ex.aov.proj <- proj(ex.aov)
# Check for normality by using last error stratum
qqnorm(ex.aov.proj[[9]][, "Residuals"])
# Check for heteroscedasticity by using last error stratum
plot(ex.aov.proj[[9]][, "Residuals"])
Die resultierenden Diagramme sind unten:
Kann jemand die Bilder oben interpretieren (besonders das letzte)? Es sieht so aus, als ob es Clustering und Musterstruktur gibt. Kann es verwendet werden, um auf das Vorhandensein von Heteroskedastizität zu schließen?
Antworten:
Ich gehe davon aus, dass ein Modell, das mit der
Error()
Funktion innerhalb angepasst wurde,aov()
bei Verwendung in nicht funktioniert,plot()
da Sie mehr als eine Fehlerschicht erhalten, aus der Sie auswählen können. Nach diesen Informationen hier sollte man nun dieproj()
Funktion verwenden, die Ihnen die Residuen für jede Fehlerschicht gibt, die dann für diagnostische Diagramme verwendet werden können.Bearbeiten Sie 1 Start
Weitere Informationen zu Multistratum-Modellen und zur
proj()
Funktion finden Sie in Venables und Ripley, Seite 284 (jedoch ab Seite 281): Residuen in Multistratum-Analysen: Projektionen . Im zweiten Satz schreiben sie (ich habe fett hervorgehoben):Für Ihr Beispiel bedeutet das:
Dies wird jedoch auch zu Handlungen führen, die ich nicht vollständig interpretieren kann (insbesondere die zweite).
In ihrem Fall war die letzte Schicht die
Within
Schicht. Da Ihr Modell dies nicht abschätzen kann (vermutlich aufgrund Ihres Fehlerausdrucks), bin ich mir nicht sicher, ob die einfache Verwendung Ihrer letzten Schicht gültig ist.Hoffentlich kann jemand anderes das klären.
1 Ende bearbeiten
Bearbeiten 2 starten
Nach dieser Quelle sollten Residuen zur Beurteilung der Normalität und Heteroskedastizität ohne die
Error()
Funktion überprüft werden .Das scheint mir vernünftig, aber ich hoffe, jemand anderes könnte es klarstellen.
Bearbeiten Sie 2 Ende
Mein alternativer Vorschlag:
Zuerst habe ich Ihren Datensatz leicht geändert und einen Startwert festgelegt, um ihn reproduzierbar zu machen (möglicherweise hilfreich für einige Probleme, die Sie in Zukunft haben):
Zweitens habe ich stattdessen ein lineares Mischeffektmodell verwendet, da Sie wiederholte Messungen und damit einen zufälligen Begriff haben, den Sie verwenden können:
Mit dem
afex
Paket können Sie auch die festen Effekte im ANOVA-Tabellenformat erhalten (Sie können dieAnova()
Funktion aus demcar
Paket auch als weitere Option verwenden):Überprüfen Sie
?mixed
die verschiedenen Optionen, die Sie auswählen können. Auch in Bezug auf gemischte Modelle gibt es hier viele Informationen zu Cross Validated.quelle
factor
in bereitstellenaov
?factor
in freuenaov
. Obwohl Ihre Beispiele funktionieren, habe ich nur versucht, Ihren Vorschlag auf meine Daten anzuwenden, und es hat sich nichts geändert. Explizit habe ich Folgendes auf meine numerischen Variablen innerhalb eines Datenrahmens angewendet (2 Beispiele unten):results$Inversion <- as.character(results$Inversion)
results$Inversion <- factor(results$Inversion, levels=c(0,1,2), labels=c("control", "upright", "inverted"))
results$ID <- as.character(results$ID)
results$ID <- factor(results$ID, levels=c(101:131), labels=as.character(1:31))
ex.aov0
und,ex.aov1
dass Sie im ersten Fallp
alsfactor
, also als Dummy-Variable und im zweiten Fallp
als kontinuierliche Variable behandeln. Funktioniert alsoaov
gut, es gibt keinen Fehler und es war Ihr Codierungsfehler. Bitte bearbeiten Sie Ihre Antwort, um den irreführenden Teil über "Fehler" in aov zu entfernen, da kein Fehler vorliegt und keine Änderung vorgenommen wird, wenn Sie in Faktoren transformierte Ganzzahlen oder in Faktoren transformierte Zeichenvektoren verwenden.Vollständiger Haftungsausschluss: Ich liebe es, R für viele verschiedene Analysen zu verwenden, aber ich mache keine ANOVAs in R.
Frage 1 : Im analytischen Kontext von ANOVAs bin ich eher damit vertraut, diese Annahme durch Tests der Homogenität von Varianzen zu bewerten, als Homo / Heteroskedastizität zu zeichnen und visuell zu bewerten. Obwohl es mehrere Tests zur Homogenität der Varianz gibt, sehe ich am meisten den Levene-Test. In R scheint es, dass Sie dies über das
car
Paket mit derleveneTest
Funktion tun können.Basierend auf Ihren Daten würde es so aussehen :
leveneTest(x ~ y*z*w, d)
. Beachten Sie, dass ich nicht glaube, dass Sie die Fehlerstruktur für wiederholte Messungen in dieser Funktion angeben können, und ehrlich gesagt bin ich mir nicht sicher, ob / inwieweit dies für den Levene-Test von Bedeutung ist. Im Vergleich zu anderen statischen Analysesoftware scheint es eine gewisse Variabilität hinsichtlich der Durchführung des Levene-Tests bei ANOVA mit wiederholten Messungen zu geben. SPSS bietet beispielsweise separate Levene-Tests zwischen Gruppen für jede Ebene Ihrer wiederholten Messung, während dieleveneTest
Funktion einen umfassenden Test aller Ebenen aller Variablen bietet - andere Software bietet möglicherweise auch alternative Ansätze. Auf jeden Fall scheint der SPSS-Ansatz auch die Abhängigkeit der Daten zu ignorieren, indem nur die Homogenität der Varianz zwischen den Gruppen bewertet wird.Frage 2 : Wenn Sie einen Test der Homogenität der Varianz verwenden möchten - Levene oder auf andere Weise -, wäre es wahrscheinlich informativer, einfache Balkendiagramme der Varianzen nach jeder Ebene Ihrer Variablen zu erstellen (denn das ist es, was Sie tun Homogenität des Varianztests wird explizit bewertet). Sie können dies leicht tun, indem Sie die Varianz Ihres Ergebnisses für jede Kombination der Ebenen Ihrer Variablen schätzen und sie dann in Basis R zeichnen oder das
ggplot2
Paket verwenden.quelle