Regressionsvoraussetzungen mit R prüfen

Arndt Regorz, Dipl. Kfm. & MSc. Psychologie, 23.09.2021


(Hinweis: Mit Anklicken des Videos wird ein Angebot des Anbieters YouTube genutzt.)

Der nachfolgende kommentierte Code berechnet in R eine multiple Regression inklusive der Prüfung der verschiedenen Regressionsvoraussetzungen.

Sie benötigen dafür die folgenden R-Packages, die Sie vor Verwendung jeweils einmalig installieren müssen, z.B. install.packages("olsrr"):

  • olsrr
  • jtools
  • moments
  • lmtest

Im folgenden Code müssen Sie lediglich die fett gedruckten Codebestandteile an Ihre eigenen Variablennamen (im Beispiel: AV, UV1, UV2, UV3) und Dataframenamen (im Beispiel: daten) anpassen, sowie ggf. die Anzahl der gewünschten Nachkommastellen sowie das gewünschte Konfidenzintervall.

Hinweis: Wenn man den ganzen Code auf einmal ausführt, werden manchmal einzelne Grafiken ausgelassen. Ich habe noch nicht rekonstruieren können, woran das liegt. Insofern empfehle ich, den Code schrittweise (eine Grafik auf einmal) auszuführen.


R-Code

# Multiple Regression mit umfassender Prüfung der Voraussetzungen

#Benötigte Packages laden
library(olsrr)
library(jtools)
library(moments)
library(lmtest)

# Aufruf der Regression
# Nur hier sind Anpassungen an Ihre Daten erforderlich

# Regressionsgleichung
reg.fit <- lm(AV ~ UV1 + UV2 + UV3, data = daten)

# Parameter für den Output der Regression
konfidenz <- 0.95
nachkomma <- 3

# Daten für die graphische Linearitätsprüfung
attach(daten)
daten.plot <- data.frame(AV, UV1, UV2, UV3)
detach(daten)

# 1 Ausgabe (mit jtools-Package)

# 1.1 Unstandardisierte Ergebnisse
summ(reg.fit, confint=TRUE, ci.width = konfidenz,
digits = nachkomma)

# 1.2 Standardisierte Ergebnisse
summ(reg.fit, scale=TRUE, transform.response = TRUE, digits=nachkomma)

# 2 Regressionsdiagnostik (mit olsrr-Package, soweit nicht anders angegeben)

# 2.1 Homoskedastizität

# 2.1.1 Graphischer Test
# (sollte eine chaotische Punktwolke sein; problematisch insbesondere
# ein "liegender Trichter" oder eine erkennbar gebogene Struktur)
ols_plot_resid_fit(reg.fit)

# 2.1.2 Breusch Pagan Test - Signifikanztest auf Heteroskedastizität
# (signifikant => Heteroskedastizität)
ols_test_breusch_pagan(reg.fit)

# 2.2 Normalverteilung der Residuen

# 2.2.1 Histogramm der Residuen
# (Histogramm sollte möglichst nahe an der
# Normalverteilung liegen,
# vor allem an den beiden Außenrändern der Verteilung)
ols_plot_resid_hist(reg.fit)

# 2.2.2 QQ-Plot
# (Punkte sollten möglichst nahe an der Diagonalen liegen)
ols_plot_resid_qq(reg.fit)

# 2.2.3 Shapiro-Wilk-Test auf Normalverteilung
# (signifikant => Residuen nicht normalverteilt)
shapiro.test(reg.fit$residuals)

# 2.2.4 Schiefe und Kurtosis (mit moments-Package)
#(Bei Normalverteilung skewness nahe 0 und kurtosis nahe 3)
skewness(reg.fit$residuals)
kurtosis(reg.fit$residuals)

# 2.2.5 Signifikanztests für Schiefe und Kurtosis
#(mit moments-Package)
#(signifikant = Residuen nicht normalverteilt)
agostino.test(reg.fit$residuals)
anscombe.test(reg.fit$residuals)

# 2.3 Linearität

# 2.3.1 Paarweises Streudiagramm
# (relevant sind nur diejenigen Streudiagramme,
# die die Kriteriumsvariable mit einschließen)
pairs(daten.plot, pch = 19, lower.panel = NULL)

# 2.3.2 Rainbow-Test (mit lmtest-Package) auf Linearität
# (signifikant => Verletzung der Linearität)
raintest(reg.fit)

# 2.4 Abwesenheit von starker Multikollinearität

# (Problematisch: VIF-Werte über 10.0)
ols_vif_tol(reg.fit)

# 2.5 Ausreißerdiagnostik

# 2.5.1 Studentisierte Residuen
# (problematisch: Werte absolut über 3 )
ols_plot_resid_stud(reg.fit)

# 2.5.2 Cook's Distanz
# (unterschiedliche Cut-Off-Werte in der Literatur
# die Voreinstellung hier 4/N ist extrem konservativ,
ols_plot_cooksd_chart(reg.fit)

# 2.5.3 Outlier & Leverage
# (problematisch insbesondere Werte: "outlier & leverage")
ols_plot_resid_lev(reg.fit)

# 2.5.4 DiffBeta
# (Welche Beobachtungen haben einen großen Einfluss auf die
# Parameterschätzung?)
ols_plot_dfbetas(reg.fit)

# 2.6. Unabhängigkeit/Unkorreliertheit der Residuen

# Die Unabhängigkeit der Residuen ergibt sich aus der
# Stichprobenziehung (Querschnittsdesign ohne
# Cluster/hierarchische Datenstrukturen).

# 2.7 Skaleneigenschaften

# Die Eignung der Skaleneigenschaften ergibt sich aus
# der Betrachtung der verwendeten Skalen
# (keine empirische Prüfung).



Dokumentation der verwendeten R-Packages:

olsrr:
https://cran.r-project.org/web/packages/olsrr/olsrr.pdf

jtools:
https://cran.r-project.org/web/packages/jtools/jtools.pdf

moments:
https://cran.r-project.org/web/packages/moments/moments.pdf

lmtest:
https://cran.r-project.org/web/packages/lmtest/lmtest.pdf