Vorbereitung
Laden Sie zunächst den Datensatz fb23
von der pandar-Website und führen Sie die Ergänzungen vor, die in zurückliegenden Tutorials vorgenommen wurden.
#### Was bisher geschah: ----
# Daten laden
load(url('https://pandar.netlify.app/daten/fb23.rda'))
# Nominalskalierte Variablen in Faktoren verwandeln
fb23$hand_factor <- factor(fb23$hand,
levels = 1:2,
labels = c("links", "rechts"))
fb23$fach <- factor(fb23$fach,
levels = 1:5,
labels = c('Allgemeine', 'Biologische', 'Entwicklung', 'Klinische', 'Diag./Meth.'))
fb23$ziel <- factor(fb23$ziel,
levels = 1:4,
labels = c("Wirtschaft", "Therapie", "Forschung", "Andere"))
fb23$wohnen <- factor(fb23$wohnen,
levels = 1:4,
labels = c("WG", "bei Eltern", "alleine", "sonstiges"))
fb23$fach_klin <- factor(as.numeric(fb23$fach == "Klinische"),
levels = 0:1,
labels = c("nicht klinisch", "klinisch"))
fb23$ort <- factor(fb23$ort, levels=c(1,2), labels=c("FFM", "anderer"))
fb23$job <- factor(fb23$job, levels=c(1,2), labels=c("nein", "ja"))
fb23$unipartys <- factor(fb23$uni3,
levels = 0:1,
labels = c("nein", "ja"))
# Rekodierung invertierter Items
fb23$mdbf4_pre_r <- -1 * (fb23$mdbf4_pre - 4 - 1)
fb23$mdbf11_pre_r <- -1 * (fb23$mdbf11_pre - 4 - 1)
fb23$mdbf3_pre_r <- -1 * (fb23$mdbf3_pre - 4 - 1)
fb23$mdbf9_pre_r <- -1 * (fb23$mdbf9_pre - 4 - 1)
fb23$mdbf5_pre_r <- -1 * (fb23$mdbf5_pre - 4 - 1)
fb23$mdbf7_pre_r <- -1 * (fb23$mdbf7_pre - 4 - 1)
# Berechnung von Skalenwerten
fb23$wm_pre <- fb23[, c('mdbf1_pre', 'mdbf5_pre_r',
'mdbf7_pre_r', 'mdbf10_pre')] |> rowMeans()
fb23$gs_pre <- fb23[, c('mdbf1_pre', 'mdbf4_pre_r',
'mdbf8_pre', 'mdbf11_pre_r')] |> rowMeans()
fb23$ru_pre <- fb23[, c("mdbf3_pre_r", "mdbf6_pre",
"mdbf9_pre_r", "mdbf12_pre")] |> rowMeans()
# z-Standardisierung
fb23$ru_pre_zstd <- scale(fb23$ru_pre, center = TRUE, scale = TRUE)
Prüfen Sie zur Sicherheit, ob alles funktioniert hat:
dim(fb23)
## [1] 179 53
str(fb23)
## 'data.frame': 179 obs. of 53 variables:
## $ mdbf1_pre : int 4 2 4 NA 3 3 2 3 3 2 ...
## $ mdbf2_pre : int 2 2 3 3 3 2 3 2 2 1 ...
## $ mdbf3_pre : int 3 4 2 2 2 3 3 1 2 2 ...
## $ mdbf4_pre : int 2 2 1 2 1 1 3 2 3 3 ...
## $ mdbf5_pre : int 3 2 3 2 2 1 3 3 2 4 ...
## $ mdbf6_pre : int 2 1 2 2 2 2 2 3 2 2 ...
## $ mdbf7_pre : int 4 3 3 1 1 2 2 3 3 3 ...
## $ mdbf8_pre : int 3 2 3 2 3 3 2 3 3 2 ...
## $ mdbf9_pre : int 2 4 1 2 3 3 4 2 2 3 ...
## $ mdbf10_pre : int 3 2 3 3 2 4 2 2 2 2 ...
## $ mdbf11_pre : int 3 2 1 2 2 1 3 1 2 4 ...
## $ mdbf12_pre : int 1 1 2 3 2 2 2 3 3 2 ...
## $ lz : num 5.4 3.4 4.4 4.4 6.4 5.6 5.4 5 4.8 6 ...
## $ extra : num 3.5 3 4 3 4 4.5 3.5 3.5 2.5 3 ...
## $ vertr : num 1.5 3 3.5 4 4 4.5 4 4 3 3.5 ...
## $ gewis : num 4.5 4 5 3.5 3.5 4 4.5 2.5 3.5 4 ...
## $ neuro : num 5 5 2 4 3.5 4.5 3 2.5 4.5 4 ...
## $ offen : num 5 5 4.5 3.5 4 4 5 4.5 4 3 ...
## $ prok : num 1.8 3.1 1.5 1.6 2.7 3.3 2.2 3.4 2.4 3.1 ...
## $ nerd : num 4.17 3 2.33 2.83 3.83 ...
## $ grund : chr "Berufsziel" "Interesse am Menschen" "Interesse und Berufsaussichten" "Wissenschaftliche Ergänzung zu meinen bisherigen Tätigkeiten (Arbeit in der psychiatrischen Akutpflege, Gestalt"| __truncated__ ...
## $ fach : Factor w/ 5 levels "Allgemeine","Biologische",..: 4 4 4 4 4 4 NA 4 4 NA ...
## $ ziel : Factor w/ 4 levels "Wirtschaft","Therapie",..: 2 2 2 2 2 2 NA 4 2 2 ...
## $ wissen : int 5 4 5 4 2 3 NA 4 3 3 ...
## $ therap : int 5 5 5 5 4 5 NA 3 5 5 ...
## $ lerntyp : num 3 3 1 3 3 1 NA 1 3 3 ...
## $ hand : int 2 2 2 2 2 2 NA 2 1 2 ...
## $ job : Factor w/ 2 levels "nein","ja": 1 1 1 1 2 2 NA 2 1 2 ...
## $ ort : Factor w/ 2 levels "FFM","anderer": 2 1 1 1 1 2 NA 1 1 2 ...
## $ ort12 : int 2 1 2 2 2 1 NA 2 2 1 ...
## $ wohnen : Factor w/ 4 levels "WG","bei Eltern",..: 4 1 1 1 1 2 NA 3 3 2 ...
## $ uni1 : num 0 1 0 1 0 0 0 0 0 0 ...
## $ uni2 : num 1 1 1 1 1 1 0 1 1 1 ...
## $ uni3 : num 0 1 0 0 1 0 0 1 1 0 ...
## $ uni4 : num 0 1 0 1 0 0 0 0 0 0 ...
## $ attent_pre : int 6 6 6 6 6 6 NA 4 5 5 ...
## $ gs_post : num 3 2.75 4 2.5 3.75 NA 4 2.75 3.75 2.5 ...
## $ wm_post : num 2 1 3.75 2.75 3 NA 3.25 2 3.25 2 ...
## $ ru_post : num 2.25 1.5 3.75 3.5 3 NA 3.5 2.75 2.75 2.75 ...
## $ attent_post : int 6 5 6 6 6 NA 6 4 5 3 ...
## $ hand_factor : Factor w/ 2 levels "links","rechts": 2 2 2 2 2 2 NA 2 1 2 ...
## $ fach_klin : Factor w/ 2 levels "nicht klinisch",..: 2 2 2 2 2 2 NA 2 2 NA ...
## $ unipartys : Factor w/ 2 levels "nein","ja": 1 2 1 1 2 1 1 2 2 1 ...
## $ mdbf4_pre_r : num 3 3 4 3 4 4 2 3 2 2 ...
## $ mdbf11_pre_r: num 2 3 4 3 3 4 2 4 3 1 ...
## $ mdbf3_pre_r : num 2 1 3 3 3 2 2 4 3 3 ...
## $ mdbf9_pre_r : num 3 1 4 3 2 2 1 3 3 2 ...
## $ mdbf5_pre_r : num 2 3 2 3 3 4 2 2 3 1 ...
## $ mdbf7_pre_r : num 1 2 2 4 4 3 3 2 2 2 ...
## $ wm_pre : num 2.5 2.25 2.75 NA 3 3.5 2.25 2.25 2.5 1.75 ...
## $ gs_pre : num 3 2.5 3.75 NA 3.25 3.5 2 3.25 2.75 1.75 ...
## $ ru_pre : num 2 1 2.75 2.75 2.25 2 1.75 3.25 2.75 2.25 ...
## $ ru_pre_zstd : num [1:179, 1] -0.9749 -2.3095 0.0261 0.0261 -0.6412 ...
## ..- attr(*, "scaled:center")= num 2.73
## ..- attr(*, "scaled:scale")= num 0.749
Der Datensatz besteht aus 179 Zeilen (Beobachtungen) und 53 Spalten (Variablen). Falls Sie bereits eigene Variablen erstellt haben, kann die Spaltenzahl natürlich abweichen.
Aufgabe 1
Welche der fünf Persönlichkeitsdimensionen Extraversion (extra
), Verträglichkeit (vertr
), Gewissenhaftigkeit (gewis
), Neurotizsimus (neuro
) und Offenheit für neue Erfahrungen (offen
) zeigt den höchsten linearen Zusammenhang mit der Lebenszufriedenheit (lz
)?
- Erstellen Sie für jeden Zusammenhang je ein Streudiagramm.
Lösung
extra
:
plot(fb23$extra, fb23$lz, xlim = c(0, 6), ylim = c(0, 7), pch = 19)
vertr
:
plot(fb23$vertr, fb23$lz, xlim = c(0, 6), ylim = c(0, 7), pch = 19)
gewis
:
plot(fb23$gewis, fb23$lz, xlim = c(0, 6), ylim = c(0, 7), pch = 19)
neuro
:
plot(fb23$neuro, fb23$lz, xlim = c(0, 6), ylim = c(0, 7), pch = 19)
intel
:
plot(fb23$offen, fb23$lz, xlim = c(0, 6), ylim = c(0, 7), pch = 19)
- Schätzen Sie für jeden Zusammenhang je ein Modell.
Lösung
extra
:
fme <- lm(lz ~ extra, fb23)
summary(fme)
##
## Call:
## lm(formula = lz ~ extra, data = fb23)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.1828 -0.6196 0.1252 0.7620 2.2356
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.69084 0.27607 13.369 < 2e-16 ***
## extra 0.43679 0.08126 5.375 2.42e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.9801 on 175 degrees of freedom
## (2 observations deleted due to missingness)
## Multiple R-squared: 0.1417, Adjusted R-squared: 0.1368
## F-statistic: 28.89 on 1 and 175 DF, p-value: 2.42e-07
vertr
:
fmv <- lm(lz ~ vertr, fb23)
summary(fmv)
##
## Call:
## lm(formula = lz ~ vertr, data = fb23)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.5247 -0.6459 0.1612 0.7612 1.9895
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.32567 0.34356 12.59 <2e-16 ***
## vertr 0.22828 0.09633 2.37 0.0189 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.044 on 174 degrees of freedom
## (3 observations deleted due to missingness)
## Multiple R-squared: 0.03126, Adjusted R-squared: 0.0257
## F-statistic: 5.616 on 1 and 174 DF, p-value: 0.0189
gewis
:
fmg <- lm(lz ~ gewis, fb23)
summary(fmg)
##
## Call:
## lm(formula = lz ~ gewis, data = fb23)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.6219 -0.5908 0.1937 0.7781 2.1625
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.4686 0.3755 11.900 <2e-16 ***
## gewis 0.1844 0.1038 1.777 0.0774 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.048 on 175 degrees of freedom
## (2 observations deleted due to missingness)
## Multiple R-squared: 0.01772, Adjusted R-squared: 0.0121
## F-statistic: 3.156 on 1 and 175 DF, p-value: 0.07737
neuro
:
fmn <- lm(lz ~ neuro, fb23)
summary(fmn)
##
## Call:
## lm(formula = lz ~ neuro, data = fb23)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.2488 -0.6202 0.1227 0.7512 1.9512
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 6.07728 0.27289 22.270 < 2e-16 ***
## neuro -0.28570 0.07824 -3.652 0.000344 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.02 on 175 degrees of freedom
## (2 observations deleted due to missingness)
## Multiple R-squared: 0.0708, Adjusted R-squared: 0.06549
## F-statistic: 13.33 on 1 and 175 DF, p-value: 0.000344
intel
:
fmo <- lm(lz ~ offen, fb23)
summary(fmo)
##
## Call:
## lm(formula = lz ~ offen, data = fb23)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.7082 -0.5793 0.2207 0.7155 1.9392
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.29777 0.33066 16.022 <2e-16 ***
## offen -0.04740 0.08602 -0.551 0.582
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.057 on 175 degrees of freedom
## (2 observations deleted due to missingness)
## Multiple R-squared: 0.001732, Adjusted R-squared: -0.003972
## F-statistic: 0.3036 on 1 and 175 DF, p-value: 0.5823
Wenn wir die Koeffizienten der Modelle vergleichen, sehen wir, dass extra
den stärksten linearen Zusammenhang mit lz
aufweist (Hinweis: für den Vergleich der Modelle vergleichen wir den Determinationskoeffizienten der fünf Modelle = Multiple R-squared im R-Output! Dieser ist für das Modell mit dem Prädiktor Extraversion am höchsten)
- Interpretieren Sie den standardisierten Koeffizienten des linearen Zusammenhangs zwischen Extraversion und Lebenszufriedenheit. Wie verändert sich
lz
, wenn sichextra
um eine Standardabweichung erhöht?
Lösung
Für diese Aufgabe gibt es zwei Lösungsansätze.
Das Einbauen der scale()-Funktion in unser Regressionsmodell.
Das Verwenden der lm.beta()-Funktion aus dem gleichnamigen Paket.
Es gilt zu Beachten: Wenn wir die Lösung zwischen den zwei Ansätzen vergleichen, ist der Wert des standardisierten Koeffizienten nicht exakt gleich. Dies ist der Fall, weil bei der standardisierten Regression mithilfe der lm()- und scale()-Befehle, das Intercept noch mitgeschätzt wird und sich dadurch auch auf die Schätzung des Koeffizienten auswirkt. Dies sollte sich aber in der Regel erst in den hinteren Nachkommastellen auswirken, sodass es für die Interpretation der Größe des Koeffizienten für gewöhnlich keine relevante Rolle spielt.
Zu 1:
sfme <- lm(scale(lz) ~ scale(extra), fb23)
sfme
##
## Call:
## lm(formula = scale(lz) ~ scale(extra), data = fb23)
##
## Coefficients:
## (Intercept) scale(extra)
## -0.002424 0.375167
Zu 2:
Für die Lösung der Aufgabe verwenden wir die lm.beta() Funktion. Diese stammt aus dem lm.beta-Paket, welches installiert und dann geladen werden muss.
library(lm.beta)
sfme2 <- lm.beta(fme)
summary(sfme2) # reg |> lm.beta() |> summary()
##
## Call:
## lm(formula = lz ~ extra, data = fb23)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.1828 -0.6196 0.1252 0.7620 2.2356
##
## Coefficients:
## Estimate Standardized Std. Error t value Pr(>|t|)
## (Intercept) 3.69084 NA 0.27607 13.369 < 2e-16 ***
## extra 0.43679 0.37643 0.08126 5.375 2.42e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.9801 on 175 degrees of freedom
## (2 observations deleted due to missingness)
## Multiple R-squared: 0.1417, Adjusted R-squared: 0.1368
## F-statistic: 28.89 on 1 and 175 DF, p-value: 2.42e-07
lm.beta() ergänzt den Output der lm()-Funktion an der Stelle der Koeffizienten um die Spalte “Standardized”. Dieser können wir den standardisierten Koeffizienten des linearen Zusammenhangs zwischen Extraversion und Lebenszufriedenheit entnehmen.
Wenn sich die Variable extra
um eine Standardabweichung verändert, verändert sich das Kriterium lz
um 0.38 Standardabweichungen.
Aufgabe 2
Betrachten Sie nun den Zusammenhang von Neurotizismus (neuro
) und Lebenszufriedenheit (lz
) etwas genauer:
- Erstellen Sie ein Streu-Punkt-Diagramm mit Regressionsgerade für den linearen Zusammenhang zwischen Neurotizismus und Lebenszufriedenheit.
Lösung
plot(fb23$neuro, fb23$lz, xlim = c(0, 6), ylim = c(0, 7), pch = 19)
abline(fmn, col = "red")
- Wie viel Prozent der Varianz werden durch das Modell erklärt?
Lösung
summary(fmn)
##
## Call:
## lm(formula = lz ~ neuro, data = fb23)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.2488 -0.6202 0.1227 0.7512 1.9512
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 6.07728 0.27289 22.270 < 2e-16 ***
## neuro -0.28570 0.07824 -3.652 0.000344 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.02 on 175 degrees of freedom
## (2 observations deleted due to missingness)
## Multiple R-squared: 0.0708, Adjusted R-squared: 0.06549
## F-statistic: 13.33 on 1 and 175 DF, p-value: 0.000344
$\rightarrow$ Das Modell erklärt 7.08% der Varianz in Lebenszufriedenheit durch Neurotizismus.
- Ein paar Studierende wurden nachträglich zum Studiengang Psychologie zugelassen und befinden sich daher nicht im Datensatz. Die neuen Studierenden wurden nachträglich befragt und weisen auf der Skala Neurotizismus folgende Werte auf: 1.25; 2.75; 3.5; 4.25; 3.75; 2.15. Machen Sie eine Vorhersage für die Lebenszufriedenheit für die neuen Studierenden.
Lösung
new <- data.frame(neuro = c(1.25, 2.75, 3.5, 4.25, 3.75, 2.15))
predict(fmn, newdata = new)
## 1 2 3 4 5 6
## 5.720154 5.291599 5.077322 4.863045 5.005896 5.463021