Statistik mit R & RStudio

28 ANCOVA Kovarianzanalyse mit R

ANCOVA Kovarianzanalyse

Die Kovarianzanalyse (ANCOVA) ist ein statistisches Verfahren, mit dem die Beziehung zwischen einer kontinuierlichen abhängigen Variablen und einer oder mehreren kategorialen unabhängigen Variablen analysiert wird, während gleichzeitig für die Auswirkungen einer oder mehrerer kontinuierlicher Kovariaten kontrolliert wird. Die allgemeine Idee hinter der ANCOVA besteht darin, die Variation in der abhängigen Variable, die durch die Kovariablen erklärt wird, zu bereinigen, so dass die verbleibende Variation den Auswirkungen der unabhängigen Variablen zugeschrieben werden kann.

ANCOVA kann in R mit der Funktion lm() durchgeführt werden, also dem generellen linearen Modell. Die grundlegende Syntax für die Verwendung von lm() zur Durchführung einer ANCOVA lautet wie folgt:

ANCOVA <- lm(abhängige_Variable ~ unabhängige_Variable + Kovariate, Daten = data_frame)

Hier wird die abhängige Variable auf der linken Seite der Formel angegeben, und die unabhängige Variable und Kovariate(n) werden auf der rechten Seite der Formel angegeben, getrennt durch ein + Symbol.

Beispiel

Wir nutzen Datensatz mtcars (in R Hinterlegt). Wir wollen der Frage nachgehen, ob Autos mit Automatikgetriebe (am) mehr Benzin verbrauchen (mpg), als solche mit Schaltgetriebe? Beachten Sie, dass der Verbrauch der Fahrzeuge hier in Miles per Gallon (mpg) angegeben ist und hier ein kleinerer Wert einen größeren Verbrauch angibt (Das Fahrzeug schafft weniger Meilen mit einer Galone Benzin).

Daten laden

Da die Daten in r hinterlegt sind, müssen wir die Daten nicht laden, sondern können direkt darauf zugreifen. Schauen wir uns die Daten zunächst einmal an.

head(mtcars)
##                    mpg cyl disp  hp drat    wt  qsec vs am gear
## Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4
## Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4
## Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4
## Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3
## Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3
## Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3
##                   carb
## Mazda RX4            4
## Mazda RX4 Wag        4
## Datsun 710           1
## Hornet 4 Drive       1
## Hornet Sportabout    2
## Valiant              1

Verwenden Sie die Hilfefunktion zu diesem Datensatz mit ?mtcars, um diesen näher zu verstehen. Das Wichtigste: Bei der Variable am bedeutet 0 Automatikgetriebe und 1 Handschaltung.

Deskriptive Analyse

Betrachten wir die Daten zunächst mit Hilfe eines Boxplots.

boxplot(mtcars$mpg~mtcars$am)

image

Das Getriebe scheint einen Einfluss auf den Verbrauch zu haben, ob dieser auch statistisch signifikant ist, könnte man zum Beispiel mit einem t-Test oder eben auch einer ANOVA testen.

Test <- aov(mpg~am,data = mtcars)
summary(Test)
##             Df Sum Sq Mean Sq F value   Pr(>F)    
## am           1  405.2   405.2   16.86 0.000285 ***
## Residuals   30  720.9    24.0                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Der t-Test wird signifikant. Der Unterschied im Verbrauch ist also statistisch signifikant. Das heißt aber nicht unbedingt, dass das Getriebe auch ursächlich ist für den höheren Verbrauch. Hier hilft uns die ANCOVA.

Hypothese für die Kovariate

Es könnte sein, dass der Einfluss eigentlich durch die Motorleistung (hp) verursacht wird und bei gleichbleibender Leistung (hp) das Getriebe gar keinen Einfluss auf den Verbauch (mpg) hat.

Voraussetzungen prüfen

Die Voraussetzungen sind bei ANCOVA insbesondere Varianzhomogenität und Unabhängigkeit des Prädiktors von der Kovariate

Varianzhomogenität

Testen wir zunächst die Varianzhomogenität mit dem Levene-Test. Die Notation ist wie bisher, jedoch müssen wir die Variable Getriebe (am) als Faktor hinterlegen. Dies machen wir hier mit as.factor.

