Courtesy of pxhere

Regression

Kernfragen dieser Lehreinheit


Vorbereitende Schritte

Zu Beginn laden wir wie gewohnt den Datensatz und verteilen die relevanten Labels. Beachten Sie, dass diese Befehle bereits angewendet wurden. Wenn Sie die veränderten Daten abgespeichert oder noch aktiv haben, sind die folgenden Befehle natürlich nicht nötig.

#### Was bisher geschah: ----

# Daten laden
load(url('https://pandar.netlify.app/post/fb22.rda'))  

# Nominalskalierte Variablen in Faktoren verwandeln
fb22$geschl_faktor <- factor(fb22$geschl,
                             levels = 1:3,
                             labels = c("weiblich", "männlich", "anderes"))
fb22$fach <- factor(fb22$fach,
                    levels = 1:5,
                    labels = c('Allgemeine', 'Biologische', 'Entwicklung', 'Klinische', 'Diag./Meth.'))
fb22$ziel <- factor(fb22$ziel,
                        levels = 1:4,
                        labels = c("Wirtschaft", "Therapie", "Forschung", "Andere"))

fb22$wohnen <- factor(fb22$wohnen, 
                      levels = 1:4, 
                      labels = c("WG", "bei Eltern", "alleine", "sonstiges"))

fb22$ort <- factor(fb22$ort, levels=c(1,2), labels=c("FFM", "anderer"))

fb22$job <- factor(fb22$job, levels=c(1,2), labels=c("nein", "ja"))
# Skalenbildung

fb22$prok2_r <- -1 * (fb22$prok2 - 5)
fb22$prok3_r <- -1 * (fb22$prok3 - 5)
fb22$prok5_r <- -1 * (fb22$prok5 - 5)
fb22$prok7_r <- -1 * (fb22$prok7 - 5)
fb22$prok8_r <- -1 * (fb22$prok8 - 5)

# Prokrastination
fb22$prok_ges <- fb22[, c('prok1', 'prok2_r', 'prok3_r',
                          'prok4', 'prok5_r', 'prok6',
                          'prok7_r', 'prok8_r', 'prok9', 
                          'prok10')] |> rowMeans()
# Naturverbundenheit
fb22$nr_ges <-  fb22[, c('nr1', 'nr2', 'nr3', 'nr4', 'nr5',  'nr6')] |> rowMeans()
fb22$nr_ges_z <- scale(fb22$nr_ges) # Standardisiert

# Weitere Standardisierungen
fb22$nerd_std <- scale(fb22$nerd)
fb22$neuro_std <- scale(fb22$neuro)

Lineare Regression

Nachdem wir mit der Korrelation mit der gemeinsamen Betrachtung von zwei Variablen begonnen haben, werden wir jetzt lineare Modelle erstellen, uns Plots - inklusive Regressionsgerade - für Zusammenhänge anzeigen lassen und Determinationskoeffizienten berechnen. Hierzu betrachten wir folgende Fragestellung:

  • Zeigt die Extraversion (extra) aus dem Selbstbericht einen linearen Zusammenhang mit der selbst eingeschätzten “Nerdiness” (nerd)?

Voraussetzungen:

  1. Linearität: Zusammenhang muss linear sein \(\rightarrow\) Grafische Überprüfung (Scatterplot)
  2. Varianzhomogenität (Homoskedastizität) der Fehler: der Fehler jedes Wertes der UV hat annährend die gleiche Varianz
  3. Normalverteilung der Fehlervariablen
  4. Unabhängigkeit der Fehler

Die Voraussetzungen 2-4 können erst geprüft werden, nachdem das Modell schon gerechnet wurde, weil sie sich auf die Fehler (Residuen: Differenz aus beobachtetem und vorhergesagtem Wert für y) beziehen!

Deshalb erstellen wir zunächst das Regressionsmodell - wir werden weiter unten diesen Befehl - die Funktion lm() genauer besprechen, für’s erste ist wichtig zu wissen, dass die relevanten Ergebnisse des Regressionsmodells im Objekt lin_mod abgespeichert werden.

