II. Univariate Statistik I: Das Lineare Modell 57
5.3. Faktoren statt kontinuierliche erkl¨arende Variablen: oneway-ANOVA
oneway-ANOVA
5.3.1. Einfaktorielle Varianzanalyse
Die Ergebnisse einer einfaktoriellen Varianzanalyse (one-way ANOVA: analysis of variance) und eines t-Tests sind identisch, wenn die beiden Stichproben die gleiche Varianz haben. Der allgemeine t-Test (Gleichung 4.4) erlaubt auch den Vergleich von Stichproben unterschiedli-cher Varianz, wohingegen dies bei der ANOVA nicht m¨oglich ist. Das hinter einer ANOVA stehende Konzept allerdings ist sehr viel m¨achtiger und generell sehr wichtig (Underwood 1997). Deshalb lohnt es sich hier kurz die Grundlagen am Beispiel einer einfaktoriellen ANO-VA durchzugehen.
Der Grundgedanke ist, dass man die Varianz eines Datensatzes in zwei Gruppen aufteilen kann: diejenige, die mit den Behandlungseffekten assoziiert ist (s2Effect), und die sogenann-te residuelle Varianz, die also nach Abzug der erkl¨arsogenann-ten ¨ubrig bleibt (s2Fehler oder s2resid genannt). Das Verh¨altnis dieser Varianzen kann als F -Test genutzt werden. Im Detail:
Wir definieren die Summe der Abweichungsquadrate (SS: sum of squares) als SStotal =X(y − ¯¯y)2
wobei ¯y = der Gesamtmittelwert ¨¯ uber alle y ist. F¨ur die zwei Behandlungsgruppen A und B k¨onnen wir einen Gruppenmittelwert berechnen: ¯yA und ¯yB. Damit ist die Summe der Abweichungsquadrate der Gruppen, SSA und SSB, definiert als: SSA = P(y − ¯yA)2 und SSB = P(y − ¯yB)2. Die Summe dieser beiden Summen ist die verbleibende Variabilit¨at innerhalb der Gruppen, genannt Abweichungsquadrate des Fehlers, oder error sum of squares:
SSFehler = SSA+ SSB=X(y − ¯yA)2+X(y − ¯yB)2
(Beachte, dass f¨ur den Fall dass es keinen Unterschied zwischen A und B gibt, ¯yA= ¯yB= ¯y,¯ und somit SSFehler = SStotal.)
Die Differenz zwischen SSgesamt und SSFehler kann man entsprechend der Behandlung zuschreiben (treatments sum of squares):
SSBehandl = SSgesamt − SSFehler
In anderen Worten: SSBehandl ist die Summe der Differenz zwischen dem Gesamtmittelwert
¯¯
y und den gesch¨atzten Gruppenmitteln ˆy (d.i. ˆyA und ˆyB, respektive):
SSBehandl =X(ˆyA− ¯¯y)2+X(ˆyB− ¯¯y)2
Analog zum Vergleich zweier Varianzen (siehe Abschnitt 4.1.3, Seite 48) kann das F -Verh¨altnis wie folgt berechnet werden11:
Quelle SS d.f. M S F
Behandlung SSBehandl k − 1 SSBehandl
k−1
M SBehandl M SFehler
Fehler SSFehler k(n − 1) s2 = SSFehler
k(n−1)
Gesamt SSgesamt kn − 1
k verschiedene Behandlungen mit einem Gesamtprobenumfang von n
Wenn die Genauigkeit der Messung zunimmt, so dass (y − ¯yA)2 abnimmt, so nimmt auch SSFehler ab. Perfekte Replikation innerhalb einer Gruppe bedeutet das SSFehler gegen 0 geht, weshalb das F -Verh¨altnis st¨arker w¨achst. Die kritischen F -Werte k¨onnen wiederum in Tabellen nachgeschlagen werden.
Ein Mass f¨ur die Erkl¨arungskraft des Modells ist der sogenannte R2-Wert. Er berechnet sich als Verh¨altnis von SSBehandl. und SSgesamt. Somit gibt er an, wieviel der Varianz des gesamten Datensatzes durch die Behandlung erkl¨art wird. Diese erkl¨arte Varianz wird h¨aufig in % angegeben (also R2· 100%).
Wenn die Daten nicht varianzhomogen sind, so ist eine wichtige Voraussetzung der ANOVA verletzt. Der Kruska-Wallis-Test bietet hier einen Ausweg. Daf¨ur werden die Daten Rang-transformiert und danach mit einer ANOVA analysiert (Underwood 1997). Wenn die Daten zu h¨aufig den gleichen Wert haben (sog.
”ties“) kann auch dieser Test nicht angewandt werden, da dann ebenfalls die Gefahr besteht, dass die Varianzen heterogen sind.
Eine Analyse wie oben kann auf verschiedene Art und Weise implementiert werden. Am schl¨ussigsten sich hier anschließend ist die Funktion aov (analysis of variance). Beispieldaten sind enthalten in aov.bsp. Im folgenden Beispiel wird zun¨achst eine Tabelle mit normalverteilen Werten generiert, die dann im weiteren analysiert wird. Da wir vorgeben, dass die Daten normalverteilt sind, k¨onnen wir uns den Test auf Normalit¨at schenken. Ebenso haben beide Variablen die gleiche Standardabweichung, unterscheiden sich also nur im Mittelwert.
> set.seed(1)
> aov.bsp <- matrix(ncol = 2, nrow = 40)
> aov.bsp[1:20, 2] <- rnorm(20, 10, 4)
> aov.bsp[21:40, 2] <- rnorm(20, 13, 4)
> aov.bsp[1:20, 1] <- 1
> aov.bsp[21:40, 1] <- 2
> colnames(aov.bsp) <- c("x", "y")
> aov.bsp <- as.data.frame(aov.bsp)
> fm1 <- aov(y ~ x, data = aov.bsp)
> summary(fm1)
11siehe etwa (Crawley 2002) oder http://mathworld.wolfram.com/ANOVA.html
Df Sum Sq Mean Sq F value Pr(>F)
x 1 48.93 48.93 3.8387 0.05745 .
Residuals 38 484.37 12.75
---Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1 1 Im Vergleich dazu der Ansatz des linearen Modells und sein output:
> fm2 <- lm(y ~ x, data = aov.bsp)
> summary(fm2) Call:
lm(formula = y ~ x, data = aov.bsp) Residuals:
Min 1Q Median 3Q Max
-9.6209 -1.6972 0.1483 2.5096 5.6190 Coefficients:
Estimate Std. Error t value Pr(>|t|) (Intercept) 8.550 1.785 4.790 2.56e-05 ***
x 2.212 1.129 1.959 0.0574 .
---Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1 1 Residual standard error: 3.57 on 38 degrees of freedom
Multiple R-Squared: 0.09175, Adjusted R-squared: 0.06785 F-statistic: 3.839 on 1 and 38 DF, p-value: 0.05745
Wir sehen, dass das linear Modell noch einen Achsenabschnitt fitted, und zus¨atzlich zu den Ergebnissen der aovdie Koeffizienten angibt. Diese sind bei aov mittels des Befehls fm1$coef abrufbar. Hingegen bietet der summary(fm2)-output keine Werte f¨ur die SS an. Diese sind mittels des Befehls anova(fm2) verf¨ugbar.
(Der output ist dann identisch mit der Anwendung der summary auf die aov-Funktion.) Insgesamt bietet also das linear Modell mehr Angaben als die ANOVA-Variante (Koeffizienten und ihre Fehler, R2-Werte, t-Test f¨ur Achsenabschnitt und Faktor), die aber nicht immer von Interesse sind.
5.3.2. Von der Regression zur ANOVA
Bei der Regression haben wir zwei kontinuierliche Variablen einander gegen¨ubergestellt. An-stelle der kontinuierlichen erkl¨arenden, k¨onnten wir aber auch eine zweistufige, also katego-rische, erkl¨arende Variable haben, kurz: einen Faktor. Etwa k¨onnten wir schlicht im Beispiel der thermal time in niedrige und hohe Temperaturen gruppieren, und diese beide einander gegen¨uberstellen. Wenn wir dies tun, wird aus der Regression ein faktorielles lineares Modell.
Dieses ist deckungsgleich mit einer oneway-ANOVA. Dabei teilen wir die Varianz im Daten-satz in die zwischen den zwei Gruppen (hohe, bzw. niedrige Temperatur) und die innerhalb der Gruppen. Deren Verh¨altnis gibt uns Aufschluss ¨uber den Einfluss des Faktors 5.3.1.
Damit haben wir gelernt, dass Regression und ANOVA eigentlich das gleiche lineare Modell zur Berechnung nutzen, und der einzige Unterschied die Form der erkl¨arenden Variablen ist.
Wenn wir im folgenden mehrere erkl¨arende Variablen in das Modell aufnehmen, so wird dies oft ein Misch aus kontinuierlichen und kategorischen Variablen sein. Deshalb ist es wichtig zu verstehen, dass die Behandlung beider prinzipiell gleich ist.
Am einfachsten kann man sich dies dadurch veranschaulichen, dass die Level eines Faktors (die Gruppen) bei Statistikprogrammen intern als 0 und 1 kodiert werden. Was sich dann anschließt, ist eine Regression durch die Punkte, wobei eben alle Werte der Antwortvariablen jeweils mit einem Wert 0 oder 1 der erkl¨arenden Variablen korrespondieren.
InRgibt es f¨ur die Regression nur die Funktion lm. F¨ur die ANOVA k¨onnen wir hingegen auch die Funktion aov benutzen. Im folgenden sei kurz dargestellt, dass diese (bei orthogonalen Designs) equivalent und austauschbar sind. Wir laden die Keimungsdaten und verwandeln die Variable temperature in einen Faktor temp, mit 2 leveln (< und > 17 C). Der plot ver¨andert sich entsprechend in einen boxplot.
> tt <- read.table("thermaltime.txt", header = T)
> attach(tt)
> temp <- as.factor(ifelse(temperature < 17, "LOW", "HIGH"))
> plot(thermal.time ~ temp)
> nm <- aov(thermal.time ~ temp)
> summary(nm)
Df Sum Sq Mean Sq F value Pr(>F) temp 1 29551.2 29551.2 56.099 3.934e-09 ***
Residuals 40 21070.8 526.8
---Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1 1
Im output erhalten wir die Angaben ¨uber die Summe der Abweichungsquadrate, die dem Faktor zukommt, dem F -Test auf diese sum of squares, sowie die Abweichungsquadrate der Residuen. Vergleichen wir dies mit einer linearen Regression:
> nm2 <- lm(thermal.time ~ temp)
> summary(nm2) Call:
lm(formula = thermal.time ~ temp) Residuals:
Min 1Q Median 3Q Max
-56.058 -10.931 -1.131 17.762 37.809 Coefficients:
Estimate Std. Error t value Pr(>|t|) (Intercept) 128.960 5.008 25.75 < 2e-16 ***
tempLOW -53.051 7.083 -7.49 3.93e-09 ***
---Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1 1 Residual standard error: 22.95 on 40 degrees of freedom Multiple R-Squared: 0.5838, Adjusted R-squared: 0.5734 F-statistic: 56.1 on 1 and 40 DF, p-value: 3.934e-09
Hier bekommen wir vor allem die Regressionskoeffizienten (mit Fehlern und t-Tests), und ganz unten auch die F -Statistik. Diese ist identisch mit der der Funktion aov. Beachte, dass der Faktor nicht als temp gef¨uhrt wird, sondern als tempLOW. D.h., wenn wir den Wert f¨ur LOW haben wollen, m¨ussen wir von dem intercept noch den angegeben Wert abziehen. Der intercept ist hingegen der Mittelwert von HIGH.
Auf jeden Fall k¨onnen wir aus beiden Modellen die jeweils fehlenden Informationen abfragen. So erhalten wir mittels anova(nm2) eine Tabelle identisch der aus der aov. Umgekehrt k¨onnen wir mit dem Befehl coef(nm)die Koeffizienten aus der aov abfragen.