So führen Sie eine ANCOVA in R durch

Von Fabian
Kategorie: R
Tags: ANOVA
Lesezeit: 7 Minuten

Dieses Tutorial enthält ein Beispiel für die Durchführung einer ANCOVA in R

Beispiel: ANCOVA in R

Wir werden eine ANCOVA durchführen, um anhand der folgenden Variablen zu testen, ob sich das Studium auf die Prüfungsergebnisse auswirkt oder nicht:

  • Studiertechnik: Die unabhängige Variable, die wir analysieren möchten
  • Aktuelle Note des Schülers: Die Kovariate, die wir berücksichtigen möchten
  • Prüfungsergebnis: Die Antwortvariablen, die wir analysieren möchten

Der folgende Datensatz enthält Informationen für 90 Schüler, die zufällig in drei Gruppen zu je 30 Personen aufgeteilt wurden. Der Datensatz zeigt die von jedem Schüler verwendete Lerntechnik (A, B oder C) , ihre aktuelle Note in der Klasse, als sie mit der Lerntechnik begannen. und ihre Prüfungsergebnisse, die sie erhalten haben, nachdem sie einen Monat lang die Lerntechnik angewendet hatten, um sich auf die Prüfung vorzubereiten:

#Machen Sie dieses Beispiel reproduzierbar
set.seed (10)

#Datensatz erstellen
data <- data.frame(technique = rep(c("A", "B", "C"), each = 30),
current_grade = runif(90, 65, 95),
exam = c(runif(30, 80, 95), runif(30, 70, 95), runif(30, 70, 90)))

# Die ersten sechs Zeilen des Datensatzes anzeigen
head(data)

#  technique current_grade     exam
#1         A      80.22435 87.32759
#2         A      74.20306 90.67114
#3         A      77.80723 88.87902
#4         A      85.79306 87.75735
#5         A      67.55408 85.72442
#6         A      71.76310 92.52167

Schritt 1: Durchsuchen Sie die Daten

Bevor wir das ANCOVA-Modell anpassen, sollten wir zunächst die Daten untersuchen, um sie besser zu verstehen und sicherzustellen, dass es keine extremen Ausreißer gibt, die die Ergebnisse verzerren könnten.

Zunächst können wir eine Zusammenfassung jeder Variablen im Datensatz anzeigen:

summary(data)

# technique current_grade        exam      
# A:30      Min.   :65.43   Min.   :71.17  
# B:30      1st Qu.:71.79   1st Qu.:77.27  
# C:30      Median :77.84   Median :84.69  
#           Mean   :78.15   Mean   :83.38  
#           3rd Qu.:83.65   3rd Qu.:89.22  
#           Max.   :93.84   Max.   :94.76  

Wir können sehen, dass jeder Wert für das Studium der Technik ( A, B und C) 30 Mal in den Daten erscheint.

Wir können auch sehen, wie die aktuellen Schülerergebnisse zu Beginn der Studie verteilt wurden. Die Mindestpunktzahl in der Klasse betrug 65,43, die Höchstpunktzahl 93,84 und der Mittelwert 78,15.

Ebenso können wir sehen, dass die Mindestpunktzahl für die Prüfung 71,17 betrug, die Höchstpunktzahl 94,76 betrug und der Mittelwert 83,38 betrug.

Als nächstes können wir das dplyr-Paket verwenden, um den Mittelwert und die Standardabweichung sowohl der aktuellen Noten als auch der Prüfungsergebnisse für jede Lerntechnik leicht zu ermitteln:

#dplyr laden
library(dplyr)
data %>%
  group_by(technique) %>%
  summarise(mean_grade = mean(current_grade),
            sd_grade = sd(current_grade),
            mean_exam = mean(exam),
            sd_exam = sd(exam))

# A tibble: 3 x 5
#  technique mean_grade sd_grade mean_exam sd_exam                      
#1 A               79.0     7.00      88.5    3.88
#2 B               78.5     8.33      81.8    7.62
#3 C               76.9     8.24      79.9    5.71