lin_mod <- lm(nerd ~ extra, fb22)                  #Modell erstellen und Ergebnisse im Objekt lin_mod ablegen

zu 1. Linearität: Zusammenhang muss linear sein \(\rightarrow\) Grafische Überprüfung (Scatterplot)

plot(fb22$extra, fb22$nerd, xlab = "Extraversion", ylab = "Nerdiness", 
     main = "Zusammenhang zwischen Extraversion und Nerdiness", xlim = c(0, 6), ylim = c(1, 5), pch = 19)
lines(loess.smooth(fb22$extra, fb22$nerd), col = 'blue')    #beobachteter, lokaler Zusammenhang

  • pch verändert die Darstellung der Datenpunkte
  • xlim und ylim veränderen die X- bzw. Y-Achse
  • mit cex könnte man noch die Größe der Datenpunkte anpassen

Interpretation: Eine lineare Beziehung scheint den Zusammenhang aus extra und nerd akkurat zu beschreiben. Ein bspw. u-förmiger Zusammenhang ist nicht zu erkennen.

zu Voraussetzungen 2-4:

Mithilfe der Ergebnisse aus dem Regressionsmodell im Objekt lin_mod können wir nun überprüfen, ob die weiteren Voraussetzungen der linearen Regression erfüllt sind.

par(mfrow = c(2, 2)) #vier Abbildungen gleichzeitig
plot(lin_mod)

par(mfrow = c(1, 1)) #wieder auf eine Abbildung zurücksetzen

Interpretation der Abbildungen:

  • Residuals vs. Fitted: geeignet um Abweichungen von der Linearität und Verletzungen der Homoskedastizität aufzudecken \(\rightarrow\) soll möglichst unsystematisch aussehen, rote Anpassungslinie (y-MW bedingt auf X) verläuft parallel zur x-Achse
  • Normal Q-Q: Zeigt Annäherung der Normalverteilung durch Residuen \(\rightarrow\) Punkte sollen auf die Diagonalen liegen
  • Scale-Location: Prüfung der Homoskedastizität, zeigt Zusammenhang zwischen Streuung der Residuen und vorhergesagten Werten \(\rightarrow\) rote Anpassungslinie (y-MW bedingt auf X) sollte parallel zur x-Achse verlaufen
  • Residuals vs. Leverage: Einflussreiche Datenpunkte liegen „weit draußen“, außerhalb einer der grau gestrichelten Linie. Dies trifft auf keine Beobachtung in unserer Stichprobe zu (die grau gestrichelte Linie ist in dieser Abbildung nicht zu sehen; kein Punkt liegt außerhalb dieses Bereichs) \(\rightarrow\) Somit lassen sich hier keine potentiell problematischen einflussreichen Datenpunkte identifizieren

In diesem Fall ist alles weitestgehend erfüllt. Da wir uns hier im Rahmen einer grafischen Überprüfung befinden, ist es natürlich schwer direkte Richtlinien festzulegen. Die Fähigkeit zur Einordnung einer Verletzung stärkt sich mit der Erfahrung - also der Betrachtung im Rahmen von sehr vielen Analysen. Wir verweisen hier zur Veranschaulich auch auf ein Beispiel mit starken Verletzungen.

Alternativer Weg zur Prüfung der Normalverteilung der Residuen

Da wir uns die Residuen (also die Fehler in der Vorhersage) direkt vom Modell ausgeben lassen können, können wir zur Überprüfung ihrer Verteilung auch unsere schon bekannten Befehle nutzen. Hier wird nochmal ein Histogramm und ein QQ-Plot gezeichnet, weiterhin wird die inferenzstatistische Testung durchgeführt.

res1 <- residuals(lin_mod)   #Residuen speichern 

#QQ
qqnorm(res1)
qqline(res1)

#Histogramm
hist(res1, prob = T,ylim = c(0,1))    #prob: TRUE, da wir uns auf die Dichte beziehen
curve(dnorm(x, 
            mean = mean(res1, na.rm = T), 
            sd = sd(res1, na.rm = T)),
      main = "Histogram of residuals", ylab = "Residuals",
      col = "blue", add = T)   #add: soll Kurve in Grafik hinzugefügt werden?

