II. Univariate Statistik I: Das Lineare Modell 57
6. Das Allgemeine Lineare Modell: Mehrere Erkl¨ arende Variablen 89
6.5. Kontinuierliche und kategoriale erkl¨arende Variablen
6.5.1. Interaktionen und ihre Interpretation
In den vorigen Beispielen waren die Interaktionen nicht signifikant. Um Interaktionen zwi-schen Variablen verstehen zu k¨onnen, sollten wir uns erst einmal ein entsprechendes Beispiel anschauen.
Dieses Beispiel kommt aus Dalgaard (2002, etwas modifiziert!). In einem Versuch wurde der Durchmesser von Tetrahymena-Zellen (ein S¨ußwasserziliat) in Kulturen unterschiedlicher Zellendichte und mit/ohne Glukosezusatz gemessen. Zun¨achst laden wir die Daten ein und plotten alle Variablen gegeneinander.
> ancova <- read.table("ancova.data.txt", header = T)
> attach(ancova)
> plot(ancova)
Wir sehen (Abb. 6.6), dass der Zusammenhang zwischen diameter und conc nicht-linear ist, und un-tersuchen deshalb im Weiteren logarithmierte Daten. Den Faktor mit oder ohne Glukose benennen wir entsprechend. Dann schauen wir uns die Daten f¨ur beide erkl¨arenden Variablen zusammen in einer Grafik an (Abbildung 6.7).
> glucose <- factor(glucose, labels = c("Ja", "Nein"))
> plot(diameter ~ log10(conc), pch = as.numeric(glucose))
> legend(4.2, 22, legend = c("Glukose", "keine Glukose"), pch = 2:1, + bty = "n")
> abline(lm(diameter ~ log10(conc)))
Jetzt benutzen wir den Befehl lm, um f¨ur beide Glukosekonzentrationen unterschiedliche Regressionen fitten und in die Abbildung einzuzeichnen.
> tethym.gluc <- ancova[glucose == "Ja", ]
> tethym.nogluc <- ancova[glucose == "Nein", ]
> lm.nogluc <- lm(diameter ~ log10(conc), data = tethym.nogluc)
> lm.gluc <- lm(diameter ~ log10(conc), data = tethym.gluc)
> abline(lm.nogluc, lty = 2)
> abline(lm.gluc, lty = 2)
1 e+04 2 e+04 5 e+04 1 e+05 2 e+05 5 e+05
21222324252627
conc
diameter
Glukose keine Glukose
Abbildung 6.7.: Zelldurchmesser von Tetrahymena in Abh¨angigkeit von der logarithmierten Zellendichte, f¨ur Kulturen mit und ohne Glukose. Die durchgezogene Linie stellt die Regression f¨ur alle Datenpunkte dar, die gestrichelten f¨ur die beiden Glukose-Behandlungen separat.
Aber unterscheiden sich diese Regressionen denn? Zur Beantwortung dieser Frage betrachten wir die Inter-aktion zwischen log10(conc) und glucose:
> fm3 <- aov(diameter ~ log10(conc) * glucose)
> summary(fm3)
Df Sum Sq Mean Sq F value Pr(>F) log10(conc) 1 115.217 115.217 530.7983 < 2e-16 ***
glucose 1 53.086 53.086 244.5652 < 2e-16 ***
log10(conc):glucose 1 1.548 1.548 7.1296 0.01038 *
Residuals 47 10.202 0.217
---Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1 1
In der Tat liegt hier eine signifikante Interaktion zwischen Zellenkonzentration und Glukosebehandlung vor.
Lassen wir uns um die Koeffizienten zu erhalten, auch noch das lineare Modell ausgeben:
> summary(lm(fm3)) Call:
lm(formula = fm3) Residuals:
Min 1Q Median 3Q Max
-1.2794 -0.1912 0.0118 0.2656 0.9552 Coefficients:
Estimate Std. Error t value Pr(>|t|) (Intercept) 37.5594 0.7138 52.618 <2e-16 ***
log10(conc) -2.8610 0.1444 -19.820 <2e-16 ***
glucoseNein -1.1224 1.2187 -0.921 0.3617
log10(conc):glucoseNein 0.6621 0.2479 2.670 0.0104 *
---Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1 1
4.0 4.5 5.0 5.5
21222324252627
a
Zelldurchmesser
log10(Zellkonzentration)
4.0 4.5 5.0 5.5
21222324252627
b
4.0 4.5 5.0 5.5
21222324252627
c
4.0 4.5 5.0 5.5
21222324252627
d
Abbildung 6.8.: Zelldurchmesser von Tetrahymena in Abh¨angigkeit von der logarithmier-ten Zellendichte, f¨ur Kulturen mit und ohne Glukose. Die Linien stellt die Regressionen f¨ur das jeweilige Modell dar: a) nur Achsenabschnitt, b) nur log10(Zellendichte), c) nur Glukoseeffekt, d) log10(Zellendichte) plus Gluko-seeffekt. Die Interaktion von Zellendichte und Glukose ist in Abbildung 6.7 dargestellt. Gestrichelte Linie sind ohne, durchgezogene mit Glukose.
Residual standard error: 0.4659 on 47 degrees of freedom Multiple R-Squared: 0.9433, Adjusted R-squared: 0.9397 Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1 1
Was bedeutet eine signifikante Interaktion zwischen einer kategorischen und einer konti-nuierlichen erkl¨arenden Variablen? Sie bedeutet schlicht, dass die Steigung der Ko-Variablen (d.h. der kontinuierlichen Variablen) f¨ur die Level der kategorischen Variablen signifikant unterschiedlich ist.
Schauen wir uns obige lm-Tabelle an: Zun¨achst haben wir einen signifikanten Achsenab-schnitt ((Intercept)), der dadurch zustandekommt, dass die Werte f¨ur den Zelldurchmesser nicht um 0 zentriert sind (Abbildung 6.8a). Dies entspricht einer Regression in der lediglich ein Achsenabschnitt gefittet wird (Der par(mfrow(...))-Befehl l¨asst uns vier Graphiken in eine Abbildung bringen; mit dem mtext-Befehl erzeugen wir die Beschriftung der x- und y-Achsen.):
> par(mfrow = c(2, 2))
> bsp1 <- lm(diameter ~ 1)
> plot(diameter ~ log10(conc), pch = as.numeric(glucose), ylab = "")
> abline(h = coef(bsp1))
> text(5.7, 27, "a", cex = 2)
> mtext("Zelldurchmesser", side = 2, line = 0, outer = T)
> mtext("log10(Zellkonzentration)", side = 1, line = 0, outer = T)
Als n¨achstes sehen wir, dass der Effekt der Zellkonzentration signifikant ist (log10(conc), Abbildung 6.8b). Also ist der Zelldurchmesser abh¨angig von der Zellkonzentration. Dies ent-spricht einem Modell mit Achsenabschnitt und Zellkonzentration:
> bsp2 <- lm(diameter ~ log10(conc))
> plot(diameter ~ log10(conc), pch = as.numeric(glucose), ylab = "")
> abline(bsp2)
> text(5.7, 27, "b", cex = 2)
Der Effekt der Glukose ist ebenfalls signifikant (glucoseNein, Abbildung 6.8c)). Dies be-deutet, dass Zellen in glukosehaltigen Kulturen nicht signifikant gr¨oßer werden. Unser Modell enth¨alt nun neben dem Achsenabschnitt noch den Glukoseeffekt:
> bsp3 <- lm(diameter ~ glucose)
> plot(diameter ~ log10(conc), pch = as.numeric(glucose), ylab = "")
> abline(h = coef(bsp3)[1] + coef(bsp3)[2])
> abline(h = coef(bsp3)[1], lty = 2)
> text(5.7, 27, "c", cex = 2)
Im n¨achsten Schritt f¨ugen wir sowohl den Zellendichte-Term als auch den Glukoseeffekt ein, und zwar additiv:
> bsp4 <- lm(diameter ~ log10(conc) + glucose)
> plot(diameter ~ log10(conc), pch = as.numeric(glucose), ylab = "")
> abline(a = bsp4$coef[1], b = bsp4$coef[2], lty = 1)
> abline(a = (bsp4$coef[1] + bsp4$coef[3]), b = bsp4$coef[2], lty = 2)
> text(5.7, 27, "d", cex = 2)
> par(mfrow = c(1, 1))
Und schlussendlich ist die Interaktion signifikant, d.h. der Effekt der Zellendichte ist unter-schiedlich in Kulturen mit und ohne Glukose (Abb. 6.7). Somit hat Glukose dann doch einen Effekt, aber dieser ist nur dann bemerkbar, wenn wir die Zellendichte ber¨ucksichtigen.
Anders formuliert stellt der Test der Glukosebehandlung einen Test auf unterschiedliche Achsenabschnitte der Zellendichte-Regressionsgeraden dar. Ist er signifikant, so sind die Re-gressionsgeraden parallel, aber nicht identisch (Abb. 6.8d). Der Interaktionseffekt hingegen stellt einen Test auf Unterschiedlichkeit der Steigung der Regressiongeraden dar. Ist er signi-fikant, so haben zwar beide den gleichen Achsenabschnitt, aber unterschiedliche Steigungen.
Sind sowohl die kategoriale Variable als auch die Interaktion signifikant, so liegen sowohl unterschiedliche Achsenabschnitte und Steigungen vor (Abb. 6.7).
Schlussendlich wollen wir aber auch noch die Geradengleichungen f¨ur diese Regressionen aus der Tabelle ablesen k¨onnen. Wie geht das? Zun¨achst erinnern wir uns, dass die Geradenglei-chung aus einem y-Achsenabschnitt und der Steigung besteht. Desweiteren vergegenw¨artigen wir uns nochmal, dass der Effekt glucoseNein und log10(conc):glucoseNein in der oberen summary den Unterschied zum Level glucoseJa bzw. log10(conc) darstellen. Dann ergibt sich die Geradengleichung f¨ur die glucoseJa-Regression als:
(Intercept) + estlog10(conc)· log10(conc) = 37.6 − 2.9 · log10(conc)
F¨ur die glucoseJa-Regression werden Achsenabschnitt und Steigung um den Sch¨atzwert glucoseNeinbzw. log10(conc):glucoseNein ver¨andert:
((Intercept) + estglucoseN ein) + (estlog10(conc)+ estlog10(conc):glucoseN ein) · log10(conc)
= (37.6 − 1.1) + (−2.9 + 0.7) · log10(conc)
4.0 4.5 5.0 5.5 21
22 23 24 25 26 27
log10(conc)
Zelldurchmesser
Abbildung 6.9.: Zelldurchmesser von Tetrahymena in Abh¨angigkeit von der logarithmierten Zellendichte, f¨ur Kulturen mit (Dreiecke) und ohne Glukose (Punkte). Die Linien stellt die Regressionen f¨ur das jeweilige Modell dar, jeweils mit 95%-Konfidenzinterval.
Mit Hilfe dieser Logik haben wir ja auch gerade die Geradengleichung in die Abbildung eingezeichnet.
W¨ahrend Abbildung 6.7 n¨utzlich ist, um zu verstehen, was die unterschiedlichen Modelle bedeuten, und was eine Interaktion ist, widerspricht es doch der guten Praxis, Regressionsli-nien ¨uber den Wertebereich der Datenpunkte hinaus zu verl¨angern. Außerdem w¨are sinnvoll, auch die Konfidenzintervalle f¨ur diese Regression abbilden zu k¨onnen. Da die Mathematik hinter der Berechnung der Konfidenzintervalle hier zu weit f¨uhren w¨urde, beschr¨anken wir uns auf den R-code f¨ur das Einf¨ugen einer Linie ¨uber den Wertebereich sowie deren Konfi-denzintervalle13.
Wir beginnen mit dem Plot der Datenpunkte, benutzen dann das Modell mit der Interaktion (fm3), um die Regressionsgeraden und ihre Konfidenzintervalle zu plotten. Dazu berechnen wir f¨ur neue Datenpunkte im Wertebereich den Vorhersagewert nebst Konfidenzinterval. Mit der Funktion matlines k¨onnen wir dann mehrere Linien auf einmal in die Abbildung legen. Diese Prozedur machen wir einmal f¨ur die eine Gerade, dann nochmals f¨ur die andere. Die (rein optische) Wirkung der Optionen las und tcl kann man unter
?parnachlesen!
> plot(diameter ~ log10(conc), pch = as.numeric(glucose), ylab="Zelldurchmesser", + las=1, tcl=0.5)
> newconc <- seq(min(conc), max(conc), len=50)
> # Ja-Gerade:
> newdat.Ja <- data.frame("conc"=newconc, glucose=c("Ja"))
> pred.Ja <- predict(fm3, newdata=newdat.Ja, interval="confidence")
> matlines(log10(newdat.Ja$conc), pred.Ja, lty=c(1,2,2), lwd=c(2,1,1), col="grey30")
> # Nein-Gerade:
13Es gibt unterschiedliche Konfidenzintervalle! Wir beschr¨anken uns hier auf den Konfidenzbereich, mit dem die Daten die Sch¨atzung der Regressionsgerade zulassen (Option interval=’confidence’). Dar¨uberhinaus gibt es ein (gr¨oßeres) Konfidenzintervall, dass den Bereich angibt, in den mit 95%-iger Wahrscheinlichkeit neue Werte fallen w¨urden (Option interval=’prediction’)(Abb. 6.9).
> newdat.Nein <- data.frame("conc"=newconc, glucose=c("Nein"))
> pred.Nein <- predict(fm3, newdata=newdat.Nein, interval="confidence")
> matlines(log10(newdat.Nein$conc), pred.Nein, lty=c(1,2,2), lwd=c(2,1,1), + col="grey70")