So führen sie eine zweifaktorielle anova in r durch
Eine zweifaktorielle ANOVA („Varianzanalyse“) wird verwendet, um zu bestimmen, ob ein statistisch signifikanter Unterschied zwischen den Mittelwerten von drei oder mehr unabhängigen Gruppen besteht, die auf zwei Faktoren aufgeteilt wurden.
In diesem Tutorial wird erläutert, wie eine zweifaktorielle ANOVA in R durchgeführt wird.
Beispiel: Zweifaktorielle ANOVA in R
Nehmen wir an, wir möchten herausfinden, ob Trainingsintensität und Geschlecht einen Einfluss auf die Gewichtsabnahme haben. In diesem Fall sind die beiden Faktoren, die wir betrachten, Bewegung und Geschlecht , und die Antwortvariable ist der Gewichtsverlust, gemessen in Pfund.
Wir können eine Zwei-Wege-ANOVA durchführen, um festzustellen, ob Bewegung und Geschlecht einen Einfluss auf die Gewichtsabnahme haben und um festzustellen, ob eine Wechselwirkung zwischen Bewegung und Geschlecht auf die Gewichtsabnahme besteht.
Wir rekrutieren 30 Männer und 30 Frauen für die Teilnahme an einem Experiment, bei dem wir jeweils 10 nach dem Zufallsprinzip dazu auffordern, einen Monat lang ein Programm ohne, leichtes oder intensives Training zu absolvieren.
Der folgende Code erstellt den Datenrahmen, mit dem wir arbeiten werden:
#make this example reproducible set.seed(10) #create data frame data <- data.frame(gender = rep(c("Male", "Female"), each = 30), exercise = rep(c("None", "Light", "Intense"), each = 10, times = 2), weight_loss = c(runif(10, -3, 3), runif(10, 0, 5), runif(10, 5, 9), runif(10, -4, 2), runif(10, 0, 3), runif(10, 3, 8))) #view first six rows of data frame head(data) # gender exercise weight_loss #1 Male None 0.04486922 #2 Male None -1.15938896 #3 Male None -0.43855400 #4 Male None 1.15861249 #5 Male None -2.48918419 #6 Male None -1.64738030 #see how many participants are in each group table(data$gender, data$exercise) # Intense Light None # Female 10 10 10 # Male 10 10 10
Erkunden Sie die Daten
Bevor wir das Zwei-Wege-ANOVA-Modell überhaupt anpassen, können wir die Daten besser verstehen, indem wir mithilfe des dplyr- Pakets den Mittelwert und die Standardabweichung des Gewichtsverlusts für jede der sechs Behandlungsgruppen ermitteln:
#load dplyr package library(dplyr) #find mean and standard deviation of weight loss for each treatment group data %>% group_by (gender, exercise) %>% summarize (mean = mean(weight_loss), sd = sd(weight_loss)) # A tibble: 6 x 4 # Groups: gender [2] # gender exercise means sd # #1 Female Intense 5.31 1.02 #2 Female Light 0.920 0.835 #3 Female None -0.501 1.77 #4 Male Intense 7.37 0.928 #5 Male Light 2.13 1.22 #6 Male None -0.698 1.12
Wir können auch ein Boxplot für jede der sechs Behandlungsgruppen erstellen, um die Verteilung des Gewichtsverlusts für jede Gruppe zu visualisieren:
#set margins so that axis labels on boxplot don't get cut off by(mar=c(8, 4.1, 4.1, 2.1)) #create boxplots boxplot(weight_loss ~ gender:exercise, data = data, main = "Weight Loss Distribution by Group", xlab = "Group", ylab = "Weight Loss", col = "steelblue", border = "black", las = 2 #make x-axis labels perpendicular )
Wir können sofort erkennen, dass die beiden Gruppen, die intensiv trainierten, offenbar höhere Gewichtsverlustwerte aufwiesen. Wir können auch sehen, dass Männer sowohl in der intensiven als auch in der leichten Trainingsgruppe tendenziell höhere Gewichtsverlustwerte haben als Frauen.
Als nächstes passen wir das Zwei-Wege-ANOVA-Modell an unsere Daten an, um zu sehen, ob diese visuellen Unterschiede tatsächlich statistisch signifikant sind.
Anpassung des Zwei-Wege-ANOVA-Modells
Die allgemeine Syntax zum Anpassen eines Zwei-Wege-ANOVA-Modells in R lautet:
aov(Antwortvariable ~predictor_variable1 *predictor_variable2, data = dataset)
Beachten Sie, dass das * zwischen den beiden Prädiktorvariablen anzeigt, dass wir auch einen Interaktionseffekt zwischen den beiden Prädiktorvariablen testen möchten.
In unserem Beispiel können wir den folgenden Code verwenden, um das Zwei-Wege-ANOVA-Modell anzupassen, indem wir „weight_loss“ als Antwortvariable und „Geschlecht “ und „ Training“ als die beiden Prädiktorvariablen verwenden.
Anschließend können wir die Funktion summary() verwenden, um das Ergebnis unseres Modells anzuzeigen:
#fit the two-way ANOVA model model <- aov(weight_loss ~ gender * exercise, data = data) #view the model output summary(model) # Df Sum Sq Mean Sq F value Pr(>F) #gender 1 15.8 15.80 11.197 0.0015 ** #exercise 2 505.6 252.78 179.087 <2e-16 *** #gender:exercise 2 13.0 6.51 4.615 0.0141 * #Residuals 54 76.2 1.41 #--- #Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Anhand der Modellergebnisse können wir erkennen, dass Geschlecht , Bewegung und die Interaktion zwischen den beiden Variablen alle statistisch signifikant auf dem Signifikanzniveau 0,05 sind.
Überprüfung der Modellannahmen
Bevor wir fortfahren, müssen wir überprüfen, ob die Annahmen unseres Modells erfüllt sind, damit unsere Modellergebnisse zuverlässig sind. Insbesondere geht eine zweifaktorielle ANOVA davon aus:
1. Unabhängigkeit – die Beobachtungen jeder Gruppe müssen unabhängig voneinander sein. Da wir ein randomisiertes Design verwendet haben , sollte diese Annahme erfüllt sein, sodass wir uns darüber keine allzu großen Sorgen machen müssen.
2. Normalität – die abhängige Variable sollte für jede Gruppenkombination der beiden Faktoren eine annähernd normale Verteilung aufweisen.
Eine Möglichkeit, diese Annahme zu testen, besteht darin, ein Histogramm der Modellresiduen zu erstellen. Wenn die Residuen annähernd normalverteilt sind, sollte diese Annahme erfüllt sein.
#define model residuals reside <- model$residuals #create histogram of residuals hist(resid, main = "Histogram of Residuals", xlab = "Residuals", col = "steelblue")
Die Residuen sind annähernd normalverteilt, sodass wir davon ausgehen können, dass die Normalitätsannahme erfüllt ist.
3. Gleiche Varianz – die Varianzen für jede Gruppe sind gleich oder annähernd gleich.
Eine Möglichkeit, diese Annahme zu überprüfen, besteht darin, einen Levene-Test auf Varianzgleichheit unter Verwendung des Autopakets durchzuführen:
#load car package library(car) #conduct Levene's Test for equality of variances leveneTest(weight_loss ~ gender * exercise, data = data) #Levene's Test for Homogeneity of Variance (center = median) # Df F value Pr(>F) #group 5 1.8547 0.1177 #54
Da der p-Wert des Tests größer als unser Signifikanzniveau von 0,05 ist, können wir davon ausgehen, dass unsere Annahme der Varianzgleichheit zwischen den Gruppen erfüllt ist.
Analysieren Sie Behandlungsunterschiede
Sobald wir überprüft haben, dass die Modellannahmen erfüllt sind, können wir einen Post-hoc-Test durchführen, um genau zu bestimmen, welche Behandlungsgruppen sich voneinander unterscheiden.
Für unseren Post-hoc-Test verwenden wir die Funktion TukeyHSD() , um den Tukey-Test für mehrere Vergleiche durchzuführen:
#perform Tukey's Test for multiple comparisons
TukeyHSD(model, conf.level=.95)
#Tukey multiple comparisons of means
# 95% family-wise confidence level
#
#Fit: aov(formula = weight_loss ~ gender * exercise, data = data)
#
#$gender
# diff lwr upr p adj
#Male-Female 1.026456 0.4114451 1.641467 0.0014967
#
#$exercise
# diff lwr upr p adj
#Light-Intense -4.813064 -5.718493 -3.907635 0.0e+00
#None-Intense -6.938966 -7.844395 -6.033537 0.0e+00
#None-Light -2.125902 -3.031331 -1.220473 1.8e-06
#
#$`gender:exercise`
# diff lwr upr p adj
#Male:Intense-Female:Intense 2.0628297 0.4930588 3.63260067 0.0036746
#Female:Light-Female:Intense -4.3883563 -5.9581272 -2.81858535 0.0000000
#Male:Light-Female:Intense -3.1749419 -4.7447128 -1.60517092 0.0000027
#Female:None-Female:Intense -5.8091131 -7.3788841 -4.23934219 0.0000000
#Male:None-Female:Intense -6.0059891 -7.5757600 -4.43621813 0.0000000
#Female:Light-Male:Intense -6.4511860 -8.0209570 -4.88141508 0.0000000
#Male:Light-Male:Intense -5.2377716 -6.8075425 -3.66800066 0.0000000
#Female:None-Male:Intense -7.8719429 -9.4417138 -6.30217192 0.0000000
#Male:None-Male:Intense -8.0688188 -9.6385897 -6.49904786 0.0000000
#Male:Light-Female:Light 1.2134144 -0.3563565 2.78318536 0.2185439
#Female:None-Female:Light -1.4207568 -2.9905278 0.14901410 0.0974193
#Male:None-Female:Light -1.6176328 -3.1874037 -0.04786184 0.0398106
#Female:None-Male:Light -2.6341713 -4.2039422 -1.06440032 0.0001050
#Male:None-Male:Light -2.8310472 -4.4008181 -1.26127627 0.0000284
#Male:None-Female:None -0.1968759 -1.7666469 1.37289500 0.9990364
Der p-Wert gibt an, ob zwischen den einzelnen Gruppen ein statistisch signifikanter Unterschied besteht oder nicht.
In der letzten Zeile oben sehen wir beispielsweise, dass die Gruppe der Männer, die keine Übungen machten, keinen statistisch signifikanten Unterschied beim Gewichtsverlust im Vergleich zur Gruppe der Frauen, die keine Übungen machten, aufwies (p-Wert: 0,990364).
Wir können die 95 %-Konfidenzintervalle, die sich aus dem Tukey-Test ergeben, auch mithilfe der Funktion plot() in R visualisieren:
#set axis margins so labels don't get cut off by(mar=c(4.1, 13, 4.1, 2.1)) #create confidence interval for each comparison plot(TukeyHSD(model, conf.level=.95), las = 2)
Berichterstattung über Ergebnisse der zweifaktoriellen ANOVA
Schließlich können wir die Ergebnisse der zweifaktoriellen ANOVA auf eine Weise berichten, die die Ergebnisse zusammenfasst:
Eine Zwei-Wege-ANOVA wurde durchgeführt, um die Auswirkungen des Geschlechts ( männlich, weiblich) und des Trainingsprogramms (kein, leicht, intensiv) auf den Gewichtsverlust (gemessen in Pfund) zu untersuchen. Es gab eine statistisch signifikante Wechselwirkung zwischen den Auswirkungen von Geschlecht und Bewegung auf den Gewichtsverlust (F(2, 54) = 4,615, p = 0,0141). Post-hoc-Tukey-HSD-Tests wurden durchgeführt.
Bei Männern führte ein intensives Trainingsprogramm zu einem deutlich größeren Gewichtsverlust als ein leichtes Programm (p < 0,0001) oder kein Trainingsprogramm (p < 0,0001). Darüber hinaus führte eine leichte Ernährung bei Männern zu einem deutlich größeren Gewichtsverlust als kein Training (p < 0,0001).
Bei Frauen führte ein intensives Trainingsprogramm zu einem deutlich größeren Gewichtsverlust als ein leichtes Programm (p < 0,0001) oder kein Trainingsprogramm (p < 0,0001).
Normalitätsprüfungen und der Levene-Test wurden durchgeführt, um zu überprüfen, ob die Annahmen der ANOVA erfüllt waren.