#Shapiro
shapiro.test(res1)
## 
## 	Shapiro-Wilk normality test
## 
## data:  res1
## W = 0.99446, p-value = 0.8122

Die Plots weisen auf keine Verletzung der Annahme hin. Auch der p-Wert ist größer als .05 \(\rightarrow\) Die Nullhypothese konnte nicht verworfen werden und wird beibehalten: Für die Residuen wird also Normalverteilung angenommen. Somit sind alle Voraussetzungen zur Durchführung der linearen Regression erfüllt.

Modellschätzung

Die Modellgleichung für die lineare Regression, wie sie in der Vorlesung besprochen wurde, lautet: \(y_m = b_0 + b_1 x_m + e_m\)

In R gibt es eine interne Schreibweise, die sehr eng an diese Form der Notation angelehnt ist. Mit ?formula können Sie sich detailliert ansehen, welche Modelle in welcher Weise mit dieser Notation dargestellt werden können. R verwendet diese Notation für (beinahe) alle Modelle, sodass es sich lohnt, sich mit dieser Schreibweise vertraut zu machen. Die Kernelemente sind im Fall der linearen Regression

y ~ 1 + x

Diese Notation enthält fünf Elemente:

  • y: die abhängige Variable
  • ~: die Notation für “regrediert auf” oder “vorhergesagt durch”
  • 1: die Konstante 1
  • +: eine additive Verknüpfung der Elemente auf der rechten Seite der Gleichung
  • x: eine unabhängige Variable

Die Notation beschreibt also die Aussage “\(y\) wird regrediert auf die Konstante \(1\) und die Variable \(x\)”. Die zu schätzenden Parameter \(b_0\) und \(b_1\) werden in dieser Notation nicht erwähnt, weil sie uns unbekannt sind.

R geht generell davon aus, dass immer auch der Achsenabschnitt \(b_0\) geschätzt werden soll, sodass y ~ x ausreichend ist, um eine Regression mit einem Achsenabschnitt zu beschreiben. Wenn das Intercept unterdrückt werden soll, muss das mit y ~ 0 + x explizit gemacht werden.

In unserem Beispiel ist \(x\) die Extraversion (extra) und \(y\) die Nerdiness (nerd). Um das Modell zu schätzen, wird dann der lm() (für “linear model”) Befehl genutzt:

lm(formula = nerd ~ 1 + extra, data = fb22)
## 
## Call:
## lm(formula = nerd ~ 1 + extra, data = fb22)
## 
## Coefficients:
## (Intercept)        extra  
##      3.8554      -0.2156

So werden die Koeffizienten direkt ausgegeben. Wir haben das Modell bereits abgespeichert, da wir es für die Überprüfung der Voraussetzungen benötigt haben. Hierzu muss das Modell einem Objekt zugewiesen werden. Hier in verkürzter Schreibweise (wir lassen die 1 als Repräsentant für den Achsenabschnitt weg):

lin_mod <- lm(nerd ~ extra, fb22)

Aus diesem Objekt können mit coef() die geschätzten Koeffizienten extrahiert werden:

coef(lin_mod)
## (Intercept)       extra 
##   3.8553535  -0.2156064

Falls man sich unsicher ist, wie dieses Modell zustande gekommen ist, kann man dies ausdrücklich erfragen:

formula(lin_mod)
## nerd ~ extra

Wie wir bereits weiter oben gesehen haben, werden mit dem Befehl lm() auch automatisch immer die Residuen (\(e_m\)) geschätzt, die mit residuals() (oder alternativ: resid()) abgefragt werden können.