Wir können sehen, dass der Mittelwert und die Standardabweichungen der aktuellen Note für die Schüler, die jede Lerntechnik anwenden, ungefähr ähnlich sind.

Wir können auch sehen, dass die durchschnittliche Prüfungspunktzahl für die Schüler, die Technik A studiert haben, im Vergleich zu Technik B und C deutlich höher ist.

Wir können auch die Verteilung der Prüfungsergebnisse basierend auf der Lerntechnik mithilfe von Boxplots visualisieren:

boxplot(exam ~ technique,
        data = data,
        main = "Exam Score by Studying Technique",
        xlab = "Studying Technique",
        ylab = "Exam Score",
        col = "steelblue",
        border = "black"
)

Überprüfen der ANCOVA-Annahmen mit Boxplots

In ähnlicher Weise können wir auch Boxplots verwenden, um die Verteilung der aktuellen Noten basierend auf der Lerntechnik zu visualisieren:

boxplot(current_grade ~ technique,
        data = data,
        main = "Current Grade by Studying Technique",
        xlab = "Studying Technique",
        ylab = "Current Grade",
        col = "steelblue",
        border = "black"
)

Verteilung mit Boxplots in R

Schritt 2: Überprüfen Sie die Modellannahmen

Nachdem wir einige grundlegende Datenexplorationen durchgeführt haben und mit den Daten vertraut sind, müssen wir überprüfen, ob die folgenden Annahmen für ANCOVA erfüllt sind:

  • Die Kovariate und die Behandlung sind unabhängig voneinander – wir müssen überprüfen, ob die Kovariate (aktuelle Note) und die Behandlung (Lerntechnik) unabhängig voneinander sind, da das Hinzufügen eines Kovariatenbegriffs zum Modell nur dann sinnvoll ist, wenn die Kovariate und die Behandlung wirken unabhängig von der Antwortvariablen (Prüfung).
  • Homogenität der Varianz – Wir müssen überprüfen, ob die Varianzen zwischen den Gruppen gleich sind

Um zu überprüfen, ob die Kovariate und die Behandlung unabhängig sind, können wir eine ANOVA unter Verwendung des aktuellen Grades als Antwortvariable und der Untersuchungstechnik als Prädiktorvariable durchführen:

#Anova Modell anpassen
anova_model <- aov(current_grade ~ technique, data = data)

#Zusammenfassung des Anova-Modells anzeigen
summary(anova_model)

#            Df Sum Sq Mean Sq F value Pr(>F)
#technique    2     74   37.21   0.599  0.552
#Residuals   87   5406   62.14    

Der p-Wert ist größer als 0,05, daher scheinen die Kovariate (aktuelle Note) und die Behandlung (Lerntechnik) unabhängig zu sein.

Um zu überprüfen, ob zwischen den Gruppen eine Homogenität der Varianz besteht, können wir den Levene-Test durchführen:

#car Bibliothek laden, um Levene-Test durchzuführen
libary(car)

#Levene Test durchführen
leveneTest(exam~technique, data = data)

#Levene's Test for Homogeneity of Variance (center = median)
#      Df F value    Pr(>F)    
#group  2  9.4324 0.0001961 ***
#      87   

Der p-Wert aus dem Test ist gleich .0001961, was darauf hinweist, dass die Varianzen zwischen den Gruppen nicht gleich sind. Obwohl wir versuchen könnten, die Daten zu transformieren, um dieses Problem zu beheben, werden wir uns vorerst nicht allzu viele Sorgen um die Unterschiede in der Varianz machen.

Schritt 3: Passen Sie das ANCOVA-Modell an

Als nächstes passen wir das ANCOVA-Modell an, indem wir den Prüfungswert als Antwortvariable verwenden, die Technik als Prädiktor- (oder „Behandlungs-“) Variable und die aktuelle Note als Kovariate.

Wir werden dazu die Anova() – Funktion im Fahrzeugpaket verwenden, damit wir angeben können, dass wir die Quadratsumme vom Typ III für das Modell verwenden möchten, da die Quadratsumme vom Typ I von der Reihenfolge abhängt, in der sie sich befindet Die Prädiktoren werden in das Modell eingegeben:

