data > opinion

Tom Alby

Lineare Regression mit R: Wie wird das "Intercept" Estimate interpretiert?

2021-06-23


Aus dem Schulunterricht ist wahrscheinlich noch die folgende Formel bekannt: \[ y = m*x + b \] m ist hierbei die Steigung und b die Konstante. Ein ganz einfaches Beispiel: Ich bezahle für meinen Mobilfunkvertrag 15€ im Monat und für jedes Gigabyte Datenvolumen 1€. Dann sähe das Ergebnis so aus:

\[ Kosten Mobilfunkvertrag = 1€ * Anzahl Gigabyte + 15€ \] So weit so gut. Wenn die Funktion aber nicht bekannt ist, so kann, vereinfacht gesagt, die lineare Regressionsanalyse helfen, die Konstante und die Steigung zu ermitteln. Nehmen wir als Beispiel den Datensatz faithful aus R:

plot(faithful)

Wir sehen, dass es hier anscheinend einen Zusammenhang zwischen den Variablen gibt, diesen testen wir vorab. Wir nutzen den Korrelationskoeffizienten nach Pearson:

cor.test(faithful$eruptions,faithful$waiting)
## 
##  Pearson's product-moment correlation
## 
## data:  faithful$eruptions and faithful$waiting
## t = 34.089, df = 270, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.8756964 0.9210652
## sample estimates:
##       cor 
## 0.9008112

Wir beobachten eine starke Korrelation und erstellen nun das Modell, ausgehend von der Annahme, dass die Wartezeit einen Einfluss auf die Länge des Ausbruchs hat und nicht umgekehrt:

model <- lm(faithful$eruptions~faithful$waiting)
summary(model)
## 
## Call:
## lm(formula = faithful$eruptions ~ faithful$waiting)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.29917 -0.37689  0.03508  0.34909  1.19329 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      -1.874016   0.160143  -11.70   <2e-16 ***
## faithful$waiting  0.075628   0.002219   34.09   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.4965 on 270 degrees of freedom
## Multiple R-squared:  0.8115, Adjusted R-squared:  0.8108 
## F-statistic:  1162 on 1 and 270 DF,  p-value: < 2.2e-16

Die Residuen sind gleichmäßig verteilt, die Estimates haben beide p-Werte weit unter 0.05, und R-squared sagt uns, dass ca. 81% der Variabilität durch das Modell erklärt werden können. Das Intercept Estimate ist unsere Konstante, das faithful$waiting Estimate unsere Steigung. Das Ergebnis wird dann geplottet:

plot(faithful$waiting, faithful$eruptions)
abline(model)

Doch halt, warum sieht die Linie so aus, als ob sie nicht bei -1.87 die y-Achse berühren würde? Hier habe ich gestern mindestens eine halbe Stunde im Seminar rumgeeiert, bis mir aufgefallen ist, dass die y-Achse gar nicht bei 0 beginnt. Plottet man die ganze Achse, so sieht es schon besser aus:

plot(faithful$eruptions~faithful$waiting, xlim = c(0, 110),
     ylim = c(-2, 8))
abline(model)

Zwar berührt die Linie die y-Achse hier bei unter -2, aber der 0-Punkt auf der x-Achse ist auch weiter rechts. Noch mal mit einer blauen Linie auf dem 0-Punkt:

plot(faithful$eruptions~faithful$waiting, xlim = c(0, 110),
     ylim = c(-2, 8))
abline(model)
abline(v=0, col="blue")

Aber, wie soll man die Konstante hier überhaupt interpretieren? Es existiert ja keine negative Anzahl Minuten? Eine sehr gute Einführung, warum mit dem Intercept vorsichtig umgehen muss, bietet wieder einmal Jim.