residuals(lin_mod)
##         1897         1898         1899         1900         1901         1902 
## -0.595769219  0.953170506  1.394307035  0.173738771  0.850329183  0.458132379 
##         1903         1904         1905         1906         1907         1908 
##  0.570897447 -0.434064425  0.668776898  0.389345163 -0.424140680  0.129760918 
##         1909         1910         1912         1914         1915         1916 
##  1.173738771  0.007072104 -0.541867621 -0.046829494 -0.095769219  0.070897447 
##         1917         1918         1919         1920         1921         1922 
##  0.840405437 -0.875200955  0.065935575  0.394307035 -1.257474013  0.119837173 
##         1923         1924         1925         1926         1927         1928 
##  0.345367310  0.394307035 -0.149670817  0.678700643  0.232602241  0.232602241 
##         1929         1930         1931         1932         1934         1935 
## -0.051791367  0.453170506  0.060973702  0.619837173 -1.439026298 -0.321299357 
##         1936         1937         1938         1939         1940         1941 
## -0.541867621  0.345367310  0.737564114  0.345367310  0.178700643  1.070897447 
##         1942         1943         1944         1945         1946         1947 
##  0.516995849 -0.375200955 -0.257474013  0.948208633  0.291465712  0.453170506 
##         1948         1949         1950         1951         1953         1954 
## -0.811375611  1.124799045  0.173738771 -0.546829494  0.119837173 -1.100731092 
##         1955         1956         1957         1958         1959         1960 
##  0.458132379  1.007072104  0.340405437  0.056011829 -0.257474013  0.963094251 
##         1961         1962         1963         1964         1965         1966 
## -1.262435886  0.286503839 -0.164556435 -0.159594563 -1.105692965  0.056011829 
##         1967         1968         1969         1970         1971         1972 
##  0.904230781  0.512033977  0.232602241  0.345367310 -0.600731092 -0.385124700 
##         1974         1975         1976         1977         1978         1979 
## -0.331223102 -0.380162827 -0.375200955  0.012033977  0.012033977 -0.272359631 
##         1980         1981         1982         1985         1986         1987 
## -0.434064425 -1.213496161 -0.595769219 -1.492927896  0.232602241  0.301389457 
##         1988         1989         1990         1991         1992         1994 
## -0.767397759 -0.046829494  0.296427585  0.178700643 -0.875200955  0.512033977 
##         1995         1996         1997         1998         1999         2000 
## -0.100731092  0.237564114 -0.154632690  0.070897447 -0.605692965  1.781541967 
##         2001         2002         2003         2004         2006         2008 
##  0.012033977 -1.041867621 -0.654632690 -0.321299357 -0.267397759 -0.992927896 
##         2009         2011         2012         2013         2017         2018 
## -0.046829494  0.678700643 -0.713496161  0.178700643 -0.713496161 -0.708534288 
##         2021         2022         2023         2024         2027         2028 
##  0.516995849  0.173738771 -0.159594563  0.953170506  0.463094251 -1.095769219 
##         2031         2032         2034         2035         2036         2039 
##  0.512033977 -0.036905749 -0.600731092 -0.429102553  0.012033977 -0.316337484 
##         2040         2041         2042         2043         2044         2045 
## -1.036905749 -0.262435886  0.399268908 -0.659594563 -0.659594563 -0.370239082 
##         2046         2047         2048         2049         2050         2051 
##  0.129760918 -1.105692965  0.512033977  0.345367310 -0.041867621  1.453170506 
##         2052         2054         2058         2060         2061         2062 
##  0.619837173  0.796427585 -0.434064425  0.178700643 -0.487966023 -0.326261229 
##         2063         2065         2066         2067         2068         2069 
##  1.129760918  0.286503839  1.232602241 -0.659594563 -0.546829494  0.237564114 
##         2070         2071         2072         2073         2074         2075 
##  0.737564114 -0.487966023 -0.551791367 -1.375200955  0.237564114  0.619837173 
##         2076         2077         2078         2079         2080         2081 
##  0.512033977  0.060973702 -0.605692965 -0.041867621  0.399268908  0.458132379 
##         2082         2083         2084 
## -0.041867621 -0.100731092 -0.885124700

Diese können auch als neue Variable im Datensatz angelegt werden und hätten dort die Bedeutung des “Ausmaßes an Nerdiness, das nicht durch Extraversion vorhergesagt werden kann” - also die Differenz aus vorhergesagtem und tatsächlich beobachtetem Wert der y-Variable (Nerdiness).

fb22$res <- residuals(lin_mod)

