Wie erstellt man eine Regressionsanalyse in R?
In diesem Beitrag
Was ist eine lineare Regressionsanalyse?
Eine Regressionsanalyse in R lässt sich mit wenigen Zeilen Code durchführen – der zentrale Befehl lautet lm(). Dahinter steckt deutlich mehr, als es auf den ersten Blick scheint: Das Modell muss sorgfältig spezifiziert, der Output korrekt gelesen und die Annahmen systematisch geprüft werden.
Die lineare Regression modelliert den Zusammenhang zwischen einer abhängigen Variable (Kriterium) und einer oder mehreren unabhängigen Variablen (Prädiktoren). Formal beschreibt das Modell die Zielvariable als lineare Kombination der Prädiktoren plus einen Fehlerterm:
Einfaches lineares Regressionsmodell
Dabei ist der Achsenabschnitt (Intercept), der Regressionskoeffizient und der Residualfehler. Bei der multiplen Regression erweitert sich dieses Modell um weitere Prädiktoren .
R eignet sich hervorragend für Regressionsanalysen – sowohl für einfache Modelle in Bachelorarbeiten als auch für komplexe Designs in Dissertationen. Falls Sie noch am Anfang mit R stehen, lohnt ein Blick auf unseren Beitrag Was ist R und wofür wird es in der Statistik verwendet?
Daten vorbereiten und laden
Bevor Sie ein Modell schätzen, müssen Ihre Daten in R vorliegen und auf Vollständigkeit geprüft sein. Fehlende Werte können das Ergebnis verzerren – R’s lm() entfernt standardmäßig alle Zeilen mit fehlenden Werten (na.action = na.omit), was bei vielen NAs zu einem erheblichen Datenverlust führt.
Ein typischer Einstieg sieht so aus:
# Daten laden (z.B. aus einer CSV-Datei)
daten <- read.csv("meine_daten.csv")
# Überblick verschaffen
str(daten)
summary(daten)
# Fehlende Werte prüfen
colSums(is.na(daten))
Wie Sie Daten grundsätzlich in R importieren, erläutert unser Artikel Wie importiert man Daten in R? Der Umgang mit fehlenden Werten ist ein eigenes Thema – mehr dazu finden Sie in unserem Beitrag Wie geht man mit fehlenden Werten in R um?
Das Modell mit lm() schätzen
Das Herzstück jeder Regressionsanalyse in R ist die Funktion lm() aus dem vorinstallierten stats-Paket. Laut offizieller Dokumentation ist lm() die zentrale R-Funktion zur Schätzung linearer Modelle und deckt neben der Regression auch einfaktorielle Varianzanalyse und Kovarianzanalyse ab.
Die Modellformel verstehen
Das wichtigste Argument ist die Formel. Sie beschreibt symbolisch, welche Variablen wie miteinander verknüpft werden:
- y ~ x → einfache Regression: y wird durch x vorhergesagt
- y ~ x1 + x2 → multiple Regression mit zwei Prädiktoren
- y ~ x1 * x2 → Haupteffekte und Interaktionsterm
- y ~ x1 + I(x1^2) → quadratischer Term (Polynom)
- y ~ . → alle übrigen Variablen im Datensatz als Prädiktoren
Einfaches Regressionsmodell berechnen
Ein konkretes Beispiel: Sie möchten untersuchen, ob das Alter einer Person (alter) deren Einkommen (einkommen) vorhersagt:
# Einfaches lineares Regressionsmodell
modell <- lm(einkommen ~ alter, data = daten)
# Ergebniszusammenfassung
summary(modell)
Das erzeugte lm-Objekt speichert alle Modellinformationen. Über spezialisierte Funktionen können Sie gezielt darauf zugreifen:
| Funktion | Was sie liefert |
|---|---|
| summary(modell) | Vollständige Ergebnisübersicht (Koeffizienten, R², p-Werte) |
| coef(modell) | Nur die Regressionskoeffizienten |
| fitted(modell) | Vorhergesagte Werte (Fitted Values) |
| residuals(modell) | Residuen (Abweichungen der Beobachtungen vom Modell) |
| vcov(modell) | Varianz-Kovarianz-Matrix der Koeffizienten |
| predict(modell) | Vorhersagen für neue Datenpunkte |
| anova(modell) | Varianzanalysetabelle |
Output mit summary() lesen
Der Output von summary(modell) enthält alle wesentlichen Kennzahlen. Ein typisches Ergebnis sieht so aus:
Call:
lm(formula = einkommen ~ alter, data = daten)
Residuals:
Min 1Q Median 3Q Max
-2105.3 -512.4 45.2 489.7 2341.1
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 18542.10 432.15 42.91 <2e-16 ***
alter 312.47 11.83 26.41 <2e-16 ***
Residual standard error: 748.3 on 197 degrees of freedom
Multiple R-squared: 0.7798, Adjusted R-squared: 0.7787
F-statistic: 697.5 on 1 and 197 DF, p-value: < 2.2e-16
Die wichtigsten Kennzahlen im Überblick
- Estimate (Intercept): Der vorhergesagte Wert von y, wenn x = 0. Hier: 18.542 € Grundeinkommen.
- Estimate (alter): Pro zusätzlichem Lebensjahr steigt das Einkommen um 312 €.
- Std. Error: Standardfehler des Koeffizienten – je kleiner, desto präziser die Schätzung.
- t value & Pr(>|t|): Teststatistik und p-Wert für den Test, ob der Koeffizient signifikant von null abweicht.
- Multiple R-squared: Erklärte Varianz. Hier erklärt das Alter 77,98 % der Einkommensvarianz.
- Adjusted R-squared: Korrigiertes R² – relevanter bei multiplen Modellen, da es die Anzahl der Prädiktoren berücksichtigt.
- F-statistic & p-value: Globaler Modelltest – ist das Modell insgesamt signifikant besser als das Nullmodell?
Eine ausführliche Anleitung zur Interpretation aller Kennzahlen finden Sie in unserem Beitrag Wie interpretiert man den R-Output einer Regression?
Modellannahmen prüfen
Lineare Regressionsmodelle setzen mehrere Annahmen voraus. Werden diese verletzt, sind die Schätzer und Inferenzaussagen möglicherweise nicht valide. Die wichtigsten Annahmen sind:
- Linearität: Der Zusammenhang zwischen Prädiktoren und Kriterium ist linear.
- Normalverteilung der Residuen: Die Fehler sind näherungsweise normalverteilt.
- Homoskedastizität: Die Varianz der Residuen ist über alle Prädiktorwerte konstant.
- Unabhängigkeit der Residuen: Keine systematische Autokorrelation.
- Keine perfekte Multikollinearität: Die Prädiktoren sind nicht vollständig linear abhängig.
Diagnostikplots mit plot()
R’s Basisfunktion plot() liefert vier Standardgrafiken zur Modelldiagnostik:
# Vier Diagnostikplots auf einmal anzeigen
par(mfrow = c(2, 2))
plot(modell)
Die vier Plots im Überblick:
- Residuals vs. Fitted: Prüfung auf Linearität und Homoskedastizität – die Punkte sollten zufällig um die Nulllinie streuen.
- Normal Q-Q: Prüfung der Normalverteilung – Punkte sollten nah an der Diagonalen liegen.
- Scale-Location: Erneute Prüfung der Homoskedastizität mit Wurzel der standardisierten Residuen.
- Residuals vs. Leverage: Identifikation einflussreicher Datenpunkte (Cook’s Distance).
Erweiterte Diagnostik mit car und lmtest
Für wissenschaftliche Arbeiten reicht die Basisdiagnostik oft nicht aus. Zwei Pakete erweisen sich in der Praxis als besonders nützlich.
Das Paket car: Companion to Applied Regression
Das Paket car ergänzt lm() um methodisch fundierte Diagnostikfunktionen. Es ist eng an das Standardlehrbuch zur angewandten Regressionsanalyse angelehnt und deckt typische Fragestellungen wie Einflussdiagnostik, robuste Auswertungen und Modellprüfungen ab.
# car installieren und laden
install.packages("car")
library(car)
# Varianzinflationsfaktor (VIF) – Multikollinearität prüfen
# Werte deutlich über 5 oder 10 deuten auf Multikollinearität hin
vif(modell_multiple)
# Levene-Test auf Varianzhomogenität
leveneTest(einkommen ~ gruppe, data = daten)
# Einflussreiche Fälle identifizieren
influencePlot(modell)
Wichtig: Das car-Paket liefert Zusatzdiagnostik, ersetzt aber nicht die inhaltliche Begründung der Modellwahl. Welche Prädiktoren ins Modell aufgenommen werden, muss immer theoretisch und anhand des Studiendesigns begründet werden – nicht allein durch statistische Kriterien.
Das Paket lmtest: Formale Tests für Modellannahmen
Für formale statistische Tests der Modellannahmen bietet das Paket lmtest eine strukturierte Sammlung diagnostischer Verfahren. Es ist als spezialisiertes Werkzeug zur systematischen Prüfung linearer Regressionsmodelle konzipiert und liefert unter anderem Tests auf Autokorrelation und Heteroskedastizität.
# lmtest installieren und laden
install.packages("lmtest")
library(lmtest)
# Breusch-Pagan-Test auf Heteroskedastizität
# H0: Homoskedastizität; signifikantes Ergebnis = Heteroskedastizität
bptest(modell)
# Breusch-Godfrey-Test auf Autokorrelation
# Besonders relevant bei Zeitreihendaten
bgtest(modell)
# Koeffizienteninferenz mit robusten Standardfehlern
coeftest(modell)
Methodisch gilt: Formale Tests wie der Breusch-Pagan-Test sollten nie mechanisch interpretiert werden. Bei großen Stichproben reagieren sie sehr sensitiv auf kleine Verletzungen, die inhaltlich bedeutungslos sein können. Betrachten Sie Testergebnisse immer zusammen mit Residuenplots, Studiendesign und Stichprobengröße.
Multiple Regression: mehrere Prädiktoren
Die multiple Regression funktioniert in R genauso wie die einfache – Sie erweitern lediglich die Formel um weitere Prädiktoren:
Multiples Regressionsmodell
# Multiples Regressionsmodell mit drei Prädiktoren
modell_multiple <- lm(einkommen ~ alter + bildungsjahre + berufserfahrung,
data = daten)
summary(modell_multiple)
# Modellvergleich: Trägt berufserfahrung zur Erklärung bei?
modell_basis <- lm(einkommen ~ alter + bildungsjahre, data = daten)
anova(modell_basis, modell_multiple)
Modellvergleich mit anova()
Der anova()-Befehl vergleicht zwei geschachtelte Modelle per F-Test. Ein signifikantes Ergebnis zeigt an, dass das größere Modell die Zielvariable signifikant besser erklärt als das kleinere. Das ist besonders nützlich, wenn Sie systematisch prüfen möchten, ob ein zusätzlicher Prädiktor einen echten Beitrag leistet.
Standardisierte Koeffizienten berechnen
Die unstandardisierten Koeffizienten aus lm() sind abhängig von der Skala der Variablen und daher nicht direkt vergleichbar. Für Abschlussarbeiten werden häufig standardisierte Beta-Gewichte erwartet:
# Standardisierte Koeffizienten über z-Transformation der Daten
daten_std <- as.data.frame(scale(daten[, c("einkommen", "alter",
"bildungsjahre", "berufserfahrung")]))
modell_std <- lm(einkommen ~ alter + bildungsjahre + berufserfahrung,
data = daten_std)
summary(modell_std)
Wie Sie Effektstärken für Regressionsmodelle berechnen und berichten, erläutert unser Beitrag Wie berechnet man Effektstärken in R?
Ergebnisse visualisieren
Für die Darstellung von Regressionsgeraden und Prädiktionsintervallen empfiehlt sich das Paket ggplot2. Eine einfache Visualisierung der Regressionsgerade gelingt so:
library(ggplot2)
ggplot(daten, aes(x = alter, y = einkommen)) +
geom_point(alpha = 0.5) +
geom_smooth(method = "lm", se = TRUE, color = "steelblue") +
labs(
title = "Lineare Regression: Einkommen ~ Alter",
x = "Alter (Jahre)",
y = "Einkommen (€)"
) +
theme_minimal()
Das Argument se = TRUE fügt das Konfidenzband um die Regressionsgerade hinzu. Eine detaillierte Einführung in Visualisierungen mit ggplot2 bietet unser Artikel Wie erstellt man Diagramme in R mit ggplot2?
Tipps für die Abschlussarbeit
Regressionsanalysen in Abschlussarbeiten scheitern selten an der Berechnung selbst – häufiger an der Dokumentation, der Annahmenprüfung oder der Interpretation. Folgende Punkte sollten Sie beachten:
Checkliste: Regressionsanalyse in der Abschlussarbeit
- Forschungsfrage und Hypothesen klar formuliert, bevor das Modell spezifiziert wird
- Datensatz auf fehlende Werte und Ausreißer geprüft
- Modellformel theoretisch begründet (warum diese Prädiktoren?)
- Alle vier Diagnostikplots via plot(modell) geprüft und kommentiert
- Multikollinearität bei multiplen Modellen via VIF geprüft
- Homoskedastizität formal getestet (z.B. Breusch-Pagan)
- Unstandardisierte UND standardisierte Koeffizienten berichtet
- R² und adjustiertes R² angegeben und inhaltlich eingeordnet
- Effektstärken (z.B. f²) ergänzt
- Ergebnistabelle APA-konform formatiert und exportiert
Wie Sie R-Ergebnisse sauber für Ihre Abschlussarbeit aufbereiten, zeigt unser Beitrag Wie exportiert man R-Ergebnisse für eine Abschlussarbeit? Falls Sie sich fragen, ob R oder SPSS für Ihre Arbeit besser geeignet ist, lesen Sie unseren Vergleich Ist R besser als SPSS für Abschlussarbeiten?
Wenn Sie unsicher sind, ob Ihr Regressionsmodell korrekt spezifiziert ist oder die Annahmen Ihrer Daten erfüllt sind, unterstützt Sie das Team von QuantExpert bei der methodischen Begleitung Ihrer statistischen Auswertung in R – von der Modellplanung bis zur Ergebnisinterpretation.