library(car)
leveneTest(mtcars$mpg, as.factor(mtcars$am))
## Levene's Test for Homogeneity of Variance (center = median)
##       Df F value  Pr(>F)  
## group  1  4.1876 0.04957 *
##       30                  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Der Test wird knapp signifikant. Wir müssen unsere Ergebnisse also mit Vorsicht betrachten oder robuste Methoden nutzen. Da der Wert genau an der Grenze ist, machen wir an dieser Stelle mit der ANCOVA weiter.

Unabhängigkeit des Prädiktors von der Kovariate

Wir müssen die Frage beantworten, ob es auf den verschiedenen Stufen der UV (Getriebeart) statistisch signifikante Unterschiede in der Kovariate (Leistung) gibt

Hierzu führen wir eine ANOVA mit dem Prädiktor und der Kovariate aus.

ANOVA_Test<-aov(hp~am, data=mtcars)
summary(ANOVA_Test)
##             Df Sum Sq Mean Sq F value Pr(>F)
## am           1   8619    8619   1.886   0.18
## Residuals   30 137107    4570

Das Ergebnis zeigt, dass es keinen signifikanten Unterschied in der Leistung, abhängig vom Getriebe, gibt. Der Prädiktor (Getriebe) ist also von der Kovariate unabhängig.

ANCOVA durchführen

Wir wollen testen, ob der Einfluss auf den Verbrauch durch die Motorleistung (hp) verursacht wird und bei gleichbleibender Leistung (hp) das Getriebe gar keinen Einfluss auf den Verbauch (mpg) hat. Um diese Möglichkeit zu testen, führen wir eine ANCOVA durch und kontrollieren für die Leistung (hp).

Wir nutzen im nächsten Schritt das lineare Modell, welches wir mit lm aufrufen. Die gesamte Notation lautet: lm(AV~UVKovariate)*

ANCOVA_CARS <- lm(mpg~am*hp,data = mtcars)
summary(ANCOVA_CARS)
## 
## Call:
## lm(formula = mpg ~ am * hp, data = mtcars)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -4.3818 -2.2696  0.1344  1.7058  5.8752 
## 
## Coefficients:
##               Estimate Std. Error t value         Pr(>|t|)    
## (Intercept) 26.6248479  2.1829432  12.197 0.00000000000101 ***
## am           5.2176534  2.6650931   1.958           0.0603 .  
## hp          -0.0591370  0.0129449  -4.568 0.00009018507863 ***
## am:hp        0.0004029  0.0164602   0.024           0.9806    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.961 on 28 degrees of freedom
## Multiple R-squared:  0.782,  Adjusted R-squared:  0.7587 
## F-statistic: 33.49 on 3 and 28 DF,  p-value: 0.000000002112

Die Ergebnisse zeigen, dass nun, mit Kovariate, nur die Leistung (hp) einen signifikanten Einfluss auf den Verbrauch hat. Der Faktor Getriebe (am) hat nun keinen siginifikanten Einfluss auf den Verbrauch hat (mpg) mehr. Auch der Interaktionseffekt wird nicht signifikant.

Mit anderen Worten: Bei konstanter Leistung gibt es keinen signifikanten Unterschied im Verbrauch zwischen Fahrzeugen mit und ohne Automatikgetriebe.

Um besser zu verstehen, wie die Getriebe, die Leistung und der Verbauch zusammenhängen, erstellen wir ein Interaktionsdiagramm

Hierfür nutzen wir das Paket rockchalk

library(rockchalk)
slopes <-plotSlopes(ANCOVA_CARS,plotx="hp", modx="am")

image

Das Diagramm zeigt, dass es keinen Interaktionseffekt gibt (Linien fast parallel), was wir auch in den Daten bereits gesehen haben. Das heißt, mit zunehmender Leistung nimmt der Verbrauch zu (mpg nimmt ab), unabhängig davon, ob manuelles oder Automatikgetriebe.

In diesem Video zeige ich, wie das in R funktioniert:

Lizenz

Statistik Grundlagen Copyright © Patrick Planing. Alle Rechte vorbehalten.