Die folgenden Ergebnisse aus lin_mod werden wir verwenden. In lin_mod$coef stehen die Regressionskoeffizienten \(b_0\) unter (Intercept) zur Konstanten gehörend und \(b_1\) unter dem Namen der Variable, die wir als Prädiktor nutzen. In diesem Fall also extra. Die Regressionsgleichung hat daher die folgende Gestalt: \(y_i = 3.86 + -0.22 \cdot x + e_i\).

Regressionsgleichung (unstandardisiert):

\[\hat{y} = b_0 + b_1*x_m\] \[\hat{y} = 3.86 + (-0.22)*x_m\]

Interpretation der Regressionskoeffizienten:

  • b0 (Regressionsgewicht): beträgt die Extraversion 0, wird eine Nerdiness von 3.86 vorhergesagt
  • b1 (Regressionsgewicht): mit jeder Steigerung der Extraversion um 1 Einheit wird eine um 0.22 Einheiten niedrigere (!) Nerdiness vorhergesagt

Vorhergesagte Werte

Die vorhergesagten Werten \(\hat{y}\) können mit predict() ermittelt werden:

predict(lin_mod)
##     1897     1898     1899     1900     1901     1902     1903     1904 
## 3.262436 3.046829 2.939026 2.992928 3.316337 3.208534 3.262436 3.100731 
##     1905     1906     1907     1908     1909     1910     1912     1914 
## 2.831223 2.777322 3.424141 3.370239 2.992928 2.992928 3.208534 3.046829 
##     1915     1916     1917     1918     1919     1920     1921     1922 
## 3.262436 3.262436 2.992928 3.208534 3.100731 2.939026 3.424141 3.046829 
##     1923     1924     1925     1926     1927     1928     1929     1930 
## 3.154633 2.939026 3.316337 3.154633 3.100731 3.100731 2.885125 3.046829 
##     1931     1932     1934     1935     1936     1937     1938     1939 
## 2.939026 3.046829 2.939026 3.154633 3.208534 3.154633 3.262436 3.154633 
##     1940     1941     1942     1943     1944     1945     1946     1947 
## 3.154633 3.262436 3.316337 3.208534 3.424141 2.885125 3.208534 3.046829 
##     1948     1949     1950     1951     1953     1954     1955     1956 
## 3.478042 3.208534 2.992928 3.046829 3.046829 3.100731 3.208534 2.992928 
##     1957     1958     1959     1960     1961     1962     1963     1964 
## 2.992928 2.777322 3.424141 3.370239 3.262436 3.046829 2.831223 2.992928 
##     1965     1966     1967     1968     1969     1970     1971     1972 
## 2.939026 2.777322 3.262436 3.154633 3.100731 3.154633 3.100731 2.885125 
##     1974     1975     1976     1977     1978     1979     1980     1981 
## 2.831223 3.046829 3.208534 3.154633 3.154633 2.939026 3.100731 3.046829 
##     1982     1985     1986     1987     1988     1989     1990     1991 
## 3.262436 2.992928 3.100731 3.531944 3.100731 3.046829 3.370239 3.154633 
##     1992     1994     1995     1996     1997     1998     1999     2000 
## 3.208534 3.154633 3.100731 3.262436 3.154633 3.262436 2.939026 2.885125 
##     2001     2002     2003     2004     2006     2008     2009     2011 
## 3.154633 3.208534 3.154633 3.154633 3.100731 2.992928 3.046829 3.154633 
##     2012     2013     2017     2018     2021     2022     2023     2024 
## 3.046829 3.154633 3.046829 3.208534 3.316337 2.992928 2.992928 3.046829 
##     2027     2028     2031     2032     2034     2035     2036     2039 
## 3.370239 3.262436 3.154633 3.370239 3.100731 3.262436 3.154633 3.316337 
##     2040     2041     2042     2043     2044     2045     2046     2047 
## 3.370239 3.262436 3.100731 2.992928 2.992928 3.370239 3.370239 2.939026 
##     2048     2049     2050     2051     2052     2054     2058     2060 
## 3.154633 3.154633 3.208534 3.046829 3.046829 3.370239 3.100731 3.154633 
##     2061     2062     2063     2065     2066     2067     2068     2069 
## 3.154633 2.992928 3.370239 3.046829 3.100731 2.992928 3.046829 3.262436 
##     2070     2071     2072     2073     2074     2075     2076     2077 
## 3.262436 3.154633 2.885125 3.208534 3.262436 3.046829 3.154633 2.939026 
##     2078     2079     2080     2081     2082     2083     2084 
## 2.939026 3.208534 3.100731 3.208534 3.208534 3.100731 2.885125