#car Bibliothek laden
library(car)

#ANCOVA Modell anpassen
ancova_model <- aov(exam ~ technique + current_grade, data = data)

#Zusammenfassung des Modells anzeigen
Anova(ancova_model, type="III") 

#Response: exam
#              Sum Sq Df  F value    Pr(>F)    
#(Intercept)   7161.2  1 201.4621 < 2.2e-16 ***
#technique     1242.9  2  17.4830 4.255e-07 ***
#current_grade   12.3  1   0.3467    0.5576    
#Residuals     3057.0 86 

Wir können sehen, dass der p-Wert für die Technik extrem klein ist, was darauf hinweist, dass das Studieren der Technik einen statistisch signifikanten Einfluss auf die Prüfungsergebnisse hat, selbst nach Kontrolle der aktuellen Note.

Schritt 4: Post-Hoc-Tests

Obwohl die ANCOVA Ergebnisse uns gesagt, dass „Studiertechnik“ auf die Prüfungsergebnisse einen statistisch signifikanten Effekt hatte, müssen wir den Post–hoc–Tests durchführen, um tatsächlich herauszufinden, wie sich die Studiertechniken voneinander unterscheiden.

Zu diesem Zweck können wir die Funktion glht() im multcomp-Paket in R verwenden, um den Tukey-Test für mehrere Vergleiche durchzuführen:

#Laden Sie die Multcomp- Bibliothek
library(multcomp)

#Anpassen des ANCOVA-Modells
ancova_model <- aov(exam ~ technique + current_grade, data = data)

#Definieren Sie die durchzuführenden Post-Hoc-Vergleiche
postHocs <- glht(ancova_model, linfct = mcp(technique = "Tukey"))

# eine Zusammenfassung der Post-hoc-Vergleiche anzeigen
summary(postHocs)

#Multiple Comparisons of Means: Tukey Contrasts
#
#Fit: aov(formula = exam ~ technique + current_grade, data = data)
#
#Linear Hypotheses:
#           Estimate Std. Error t value Pr(>|t|)    
#B - A == 0   -6.711      1.540  -4.358 0.000109 ***
#C - A == 0   -8.736      1.549  -5.640  < 1e-04 ***
#C - B == 0   -2.025      1.545  -1.311 0.393089  
# Sehen Sie sich die Konfidenzintervalle an, die mit den Mehrfachvergleichen verbunden sind 
confint(postHocs)

#    Simultaneous Confidence Intervals
#
#Multiple Comparisons of Means: Tukey Contrasts
#
#Fit: aov(formula = exam ~ technique + current_grade, data = data)
#
#Quantile = 2.3845
#95% family-wise confidence level
#
#Linear Hypotheses:
#           Estimate lwr      upr     
#B - A == 0  -6.7112 -10.3832  -3.0392
#C - A == 0  -8.7364 -12.4302  -5.0426
#C - B == 0  -2.0252  -5.7091   1.6588

Aus der Ausgabe können wir erkennen, dass es einen statistisch signifikanten Unterschied (bei α = 0,05) in den Prüfungsergebnissen zwischen dem Studium von Technik A und dem Studium von Technik B (p-Wert: .000109) sowie zwischen Technik A und Technik C gibt ( p-Wert: <1e-04).

Wir können auch sehen, dass es keinen statistisch signifikanten Unterschied (bei α = 0,05) zwischen den Techniken B und C gibt. Die Konfidenzintervalle zwischen den Techniken bestätigen diese Schlussfolgerungen ebenfalls.

Wir können daher den Schluss ziehen, dass die Verwendung von Lerntechnik A zu einer statistisch signifikant höheren Prüfungsbewertung für Schüler im Vergleich zu Technik B und C führt, selbst nachdem die aktuelle Note des Schülers in der Klasse kontrolliert wurde.

Statistik: Der Weg zur Datenanalyse

* Amazon Affiliate Link


Das könnte Sie auch interessieren: