Vorbereitung
Zunächst müssen wir das haven
-Paket wieder aktivieren und einen Teil des Code aus dem letzten Tutorial wieder durchführen.
library(haven)
setwd("~/Pfad/zu/Ordner")
data <- read_sav(file = "fb22_mod.sav")
data$geschl_faktor <- factor(data$geschl, # Ausgangsvariable
levels = c(1, 2, 3), # Faktorstufen
labels = c("weiblich", "männlich", "anderes")) # Label für Faktorstufen
data$nr_ges <- rowMeans(data[,c("nr1", "nr2", "nr3", "nr4", "nr5", "nr6")])
data$prok <- rowMeans(data[,c("prok1", "prok4", "prok6", "prok9", "prok10")])
data$wohnen_faktor <- factor(data$wohnen,
levels = c(1, 2, 3, 4),
labels = c("WG", "bei Eltern", "alleine", "sonstiges"))
lineare Modellierung
Die Grundlage für die spätere hierarchische Ansetzung ist das lineares Modell ohne Hierarchie, dem wir uns demnach im Folgenden widmen werden.
Syntax
Es gibt eine spezielle Syntax für die Darstellungen von Abhängigkeiten. Dies wollen wir anhand der aggregate
-Funktion demonstrieren. Hier wird eine bestimmte Operation an einer Variable in Abhängigkeit einer anderen Variable durchgeführt.
aggregate(extra ~ geschl_faktor, data = data, FUN = mean)
## geschl_faktor extra
## 1 weiblich 3.373967
## 2 männlich 3.250000
## 3 anderes 2.750000
Einfaches lineares Modell
Nun übertragen wir die eben gelernte Syntaxlogik und schauen uns die Variable extra
(Extraversion) in Abhängigkeit von lz
(Lebenszufriedenheit) an.
lm(extra ~ lz, data = data)
##
## Call:
## lm(formula = extra ~ lz, data = data)
##
## Coefficients:
## (Intercept) lz
## 2.7746 0.1273
Das Model selbst hat offenbar erstmal nur eine sehr beschränkte Ausgabe. Häufig kann man mehr aus Funktionen herausholen, wenn man ihren Output zunächst in einem Objekt ablegt:
mod <- lm(extra ~ lz, data = data)
Das Objekt mod
erscheint damit im Environment. Es ist vom Typ Liste, das ist etwas anderes als ein Datensatz mit einer festen Anzahl an Spalten pro Reihe und umgekehrt. Bei Listen können in verschiedenen Bestandteilen der Liste ganz unterschiedliche Sachen liegen. Beispielsweise können auch Datensätze Bestandteile von Listen sein. Die Auswahl von Listenbestandteilen funktioniert aber ebenfalls durch das $
.
mod$coefficients
## (Intercept) lz
## 2.7745981 0.1273186
mod$call
## lm(formula = extra ~ lz, data = data)
Genau wie Variablen (numeric
etc.) können auch Listen verschiedene Klassen haben. Beispielsweise liegt hier die class
lm
vor, entsprechend der Funktion mit der wir das Objekt erstellt haben.
Datensätze hingegen haben meist die class
data.frame
.
class(data)
## [1] "tbl_df" "tbl" "data.frame"
class(mod)
## [1] "lm"
Neben der händischen Exploration eines Objektes können wir auch automatische Funktionen nutzen, wie beispielsweise die summary
-Funktion, die wohl am häufigsten verwendet wird.
summary(mod)
##
## Call:
## lm(formula = extra ~ lz, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.78851 -0.48758 -0.01305 0.51706 1.63974
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.77460 0.25420 10.915 <2e-16 ***
## lz 0.12732 0.05291 2.406 0.0173 *
## ---
## Signif. codes:
## 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.7003 on 151 degrees of freedom
## Multiple R-squared: 0.03693, Adjusted R-squared: 0.03055
## F-statistic: 5.79 on 1 and 151 DF, p-value: 0.01732
Sie zeigt uns die wichtigsten Parameter an. Die summary
-Funktion ist auch auf Objekte anderer Klassen anwendbar. Wenn wir sie auf den Datensatz anwenden, werden uns Zusammenfassungen der Variablen angezeigt. Auch in den nächsten Blöcken werden wir sie noch verwenden.
summary(data)
## prok1 prok2 prok3
## Min. :1.000 Min. :1.000 Min. :1.000
## 1st Qu.:2.000 1st Qu.:2.000 1st Qu.:2.000
## Median :3.000 Median :3.000 Median :2.000
## Mean :2.667 Mean :2.588 Mean :2.235
## 3rd Qu.:3.000 3rd Qu.:3.000 3rd Qu.:3.000
## Max. :4.000 Max. :4.000 Max. :4.000
##
## prok4 prok5 prok6
## Min. :1.000 Min. :1.000 Min. :1.000
## 1st Qu.:2.000 1st Qu.:3.000 1st Qu.:2.000
## Median :3.000 Median :3.000 Median :3.000
## Mean :2.569 Mean :2.974 Mean :2.725
## 3rd Qu.:3.000 3rd Qu.:3.000 3rd Qu.:3.000
## Max. :4.000 Max. :4.000 Max. :4.000
##
## prok7 prok8 prok9
## Min. :1.000 Min. :1.00 Min. :1.000
## 1st Qu.:2.000 1st Qu.:2.00 1st Qu.:2.000
## Median :3.000 Median :3.00 Median :3.000
## Mean :2.725 Mean :2.81 Mean :2.745
## 3rd Qu.:3.000 3rd Qu.:3.00 3rd Qu.:4.000
## Max. :4.000 Max. :4.00 Max. :4.000
##
## prok10 nr1 nr2
## Min. :1.000 Min. :1.000 Min. :1.00
## 1st Qu.:2.000 1st Qu.:2.000 1st Qu.:3.00
## Median :3.000 Median :3.000 Median :4.00
## Mean :2.739 Mean :2.765 Mean :3.68
## 3rd Qu.:4.000 3rd Qu.:4.000 3rd Qu.:4.00
## Max. :4.000 Max. :5.000 Max. :5.00
##
## nr3 nr4 nr5
## Min. :1.000 Min. :1.000 Min. :1.000
## 1st Qu.:2.000 1st Qu.:3.000 1st Qu.:3.000
## Median :3.000 Median :4.000 Median :3.000
## Mean :3.124 Mean :3.699 Mean :3.327
## 3rd Qu.:4.000 3rd Qu.:4.000 3rd Qu.:4.000
## Max. :5.000 Max. :5.000 Max. :5.000
##
## nr6 lz extra
## Min. :1.000 Min. :1.400 Min. :1.500
## 1st Qu.:2.000 1st Qu.:4.200 1st Qu.:3.000
## Median :3.000 Median :4.800 Median :3.250
## Mean :2.915 Mean :4.684 Mean :3.371
## 3rd Qu.:4.000 3rd Qu.:5.400 3rd Qu.:3.750
## Max. :5.000 Max. :6.600 Max. :5.000
##
## vertr gewis neuro
## Min. :2.50 Min. :2.000 Min. :1.250
## 1st Qu.:3.75 1st Qu.:3.500 1st Qu.:3.250
## Median :4.00 Median :4.000 Median :3.750
## Mean :4.09 Mean :3.856 Mean :3.621
## 3rd Qu.:4.50 3rd Qu.:4.250 3rd Qu.:4.250
## Max. :5.00 Max. :5.000 Max. :5.000
##
## intel nerd grund
## Min. :1.250 Min. :1.500 Length:153
## 1st Qu.:3.250 1st Qu.:2.667 Class :character
## Median :3.500 Median :3.167 Mode :character
## Mean :3.564 Mean :3.127
## 3rd Qu.:4.000 3rd Qu.:3.500
## Max. :5.000 Max. :4.667
##
## fach ziel lerntyp
## Length:153 Length:153 Length:153
## Class :character Class :character Class :character
## Mode :character Mode :character Mode :character
##
##
##
##
## geschl job ort
## Min. :1.000 Min. :1.00 Min. :1.000
## 1st Qu.:1.000 1st Qu.:1.00 1st Qu.:1.000
## Median :1.000 Median :1.00 Median :1.000
## Mean :1.161 Mean :1.35 Mean :1.361
## 3rd Qu.:1.000 3rd Qu.:2.00 3rd Qu.:2.000
## Max. :3.000 Max. :2.00 Max. :2.000
## NA's :10 NA's :10 NA's :9
## ort12 wohnen uni1
## Length:153 Min. :1.000 Min. :0.0000
## Class :character 1st Qu.:1.500 1st Qu.:0.0000
## Mode :character Median :2.000 Median :0.0000
## Mean :2.238 Mean :0.2026
## 3rd Qu.:3.000 3rd Qu.:0.0000
## Max. :4.000 Max. :1.0000
## NA's :10
## uni2 uni3 uni4
## Min. :0.0000 Min. :0.0000 Min. :0.0000
## 1st Qu.:1.0000 1st Qu.:0.0000 1st Qu.:0.0000
## Median :1.0000 Median :0.0000 Median :0.0000
## Mean :0.8693 Mean :0.3791 Mean :0.1111
## 3rd Qu.:1.0000 3rd Qu.:1.0000 3rd Qu.:0.0000
## Max. :1.0000 Max. :1.0000 Max. :1.0000
##
## geschl_faktor nr_ges prok
## weiblich:121 Min. :1.000 Min. :1.200
## männlich: 21 1st Qu.:2.833 1st Qu.:2.200
## anderes : 1 Median :3.333 Median :2.800
## NA's : 10 Mean :3.252 Mean :2.689
## 3rd Qu.:3.667 3rd Qu.:3.200
## Max. :5.000 Max. :4.000
##
## wohnen_faktor
## WG :36
## bei Eltern:55
## alleine :34
## sonstiges :18
## NA's :10
##
##
Weitere Beispiele für solche Funktionen, die auf Objekte verschiedener Klassen angewandt werden können, sind plot()
und resid()
.
Die einfache lineare Modellierung kann hier vertieft werden.
Multiple Regression
Die multiple Regression ist eine Erweiterung des Modells mit der Aufnahme von Effekten. Zur multiplen Regression gibt es viele Themen in der Übersicht von PsyBSc7.
Kontinuierliche Prädiktoren
Schauen wir uns zunächst eine einfache Erweiterung der Syntax um eine Addition an.
mod_kont <- lm(lz ~ neuro + intel, data = data)
Die class
bleibt gleich und auch die summary
ist daher gleich aufgebaut. Die Coefficients
werden logischerweise um einen Eintrag erweitert.
class(mod_kont)
## [1] "lm"
summary(mod_kont)
##
## Call:
## lm(formula = lz ~ neuro + intel, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.4246 -0.6164 0.0396 0.7188 1.8736
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.6670 0.6245 5.872 2.67e-08 ***
## neuro -0.2566 0.1184 -2.167 0.0318 *
## intel 0.5460 0.1360 4.016 9.34e-05 ***
## ---
## Signif. codes:
## 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.017 on 150 degrees of freedom
## Multiple R-squared: 0.1149, Adjusted R-squared: 0.1031
## F-statistic: 9.74 on 2 and 150 DF, p-value: 0.0001054
Aufnahme kategorialer Prädiktor
Nun nehmen wir zunächst einmal die Variable geschl
(Geschlecht) auf, so wie sie ursprünglich vorlag. Die Syntax bleibt dabei genau gleich.
mod_kat <- lm(lz ~ intel + geschl, data = data)
summary(mod_kat)
##
## Call:
## lm(formula = lz ~ intel + geschl, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.6753 -0.5007 0.0738 0.7247 2.0197
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.1983 0.5188 6.165 7.09e-09 ***
## intel 0.5967 0.1389 4.296 3.24e-05 ***
## geschl -0.5097 0.2219 -2.297 0.0231 *
## ---
## Signif. codes:
## 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.004 on 140 degrees of freedom
## (10 Beobachtungen als fehlend gelöscht)
## Multiple R-squared: 0.1284, Adjusted R-squared: 0.1159
## F-statistic: 10.31 on 2 and 140 DF, p-value: 6.654e-05
Wir sehen, dass geschl
ein eigenes Steigungsgewicht bekommt. Das ist überraschend, da es drei Ausprägungen in dieser Variable gibt.
Daher ist die Verwandlung in einen Faktor essentiell.
mod_kat <- lm(lz ~ intel + geschl_faktor, data = data)
summary(mod_kat)
##
## Call:
## lm(formula = lz ~ intel + geschl_faktor, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.6774 -0.5032 0.0709 0.7226 2.0124
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.7046 0.5003 5.406 2.73e-07
## intel 0.5932 0.1395 4.253 3.84e-05
## geschl_faktormännlich -0.5548 0.2412 -2.300 0.0229
## geschl_faktoranderes -0.5740 1.0198 -0.563 0.5745
##
## (Intercept) ***
## intel ***
## geschl_faktormännlich *
## geschl_faktoranderes
## ---
## Signif. codes:
## 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.007 on 139 degrees of freedom
## (10 Beobachtungen als fehlend gelöscht)
## Multiple R-squared: 0.1298, Adjusted R-squared: 0.1111
## F-statistic: 6.914 on 3 and 139 DF, p-value: 0.0002258
Die summary
zeigt uns direkt an, in welcher Kategorie der Unterschied besteht. Die fehlende Kategorie wird als Referenz genutzt. Standardmäßig liegt hier also eine Dummykodierung vor.
Moderierte Regression
Nun soll der Interaktionseffekt zwischen zwei Variablen aufgenommen werden. Bevor wir dies tun, müssen wir die Variablen zentrieren, damit Multikollinearität vorgebeugt wird.
data$neuro_center <- scale(data$neuro, scale = F, center = T)
data$intel_center <- scale(data$intel, scale = F, center = T)
Wir überprüfen die Funktionalität; diese ist nicht immer genau null, aber maschinell gesehen schon.
mean(data$neuro_center)
## [1] -1.450156e-17
mean(data$intel_center)
## [1] -2.176752e-16
Setzen wir nun die lineare Modellierung mit Moderationseffekt um. Da eine Moderation eine Multiplikation der Effekte ist, würde man intuitiv den Code folgendermaßen schreiben.
mod_inter_nocenter <- lm(lz ~ neuro + intel + neuro * intel, data = data)
mod_inter_center <- lm(lz ~ neuro_center + intel_center + neuro_center * intel_center, data = data)
summary(mod_inter_nocenter)
##
## Call:
## lm(formula = lz ~ neuro + intel + neuro * intel, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.4151 -0.6220 0.0753 0.7150 1.9449
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.65678 3.14284 0.845 0.399
## neuro 0.01942 0.84978 0.023 0.982
## intel 0.83316 0.88602 0.940 0.349
## neuro:intel -0.07825 0.23856 -0.328 0.743
##
## Residual standard error: 1.02 on 149 degrees of freedom
## Multiple R-squared: 0.1156, Adjusted R-squared: 0.09777
## F-statistic: 6.491 on 3 and 149 DF, p-value: 0.0003705
summary(mod_inter_center)
##
## Call:
## lm(formula = lz ~ neuro_center + intel_center + neuro_center *
## intel_center, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.4151 -0.6220 0.0753 0.7150 1.9449
##
## Coefficients:
## Estimate Std. Error t value
## (Intercept) 4.68648 0.08288 56.543
## neuro_center -0.25945 0.11908 -2.179
## intel_center 0.54981 0.13687 4.017
## neuro_center:intel_center -0.07825 0.23856 -0.328
## Pr(>|t|)
## (Intercept) < 2e-16 ***
## neuro_center 0.0309 *
## intel_center 9.32e-05 ***
## neuro_center:intel_center 0.7434
## ---
## Signif. codes:
## 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.02 on 149 degrees of freedom
## Multiple R-squared: 0.1156, Adjusted R-squared: 0.09777
## F-statistic: 6.491 on 3 and 149 DF, p-value: 0.0003705
Wir sehen, dass die Zentralisierung wie erwartet die Standardfehler reduziert hat. Kommen wir jetzt nochmal zurück zum Code: die intuitive Lösung mit der Multiplikation benötigt theoretisch nicht die einzelne Aufführung der Variablen, die Teil der Interaktion sind.
mod_inter_center <- lm(lz ~ neuro_center * intel_center, data = data)
summary(mod_inter_center)
##
## Call:
## lm(formula = lz ~ neuro_center * intel_center, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.4151 -0.6220 0.0753 0.7150 1.9449
##
## Coefficients:
## Estimate Std. Error t value
## (Intercept) 4.68648 0.08288 56.543
## neuro_center -0.25945 0.11908 -2.179
## intel_center 0.54981 0.13687 4.017
## neuro_center:intel_center -0.07825 0.23856 -0.328
## Pr(>|t|)
## (Intercept) < 2e-16 ***
## neuro_center 0.0309 *
## intel_center 9.32e-05 ***
## neuro_center:intel_center 0.7434
## ---
## Signif. codes:
## 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.02 on 149 degrees of freedom
## Multiple R-squared: 0.1156, Adjusted R-squared: 0.09777
## F-statistic: 6.491 on 3 and 149 DF, p-value: 0.0003705
Allerdings hat das natürlich den Nachteil, dass man nicht spezifisch auswählt und damit nicht so stark über sein Modell nachdenken muss. Es besteht daher die Möglichkeit, Interaktionen sehr präzise mit dem :
auszuwählen.
mod_inter_center <- lm(lz ~ neuro_center + intel_center + neuro_center:intel_center, data = data)
summary(mod_inter_center)
##
## Call:
## lm(formula = lz ~ neuro_center + intel_center + neuro_center:intel_center,
## data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.4151 -0.6220 0.0753 0.7150 1.9449
##
## Coefficients:
## Estimate Std. Error t value
## (Intercept) 4.68648 0.08288 56.543
## neuro_center -0.25945 0.11908 -2.179
## intel_center 0.54981 0.13687 4.017
## neuro_center:intel_center -0.07825 0.23856 -0.328
## Pr(>|t|)
## (Intercept) < 2e-16 ***
## neuro_center 0.0309 *
## intel_center 9.32e-05 ***
## neuro_center:intel_center 0.7434
## ---
## Signif. codes:
## 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.02 on 149 degrees of freedom
## Multiple R-squared: 0.1156, Adjusted R-squared: 0.09777
## F-statistic: 6.491 on 3 and 149 DF, p-value: 0.0003705
Kommen wir nun zur grafischen Darstellung: Es gibt ein Paket, dass diese sehr gut unterstützt. Es erstellt automatisch Grafen im Rahmen von ggplot()
, wozu es auf PandaR einen ganzen Workshop oder auch ein einzelnes, einführendes Tutorial gibt.
install.packages("interactions")
library(interactions)
library(interactions)
Die Festlegung des Moderators kann R
natürlich nicht für uns übernehmen.
interact_plot(model = mod_inter_center, pred = intel_center, modx = neuro_center)
Weitere Infos zur Moderation, besonders zum Zusammenspiel mit quadratischen Effekten, finden sich hier.
Anwendungen
- Erstelle eine multiple Regression mit Extraversion als abhängiger Variable und Art des Wohnens sowie Verträglichkeit als unabhängigen Variablen.
Lösung
mod_extra <- lm(extra ~ wohnen_faktor + vertr, data = data)
summary(mod_extra)
##
## Call:
## lm(formula = extra ~ wohnen_faktor + vertr, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.5411 -0.4500 0.0080 0.5113 1.5992
##
## Coefficients:
## Estimate Std. Error t value
## (Intercept) 1.75211 0.42948 4.080
## wohnen_faktorbei Eltern -0.26918 0.14279 -1.885
## wohnen_faktoralleine -0.04909 0.15898 -0.309
## wohnen_faktorsonstiges -0.31833 0.19275 -1.652
## vertr 0.42926 0.09992 4.296
## Pr(>|t|)
## (Intercept) 7.59e-05 ***
## wohnen_faktorbei Eltern 0.0615 .
## wohnen_faktoralleine 0.7580
## wohnen_faktorsonstiges 0.1009
## vertr 3.26e-05 ***
## ---
## Signif. codes:
## 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.6648 on 138 degrees of freedom
## (10 Beobachtungen als fehlend gelöscht)
## Multiple R-squared: 0.161, Adjusted R-squared: 0.1367
## F-statistic: 6.619 on 4 and 138 DF, p-value: 6.661e-05
- Finde mit Hilfe des Internets heraus, wie standardisierte Regressionsparameter mit Hilfe einer Funktion ausgegeben werden können.
Lösung
library(lm.beta)
lm.beta(mod_extra)
##
## Call:
## lm(formula = extra ~ wohnen_faktor + vertr, data = data)
##
## Standardized Coefficients::
## (Intercept) wohnen_faktorbei Eltern
## NA -0.18368741
## wohnen_faktoralleine wohnen_faktorsonstiges
## -0.02931193 -0.14810607
## vertr
## 0.33734839
summary(lm.beta(mod_extra))
##
## Call:
## lm(formula = extra ~ wohnen_faktor + vertr, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.5411 -0.4500 0.0080 0.5113 1.5992
##
## Coefficients:
## Estimate Standardized Std. Error
## (Intercept) 1.75211 NA 0.42948
## wohnen_faktorbei Eltern -0.26918 -0.18369 0.14279
## wohnen_faktoralleine -0.04909 -0.02931 0.15898
## wohnen_faktorsonstiges -0.31833 -0.14811 0.19275
## vertr 0.42926 0.33735 0.09992
## t value Pr(>|t|)
## (Intercept) 4.080 7.59e-05 ***
## wohnen_faktorbei Eltern -1.885 0.0615 .
## wohnen_faktoralleine -0.309 0.7580
## wohnen_faktorsonstiges -1.652 0.1009
## vertr 4.296 3.26e-05 ***
## ---
## Signif. codes:
## 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.6648 on 138 degrees of freedom
## (10 Beobachtungen als fehlend gelöscht)
## Multiple R-squared: 0.161, Adjusted R-squared: 0.1367
## F-statistic: 6.619 on 4 and 138 DF, p-value: 6.661e-05
Eine geschachtelte Funktion ist teilweise schwierig zu lesen. Es gibt als Lösung die Pipe, die ein Objekt in eine weitere Funktion weitergibt.
mod_extra |> lm.beta() |> summary()
##
## Call:
## lm(formula = extra ~ wohnen_faktor + vertr, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.5411 -0.4500 0.0080 0.5113 1.5992
##
## Coefficients:
## Estimate Standardized Std. Error
## (Intercept) 1.75211 NA 0.42948
## wohnen_faktorbei Eltern -0.26918 -0.18369 0.14279
## wohnen_faktoralleine -0.04909 -0.02931 0.15898
## wohnen_faktorsonstiges -0.31833 -0.14811 0.19275
## vertr 0.42926 0.33735 0.09992
## t value Pr(>|t|)
## (Intercept) 4.080 7.59e-05 ***
## wohnen_faktorbei Eltern -1.885 0.0615 .
## wohnen_faktoralleine -0.309 0.7580
## wohnen_faktorsonstiges -1.652 0.1009
## vertr 4.296 3.26e-05 ***
## ---
## Signif. codes:
## 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.6648 on 138 degrees of freedom
## (10 Beobachtungen als fehlend gelöscht)
## Multiple R-squared: 0.161, Adjusted R-squared: 0.1367
## F-statistic: 6.619 on 4 and 138 DF, p-value: 6.661e-05
- Zur Veranschaulichung des Codes - keine Empfehlung für solch ein Modell: Nun sollen statt Art des Wohnens die Skalenscores für Prokrastination und Naturverbundenheit genutzt werden. Außerdem soll die Dreifachinteraktion der Prädiktoren aufgenommen werden, aber keine Interaktionen zwischen zwei Prädiktoren.
Lösung
data$nr_ges_center <- scale(data$nr_ges, scale = F, center = T)
data$prok_center <- scale(data$prok, scale = F, center = T)
data$vertr_center <- scale(data$vertr, scale = F, center = T)
mod_falsch <- lm(extra ~ nr_ges_center * prok_center * vertr_center, data = data)
summary(mod_falsch)
##
## Call:
## lm(formula = extra ~ nr_ges_center * prok_center * vertr_center,
## data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.74002 -0.43244 -0.04961 0.43520 1.48942
##
## Coefficients:
## Estimate Std. Error
## (Intercept) 3.371832 0.054627
## nr_ges_center 0.021812 0.068152
## prok_center -0.003785 0.085937
## vertr_center 0.445074 0.099212
## nr_ges_center:prok_center -0.165077 0.108148
## nr_ges_center:vertr_center 0.080309 0.107238
## prok_center:vertr_center 0.092026 0.156887
## nr_ges_center:prok_center:vertr_center -0.095016 0.199032
## t value Pr(>|t|)
## (Intercept) 61.725 < 2e-16 ***
## nr_ges_center 0.320 0.749
## prok_center -0.044 0.965
## vertr_center 4.486 1.47e-05 ***
## nr_ges_center:prok_center -1.526 0.129
## nr_ges_center:vertr_center 0.749 0.455
## prok_center:vertr_center 0.587 0.558
## nr_ges_center:prok_center:vertr_center -0.477 0.634
## ---
## Signif. codes:
## 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.6732 on 145 degrees of freedom
## Multiple R-squared: 0.1454, Adjusted R-squared: 0.1042
## F-statistic: 3.526 on 7 and 145 DF, p-value: 0.001588
mod_korrekt <- lm(extra ~ nr_ges_center + prok_center + vertr_center + nr_ges_center:prok_center:vertr_center, data = data)
summary(mod_korrekt)
##
## Call:
## lm(formula = extra ~ nr_ges_center + prok_center + vertr_center +
## nr_ges_center:prok_center:vertr_center, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.70159 -0.48198 -0.05594 0.42549 1.55172
##
## Coefficients:
## Estimate Std. Error
## (Intercept) 3.37225 0.05447
## nr_ges_center 0.01607 0.06802
## prok_center 0.01132 0.08477
## vertr_center 0.44291 0.09685
## nr_ges_center:prok_center:vertr_center -0.14871 0.19278
## t value Pr(>|t|)
## (Intercept) 61.905 < 2e-16 ***
## nr_ges_center 0.236 0.814
## prok_center 0.134 0.894
## vertr_center 4.573 1.01e-05 ***
## nr_ges_center:prok_center:vertr_center -0.771 0.442
## ---
## Signif. codes:
## 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.6735 on 148 degrees of freedom
## Multiple R-squared: 0.1269, Adjusted R-squared: 0.1033
## F-statistic: 5.38 on 4 and 148 DF, p-value: 0.0004508
Anmerkung: Es ist empfehlenswert, keine Modelle zu bestimmen, in denen Interaktionen niedrigerer Ordnung nicht drin sind.