Per Voreinstellung werden hier die vorhergesagten Werte aus unserem ursprünglichen Datensatz dargestellt. predict() erlaubt uns aber auch Werte von “neuen” Beobachtungen vorherzusagen. Nehmen wir an, wir würden die Extraversion von 5 neuen Personen beobachten (sie haben - vollkommen zufällig - die Werte 1, 2, 3, 4 und 5) und diese Beobachtungen in einem neuem Datensatz extra_neu festhalten:

extra_neu <- data.frame(extra = c(1, 2, 3, 4, 5))

Anhand unseres Modells können wir für diese Personen auch ihre Nerdiness vorhersagen, obwohl wir diese nicht beobachtet haben:

predict(lin_mod, newdata = extra_neu)
##        1        2        3        4        5 
## 3.639747 3.424141 3.208534 2.992928 2.777322

Damit diese Vorhersage funktioniert, muss im neuen Datensatz eine Variable mit dem Namen extra vorliegen.

Streu-Punktdiagramm mit Regressionsgerade

Das Streudiagramm haben wir zu Beginn schon abbilden lassen. Hier kann zusätzlich noch der geschätzte Zusammenhang zwischen den beiden Variablen als Regressiongerade eingefügt werden. Hierzu wird der Befehl plot() durch abline() ergänzt:

# Scatterplot zuvor im Skript beschrieben
plot(fb22$extra, fb22$nerd, 
  xlim = c(0, 6), ylim = c(1, 5), pch = 19)
lines(loess.smooth(fb22$extra, fb22$nerd), col = 'blue')    #beobachteter, lokaler Zusammenhang
# Ergebnisse der Regression als Gerade aufnehmen
abline(lin_mod, col = 'red')

Standardisierte Regressionsgewichte

Bei einer Regression (besonders wenn mehr als ein Prädiktor in das Modell aufgenommen wird) kann es sinnvoll sein, die standardisierten Regressionskoeffizienten zu betrachten, um die Erklärungs- oder Prognosebeiträge der einzelnen unabhängigen Variablen (unabhängig von den bei der Messung der Variablen gewählten Einheiten) miteinander vergleichen zu können, z. B. um zu sehen, welche Variable den größten Beitrag zur Prognose der abhängigen Variable leistet. Außerdem ist es hierdurch möglich, die Ergebnisse zwischen verschiedenen Studien zu vergleichen, die nerd und extra gemessen haben, jedoch in unterschiedlichen Einheiten. Durch die Standardisierung werden die Regressionskoeffizienten vergleichbar. Die Variablen werden mit scale() standardisiert (z-Transformation; Erwartungswert gleich Null und die Varianz gleich Eins gesetzt). Mit lm() wird das Modell berechnet.

s_lin_mod <- lm(scale(nerd) ~ scale(extra), fb22)
s_lin_mod
## 
## Call:
## lm(formula = scale(nerd) ~ scale(extra), data = fb22)
## 
## Coefficients:
##  (Intercept)  scale(extra)  
##    8.719e-17    -2.335e-01

Determinationskoeffizient \(R^2\)

Der Determinationskoeffizient \(R^2\) ist eine Kennzahl zur Beurteilung der Anpassungsgüte einer Regression. Anhand dessen kann bewertet werden, wie gut Messwerte zu einem Modell passen. Das Bestimmtheitsmaß ist definiert als der Anteil, der durch die Regression erklärten Quadratsumme an der zu erklärenden totalen Quadratsumme. Es gibt somit an, wie viel Streuung in den Daten durch das vorliegende lineare Regressionsmodell „erklärt“ werden kann. Bei einer einfachen Regression entspricht \(R^2\) dem Quadrat des Korrelationskoeffizienten.

