Einfache lineare Regression (R)¶
These¶
Wir definieren zwei Variablen:
x ist die unabhängige Variable
y1 ist die abhängige.
Wir vermuten , dass y1 durch x “erklärt” wird:
x <- c(1,2,3,4,5,6,7,8,9,10)
y1<- c(1,1,2,5,6,6,7,10,9,11)
Ausgabe
cat("x = ", x, "\n")
cat("y1 = ", y1)
x = 1 2 3 4 5 6 7 8 9 10
y1 = 1 1 2 5 6 6 7 10 9 11
Was berechnet die Funktion lm?¶
lm steht für “lineares Model”. Genauer: Lineares Regressionsmodell.
Hier alle Werte auf eine Blick¶
w <-lm(y1~x)
summary(w)
Call: lm(formula = y1 ~ x) Residuals: Min 1Q Median 3Q Max -0.8909 -0.6818 -0.2091 0.6955 1.2909 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -0.60000 0.58621 -1.024 0.336 x 1.16364 0.09448 12.317 1.76e-06 * --- Signif. codes: 0 ‘*’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 0.8581 on 8 degrees of freedom Multiple R-squared: 0.9499, Adjusted R-squared: 0.9436 F-statistic: 151.7 on 1 and 8 DF, p-value: 1.757e-06
Nun betrachten wir nochmal einzelne Werte¶
R hat das Modell aus den Daten von x und y1 berechnet.
y1 modell = Intercept(Estimate) + x(Estimate) * x ist das Modell:
Also:
y1 modell = -0.600 + 1.16364 * x
Aber: dürfen wir dem Modell trauen?????
Dazu schaut man sich in der Zeile “F-statistic” den p-value an.
Benutzerdifinierte Funktion zur Berechnung des p-values¶
calc_p_value <- function (modelobject) {
if (class(modelobject) != "lm") stop("Not an object of class 'lm' ")
f <- summary(modelobject)$fstatistic
p <- pf(f[1],f[2],f[3],lower.tail=F)
attributes(p) <- NULL
return(p)
}
cat("p-value: ", calc_p_value(w))
p-value: 1.757321e-06
Statistische Lehrbücher sagen: p sollte kleiner als 0.05 sein.
Das ist der Fall. Es gibt also eine Beziehung zwischen x und y1.
Aber wie gut ist die Beziehung?¶
Dazu schauen wir zu “Multiple R-squared”.
sqrreg <- summary(w)$r.squared
cat("R-Squared", sqrreg)
R-Squared 0.9499072
Das ist super. Ich als Reviewer würde gleich denken. Da hat jemand gemogelt!!
Bei einer Regression mit nur einer unabhängigen Variablen (unser x) ist “Adjusted R-squared” unwichtig.
Wenn man ganz “brav” ist, schreibt man auch:
y1modell = (-0.6 +- 0.58521) + (1.16364 +- 0.09448) * x
plot(y1,x)

Eine zweite Messreihe.¶
x wie vorher
nun aber mit y2:
y2<-c(1,5,2,5,8,3,7,12,4,10)
Vorsichtshalber schauen wir uns erst den plot an:¶
plot(y2,x)

Naja, y2 scheint mit x auch größer zu werden. Schaun’ wir mal. was die Statistik sagt….
w2<-lm(y2~x)
summary(w2)
Call: lm(formula = y2 ~ x) Residuals: Min 1Q Median 3Q Max -4.351 -1.677 0.300 1.686 4.406 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 1.5333 1.9435 0.789 0.4529 x 0.7576 0.3132 2.419 0.0419 * --- Signif. codes: 0 ‘*’ 0.001 ‘’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 2.845 on 8 degrees of freedom Multiple R-squared: 0.4224, Adjusted R-squared: 0.3502 F-statistic: 5.85 on 1 and 8 DF, p-value: 0.04194
Kommentare zur Summray-Ausgabe¶
Wir scheun dieses Mal auch die Residuen an. Das sind die Abweichungen von der Modellgröße y2modell und den real gemessenen Daten in y2.
Diese sind viel größer als im Modell mit y1. Schon mal nicht gut.
p-value: bedenklich nahe an 0.05
Die Irrtumswahrscheinlichkeit liegt schon bei 10%!!! (Das Sternchen sagt uns das)
Kein gutes Zeichen!
Selbst wenn man das Modell als “trotzdem” vernünftig ansieht:
Multiple R-squared: 0.4224
Das ist miserabel.
Wenn Autoren eines Papers nicht noch weitere Gründe für ihr Modell y2modell haben, wäre das ein Grund zur Ablehnung der Arbeit!!