Um \(R^2\) zu berechnen, gibt es verschiedene Möglichkeiten.

Für die Berechnung per Hand werden die einzelnen Varianzen benötigt:

\(R^2 = \frac{s^2_{\hat{Y}}}{s^2_{Y}} = \frac{s^2_{\hat{Y}}}{s^2_{\hat{Y}} + s^2_{E}}\)

# Anhand der Varianz von lz
var(predict(lin_mod)) / var(fb22$nerd, use = "na.or.complete")
## [1] 0.05451483
# Anhand der Summe der Varianzen
var(predict(lin_mod)) / (var(predict(lin_mod)) + var(resid(lin_mod)))
## [1] 0.05451483

Jedoch kann dieser umständliche Weg umgangen werden. Mit der Funktion summary() kann ein Überblick über verschiedene Ergebnisse eines Modells gewonnen werden. Für lineare Modelle werden mit diesem Befehl unter anderem auch die Koeffizienten angezeigt. Anhand des p-Werts kann hier auch die Signifikanz des \(R^2\) überprüft werden.

#Detaillierte Modellergebnisse
summary(lin_mod)
## 
## Call:
## lm(formula = nerd ~ extra, data = fb22)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.49293 -0.43406  0.05601  0.39927  1.78154 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  3.85535    0.24733  15.588  < 2e-16 ***
## extra       -0.21561    0.07166  -3.009  0.00306 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.6359 on 157 degrees of freedom
## Multiple R-squared:  0.05451,	Adjusted R-squared:  0.04849 
## F-statistic: 9.052 on 1 and 157 DF,  p-value: 0.003057

Determinationskoeffizient \(R^2\) ist signifikant, da \(p < \alpha\).

Der Determinationskoeffizient \(R^2\) kann auch direkt über den Befehl summary(lin_mod)$r.squared ausgegeben werden:

summary(lin_mod)$r.squared
## [1] 0.05451483

5.45% der Varianz von nerd können durch extra erklärt werden. Dieser Effekt ist nach Cohens (1988) Konvention als schwach bis mittelstark zu bewerten, wenn keine Erkenntnisse in dem spezifischen Bereich vorliegen.

Cohens (1988) Konvention zur Interpretation von \(R^2\):

Konventionen sind, wie bereits besprochen, heranzuziehen, wenn keine vorherigen Untersuchungen der Fragestellung oder zumindest in dem Forschungsbereich vorliegen. Die vorgeschlagenen Werte von \(R^2\) entsprechen dabei dem Quadrat der in der letzten Sitzung genannten Konventionen für \(r\).

  • ~ .01: schwacher Effekt
  • ~ .09: mittlerer Effekt
  • ~ .25: starker Effekt

Korrelation vs. Regression

Im Falle einer einfachen linearen Regression (1 Prädiktor) ist das standardisierte Regressionsgewicht identisch zur Produkt-Moment-Korrelation aus Prädiktor (extra) und Kriterium (nerd)

cor(fb22$nerd, fb22$extra)   # Korrelation
## [1] -0.2334841
s_lin_mod <- lm(scale(nerd) ~ scale(extra), fb22) # Regression mit standardisierten Variablen
s_lin_mod
## 
## Call:
## lm(formula = scale(nerd) ~ scale(extra), data = fb22)
## 
## Coefficients:
##  (Intercept)  scale(extra)  
##    8.719e-17    -2.335e-01
round(coef(s_lin_mod)["scale(extra)"],3) == round(cor(fb22$nerd, fb22$extra),3)
## scale(extra) 
##         TRUE

Entsprechend ist das Quadrat der Korrelation identisch zum Determinationskoeffizienten des Modells mit standardisierten Variablen…

cor(fb22$nerd, fb22$extra)^2   # Quadrierte Korrelation
## [1] 0.05451483
summary(s_lin_mod)$ r.squared  # Det-Koeffizient Modell mit standardisierten Variablen
## [1] 0.05451483
round((cor(fb22$nerd, fb22$extra)^2),3) == round(summary(s_lin_mod)$ r.squared, 3)
## [1] TRUE

… und unstandardisierten Variablen

cor(fb22$nerd, fb22$extra)^2   # Quadrierte Korrelation
## [1] 0.05451483
summary(lin_mod)$ r.squared  # Det-Koeffizient Modell mit unstandardisierten Variablen
## [1] 0.05451483
round((cor(fb22$nerd, fb22$extra)^2),3) == round(summary(lin_mod)$ r.squared, 3)
## [1] TRUE

Der standardisierte Korrelationskoeffizient in einer einfachen linearen Regression liefert also dieselben Informationen wie eine Produkt-Moment-Korrelation. Daraus wird auch ersichtlich, dass ein Regressionskoeffizient (genau wie eine Korrelation) nicht zulässt, auf die Richtung des Effekts (Kausalität) zu schließen.


Inferenzstatistische Überprüfung der Regressionsparameter b

Signifikanztestung der Regressionskoeffizienten:

Zuerst kann die Betrachtung der Konfidenzintervalle helfen. Der Befehl confint() berechnet die Konfidenzintervalle der Regressionsgewichte.

#Konfidenzintervalle der Regressionskoeffizienten
confint(lin_mod)
##                  2.5 %      97.5 %
## (Intercept)  3.3668258  4.34388110
## extra       -0.3571501 -0.07406269

Das Konfidenzintervall von -0.357 und -0.074 ist der Bereich, in dem wir den wahren Wert vermuten können. Zur Erinnerung: das 95% Konfidenzintervall besagt, dass, wenn wir diese Studie mit der selben Stichprobengröße sehr oft wiederholen, 95% aller realisierten Konfidenzintervalle den wahren Wert für \(b_1\) enthalten werden. Da die 0 nicht in diesem Intervall enthalten ist, ist 0 ein eher unwahrscheinlicher wahrer Wert für \(b_1\).

  • \(b_1\)
    • H0: \(b_1 = 0\), das Regressionsgewicht ist nicht von Null verschieden.
    • H1: \(b_1 \neq 0\), das Regressionsgewicht ist von Null verschieden.
  • \(b_0\) (häufig nicht von Interesse)
    • H0: \(b_0 = 0\), der y-Achsenabschnitt ist nicht von Null verschieden.
    • H1: \(b_0 \neq 0\), der y-Achsenabschnitt ist von Null verschieden.

Für beide Parameter (\(b_1\) uns \(b_0\)) wird die H0 auf einem alpha-Fehler-Niveau von 5% verworfen, da die 0 nicht im jeweiligen 95% Konfidenzintervall enthalten ist.

Eine andere Möglichkeit zur interenzstatitschen Überpüfung ergibt sich über die p-Werte der Regressionskoeffizienten. Diese werden über die summary()Funktion ausgegeben.

#Detaillierte Modellergebnisse
summary(lin_mod)
## 
## Call:
## lm(formula = nerd ~ extra, data = fb22)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.49293 -0.43406  0.05601  0.39927  1.78154 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  3.85535    0.24733  15.588  < 2e-16 ***
## extra       -0.21561    0.07166  -3.009  0.00306 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.6359 on 157 degrees of freedom
## Multiple R-squared:  0.05451,	Adjusted R-squared:  0.04849 
## F-statistic: 9.052 on 1 and 157 DF,  p-value: 0.003057

Aus summary(): \(p < \alpha\) \(\rightarrow\) H1: Das Regressionsgewicht für den Prädiktor Extraversion ist signifikant von Null verschieden. Der Zusammenhang von Extraversion und Nerdiness ist statistisch bedeutsam.

Aus summary(): \(p < \alpha\) \(\rightarrow\) H1: der Achsenabschnitt ist signifikant von Null verschieden. Beträgt die Extraversion Null wird eine von 0 verschiedene Nerdiness vorhergesagt.

Konfidenzinteralle und p-Werte für Regressionskoeffizienten kommen immer zu denselben Schlussfolgerungen in Bezug darauf, ob die H0 beibehalten oder verworfen wird!

Ähnliches