---
title: "Review-Tutorial Multiple lineare Regression"
author:
- name: "Markus Geuss"
affiliation: "Fernfachhochschule Schweiz"
title-block-banner: ./images/ffhs-farbwelt-verlauf_01.jpg
lang: de
format:
html:
logo: ./images/FFHS_Logo.png
include-in-header:
text: |
<style>
.title { color: white !important; }
.subtitle { color: white !important; }
.quarto-title-banner .quarto-title {
padding-left: 160px;
}
</style>
<script>
document.addEventListener('DOMContentLoaded', function () {
var banner = document.querySelector('.quarto-title-banner');
if (banner) {
banner.style.position = 'relative';
var logo = document.createElement('img');
logo.src = './images/FFHS_Logo.png';
logo.style.cssText = [
'position: absolute',
'left: 0px',
'top: 50%',
'transform: translateY(-50%)',
'height: 75px',
'width: auto',
'z-index: 10',
'filter: brightness(0) invert(1)'
].join(';');
banner.insertBefore(logo, banner.firstChild);
}
});
</script>
<style>
.title { color: white !important; }
.subtitle{ color: white !important; }
.aufgabe {
background-color: #eaf3fb;
border: 1px solid #b8d4ea;
border-radius: 6px;
padding: 1rem 1.25rem;
margin: 1.5rem 0;
}
.aufgabe summary {
cursor: pointer;
font-weight: 600;
color: #0d6efd;
padding: 0.4rem 0;
}
.aufgabe summary:hover { text-decoration: underline; }
.aufgabe details[open] summary { margin-bottom: 0.5rem; }
</style>
theme: cosmo
toc: true
toc-title: "Inhaltsverzeichnis"
toc-depth: 3
toc-location: right
code-fold: true
code-tools: true
self-contained: false
execute:
message: false # unterdrückt Messages
warning: false # (optional) unterdrückt Warnungen
editor: visual
---
::: {.callout-tip title="Lernziele"}
Nach dem Erarbeiten des Tutorials sind Sie in der Lage …
1. die konzeptionellen Ideen und mathematischen Grundlagen der multiplen linearen Regression (MLR) zu erläutern.
2. Datensätze für MLR vorzubereiten und auf Eignung zu prüfen.
3. explorative Datenanalysen durchzuführen und Zusammenhänge zu visualisieren.
4. ein MLR‑Modell in R zu implementieren und zu testen.
5. Modellvoraussetzungen (Linearität, Homoskedastizität, Unabhängigkeit, Normalverteilung, Multikollinearität) zu prüfen.
6. Modellgütemasse ($R^2$), adjusted $R^2$, AIC, F‑Test zu erklären und zu interpretieren.
7. Ergebnisse fachgerecht zu interpretieren und Vorhersagen zu treffen.
:::
## Motivation
Stell dir vor, ein Unternehmen möchte das Jahresgehalt seiner Angestellten vorhersagen. Es ist naheliegend, dass Faktoren wie Berufserfahrung und Qualifikationsniveau einen Einfluss haben. Doch wie stark beeinflussen diese Variablen das Gehalt tatsächlich? Gibt es noch andere Einflussfaktoren?
Mit der MLR können wir diese Fragen beantworten. Wir können
- quantifizieren, wie stark jeder Faktor das Gehalt beeinflusst,
- Vorhersagen für neue Datenpunkte treffen,
- herausfinden, ob einige Faktoren wichtiger sind als andere.
## Die Idee der MLR
Die MLR erweitert die einfache lineare Regression und beschreibt die Zielvariable ($Y$) als Linearkombination der Prädiktoren ($X_1, \dots, X_p$):
$$Y = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \dots + \beta_p X_p + \epsilon,$$
wobei $Y$ die Zielvariable, $X_j$ die Prädiktoren, $\beta_j$ die Regressionskoeffizienten und $\epsilon$ der Fehlerterm ist. Aus einer einfachen Geraden im Streudiagramm wird somit eine (Hyperebene) im Raum um die die Datenpunkte streuen.
```{r}
#| label: setup
#| include: false
# Häufig genutzte Pakete laden (Installation extern verwalten)
library(ggplot2)
library(plotly)
suppressPackageStartupMessages(library(car))
library(carData)
library(GGally)
library(stargazer)
```
```{=html}
<div style="background-color: #e6f7ff; padding: 1em; border-radius: 10px; margin: 2em 0;">
<h3 style="margin-top: 0;">Verständnisfrage: Ziel der MLR</h3>
<p>Was ist das Ziel der multiplen linearen Regression?</p>
<p>
a) Das Finden von Beziehungen zwischen einer abhängigen und mehreren unabhängigen Variablen.<br>
b) Das Erstellen von Entscheidungsbäumen.<br>
c) Die Normalisierung von Daten.<br>
</p>
<details>
<summary>Antwort anzeigen</summary>
<p>Richtige Antwort: a) Wir wollen ein mehrdimensionales lineares Modell aufstellen, das die Abhängigkeit einer abhängigen Variablen von mehreren unabhängigen Variablen beschreibt. Geometrisch entspricht dies einer Hyperebene.</p>
</details>
</div>
```
## Fallstudie
Wir analysieren, wie das Jahresgehalt eines Mitarbeiters (`Annu_Salary`) von zwei Faktoren beeinflusst wird:
- Berufserfahrung (`Expe_Yrs`)
- Qualifikationsniveau (`Skill_lev`)
### Daten einlesen
```{r}
#| label: read-data
#| message: false
sal_data_1 <- read.csv("data/Sal1.txt", header = TRUE, sep = ",")
str(sal_data_1)
summary(sal_data_1)
```
(Wer selbst mit dem Datensatz arbeiten möchte: [`Sal1.txt`](data/Sal1.txt){.btn .btn-outline-secondary .btn-sm download=""} – Ergänzende Textdaten.)
## Explorative Datenanalyse
**Streudiagramm‑Matrix mit Korrelation**
```{r}
#| label: ggpairs
#| fig-cap: "Streudiagramm-Matrix: Berufserfahrung, Qualifikationsniveau und Jahresgehalt"
GGally::ggpairs(
sal_data_1[, c("Expe_Yrs", "Skill_lev", "Annu_Salary")],
title = "Streudiagramm-Matrix: Erfahrung, Qualifikationsniveau und Jahresgehalt",
upper = list(continuous = "cor"),
lower = list(continuous = "points"),
diag = list(continuous = "densityDiag")
)
```
```{=html}
<div style="background-color: #e6f7ff; padding: 1em; border-radius: 10px; margin: 2em 0;">
<h3 style="margin-top: 0;">Verständnisfrage: Streudiagramm‑Matrix</h3>
<p>Welche der folgenden Aussagen ist basierend auf der Streudiagramm‑Matrix plausibel?</p>
<p>
a) Das Qualifikationsniveau zeigt keinen Zusammenhang mit dem Gehalt.<br>
b) Die Prädiktoren sind vollständig unabhängig voneinander.<br>
c) Es gibt eine starke positive Korrelation zwischen Berufserfahrung und Jahresgehalt. <br>
</p>
<details>
<summary>Antwort anzeigen</summary>
<p>Richtige Antwort: c) Die Matrix zeigt einen klaren positiven linearen Zusammenhang zwischen Berufserfahrung und Jahresgehalt.</p>
</details>
</div>
```
*Anmerkung:* Die "Density", die hier als kontinuierliche Funktion in der Matrix dargestellt wird ist die Wahrscheinlichkeitsdichtefunktion der jeweiligen Variablen:
$$f(x) = \lim_{h\rightarrow 0} P(x \leq X \leq x+h) / h$$
.
## Visualisierung in 3D mit Plotly
```{r}
#| label: plotly-3d
#| fig-cap: "3D-Visualisierung: Erfahrung, Qualifikationsniveau und Jahresgehalt"
plot_ly(
sal_data_1,
x = ~Expe_Yrs,
y = ~Skill_lev,
z = ~Annu_Salary,
type = "scatter3d",
mode = "markers",
marker = list(size = 5, color = ~Annu_Salary, colorscale = "Viridis")
) %>%
layout(
title = "3D-Visualisierung: Erfahrung, Qualifikationsniveau und Jahresgehalt",
scene = list(
xaxis = list(title = "Berufserfahrung (Jahre)"),
yaxis = list(title = "Qualifikationsniveau"),
zaxis = list(title = "Jahresgehalt")
)
)
```
Geometrisch ist das MLR‑Modell eine (Hyper-)Ebene, die die Daten annähert.
Erinnern wir uns daran, dass geometrisch unser zu berechnendes Modell der multiplen linearen Regression eine Hyperebene im Raum darstellt, um die Daten zu modellieren. Drehen wir hier den Betrachtungspunkt unserer 3D Darstellung, sehen wir schon, dass die Punkte offenbar (visuell) gut in einer Ebene liegen.
## Diskussion der Ergebnisse der Explorativen Datenanalyse
Die Streudiagramm-Matrix kombiniert Streudiagramme und Korrelationen, um uns ein klares Bild von den Beziehungen zwischen den Variablen zu geben. Betrachten wir die wichtigsten Beobachtungen:
1. Hohe positive Korrelationen:
- Berufserfahrung (`Expe_Yrs`) und Jahresgehalt (`Annu_Salary`): Die Korrelation von 0.989 zeigt einen starken positiven linearen Zusammenhang. Das bedeutet, dass mehr Erfahrung tendenziell mit einem höheren Gehalt einhergeht.
- Qualifikationsniveau (`Skill_lev`) und Jahresgehalt (`Annu_Salary`): Eine Korrelation von 0.941 deutet ebenfalls auf einen starken positiven Zusammenhang hin.
2. Zusammenhang zwischen den Prädiktoren: Berufserfahrung und Qualifikationsniveau zeigen eine hohe Korrelation von 0.892. Das könnte auf Multikollinearität hinweisen, die in der Modellbildung berücksichtigt werden muss.
3. Verteilungen der Variablen: Die Verteilungen auf der Diagonale zeigen uns die Eigenschaften der einzelnen Variablen:
- Berufserfahrung und Qualifikationsniveau sind gleichmässig verteilt.
- Das Jahresgehalt hat eine leichte Konzentration im Bereich von 10.000 bis 15.000.
## Modellbildung (MLR)
Nach der explorativen Datenanalyse erstellen wir nun ein lineares Regressionsmodell, um die Beziehung zwischen den Prädiktoren (Berufserfahrung, Qualifikationsniveau) und der Zielvariablen (Jahresgehalt) formal zu modellieren.
1. Erstellung des Regressionsmodells
Wir verwenden die Funktion lm() in R, um ein lineares Regressionsmodell zu erstellen.
```{r}
#| label: fit-model
sal_model_1 <- lm(Annu_Salary ~ Expe_Yrs + Skill_lev, data = sal_data_1)
summary(sal_model_1)
```
## Modellvoraussetzungen – Übersicht
Damit wir die Koeffizienten unseres Modells und seine Güte seriös beurteilen können, müssen wir die Modellvoraussetzungen prüfen.
Zu ihnen zählen:
1. Lineare Beziehung zwischen den Prädiktoren und der abhängigen Variablen.
2. Homoskedastizität (konstante Varianz der Fehler/Residuen).
3. Unabhängigkeit der Fehler/Residuen (keine Autokorrelation).
4. Normalverteilung der Residuen.
5. Multikollinearität der Prädiktoren
### 1) Linearität – Component‑Residual‑Plots
Lineare Beziehungen können mit Komponent-Residuen-Diagrammen (crPlots) getestet werden.
Hierbei muss man sich die geometrische Interpretation des Modells vor Augen führen. Unser Modell ist eine Hyperebene im (Hyper)Raum (vergleiche unsere plotly Darstellung!), die unsere Datenpunkte so gut wie möglich beschreiben soll. Stellen wir uns vor, es gäbe z.B.Nichtlinearitäten in den Daten (Wellen, Krümmungen etc.) dann wäre ein lineares Modell ein schlechtes Modell. Die Komponenten-Residuen-Diagramme helfen dabei, dies zu evaluieren. Geometrisch können wir uns qualitativ vorstellen, dass für jedes Diagramm die Hyperebene so betrachtet wird, dass die Einflüsse der nicht betrachteten Prädiktoren herausgerechnet sind. D.h. wir sehen nur den Einfluss des jeweils dargestellten Prädiktors. Diese müssen linear sein.
Wie sehen sie für unsere beiden Prädiktoren aus?
```{r}
#| label: crplots
car::crPlots(sal_model_1)
```
Wir sehen nur in dem Qualifikationsniveau (Skill_lev) eine gewisse Welligkeit, aber weitgehend eine lineare Abhängigkeit $\rightarrow$ erfüllt.
### 2) Homoskedastizität – Scale‑Location‑Plot
Für die Homoskedastizität schauen wir uns den sog. Scale Location Plot an:
```{r}
#| label: scale-location
plot(sal_model_1, which = 3)
```
### Was zeigt der Scale-Location-Plot?
Der Scale-Location-Plot stellt die Wurzel der standardisierten Residuen auf der y-Achse und die angepassten Werte (fitted values) auf der x-Achse dar.
#### Mathematische Grundlage:
1. **Standardisierte Residuen (**$r_i$):
$$r_i = \frac{e_i}{\hat{\sigma}}$$
wobei $e_i$ die Residuen und $\hat{\sigma}$ die geschätzte Standardabweichung der Residuen ist.
2. **Darstellung im Plot:**
- **x-Achse**: Angepasste Werte ($\hat{Y}_i$).
- **y-Achse**: Die Wurzel der absoluten standardisierten Residuen:
$$y = \sqrt{|r_i|}$$
Wenn die Punkte zufällig gestreut sind, ist die Annahme der Homoskedastizität erfüllt.
Ziel dieses Plots ist es zu überprüfen, ob die Varianz der Residuen über den Bereich der angepassten Werte hinweg konstant bleibt. Interpretation des Scale-Location-Plots:
1. Randomisierte Verteilung der Punkte: Wenn die Punkte zufällig um eine nahezu horizontale Linie verteilt sind, zeigt dies an, dass die Varianz der Fehler/Residuen über den gesamten Bereich der angepassten Werte konstant ist. Dies unterstützt die Annahme der Homoskedastizität.
2. Zunehmende oder abnehmende Streuung: Falls die Punkte eine systematische Form aufweisen, wie z.B. einen Trichter (Verengung oder Verbreiterung), deutet dies auf Heteroskedastizität hin, d.h. die Varianz der Fehler/Residuen ändert sich in Abhängigkeit von den angepassten Werten.
3. Zweck: Der Plot hilft uns zu erkennen, ob es Muster in der Varianz der Fehler gibt, die möglicherweise auf Heteroskedastizität hinweisen.
Bei unserem Modell: Die Residuen sehen zufällig streuend aus. Auch dies können wir testen, mit dem Non-constant Variance Score Test. Hier ist die Nullhypothese, dass die Bedingung der Homoskedastizität erfüllt ist (= Varianz der Residuen konstant ist).
```{r}
ncvTest(sal_model_1)
```
Die Nullhypothese kann nicht verworfen werden kann, da der p-Wert höher als 0.05 liegt. Homoskedastizität darf folglich angenommen werden.
```{=html}
<div style="background-color: #e6f7ff; padding: 1em; border-radius: 10px; margin: 2em 0;">
<h3 style="margin-top: 0;">Verständnisfrage: Homoskedastizität</h3>
<p>Warum ist die Homoskedastizität eine wichtige Annahme?</p>
<p>
a) Sie prüft den Zusammenhang zwischen Prädiktoren und Zielvariable.<br>
b) Sie fordert eine konstante Varianz der Residuen über den Wertbereich der (angepassten) Werte und erlaubt unverzerrte, effiziente Schätzungen.<br>
c) Sie garantiert die Normalverteilung der Residuen.<br>
d) Sie minimiert den Einfluss von Ausreissern.<br>
</p>
<details>
<summary>Antwort anzeigen</summary>
<p>Richtige Antwort: b) Konstante Varianz der Residuen über den ganzen Wertebereich ist zentral für valide Standardfehler und Tests.</p>
</details>
</div>
```
### 3) Unabhängigkeit der Residuen – keine Autokorrelation - Durbin‑Watson Test
Eine wichtige Annahme der linearen Regression ist, dass die Fehlerterme (Residuen) des Modells **unabhängig** voneinander sind. Dies bedeutet, dass der Fehler eines Datenpunkts **nicht** mit den Fehlern der anderen Datenpunkte korreliert. Wenn diese Annahme verletzt wird, spricht man von\*\* Autokorrelation\*\*.
Mit dem Durbin-Watson Test können wir auf Autokorrelation testen:
```{r}
#| label: dwtest
car::durbinWatsonTest(sal_model_1)
```
Interpretation des Durbin-Watson-Tests:
- Werte nahe 2: Keine Autokorrelation.
- Werte unter 2: Positive Autokorrelation (Fehler in aufeinanderfolgenden Beobachtungen sind ähnlich).
- Werte über 2: Negative Autokorrelation (Residuen wechseln zwischen positiven und negativen Werten).
Wenn der Durbin-Watson-Wert **signifikant** (p-Wert \<0.05 -\> Autokorrelation) von 2 abweicht, deutet dies auf das Vorhandensein von Autokorrelation hin, d.h. man muss sich die Residuen der jeweiligen Prädiktoren ansehen und überlegen, woher diese kommen könnten.
Unser Wert von 0.2987 ist deutlich unter 2. Dies deutet also auf eine positive Autokorrelation hin. D.h., dass Abweichungen vom Modell (Fehler/Residuen) bei Berufserfahrung und Qualifikationsniveau (teilweise) systematisch erfolgen. Diese Voraussetzung ist also nur teilweise erfüllt.
Für eine weitere Vertiefung siehe: [Auszug Durbin Wason Test Hedderich Sachs](www/Auszug_Durbin_Watson_Test_Hedderich_2020.pdf)
```{=html}
<div style="background-color: #e6f7ff; padding: 1em; border-radius: 10px; margin: 2em 0;">
<h3 style="margin-top: 0;">Verständnisfrage: Unabhängigkeit der Residuen</h3>
<p>Warum ist die Annahme der Unabhängigkeit der Residuen wichtig?</p>
<p>
a) Sie verhindert systematische Beziehungen zwischen Fehlern und sichert die Gültigkeit der Inferenz.<br>
b) Sie minimiert den Einfluss von Ausreissern.<br>
c) Sie zeigt an, dass keine Nichtlinearitäten vorliegen.<br>
d) Sie stellt konstante Varianz der Fehler sicher.<br>
</p>
<details>
<summary>Antwort anzeigen</summary>
<p>Richtige Antwort: a) Wenn Residuen nicht unabhängig sind (Autokorrelation), entstehen systematische Beziehungen zwischen Fehlern, was die Standardfehler verzerrt und statistische Tests ungültig macht.</p>
</details>
</div>
```
### 4) Normalverteilung der Residuen – QQ‑Plot & Shapiro‑Wilk Test
Diese Bedingung haben wir schon früher bei der linearen Einfachregression analysiert. Fertigen wir den QQ-Plot an.
```{r}
#| label: qqplot
plot(sal_model_1, which = 2)
```
Der visuelle Eindruck des Residuenplotts zeigt für die aussenliegenden Quantilen Abweichungen. Deshalb testen wir mit dem **Shapiro-Wilk-Test auf Normalverteilung der Residuen**.
```{r}
#| label: shapiro
shapiro.test(residuals(sal_model_1))
```
Beim Shapiro-Wilk Test ist die Nullhypothese, dass die Normalverteilungsannahme bestand hat. Da hier der p-Wert über 0.05 liegt, verwerfen wir die Nullhypothese knapp nicht.
```{=html}
<div style="background-color: #e6f7ff; padding: 1em; border-radius: 10px; margin: 2em 0;">
<h3 style="margin-top: 0;">Verständnisfrage: Linearität</h3>
<p>Warum ist die Überprüfung der Linearität wichtig?</p>
<p>
a) Sie ermöglicht die Identifikation nichtlinearer Beziehungen, die ggf. durch Transformation oder andere Modelle besser abgebildet werden.<br>
b) Sie hilft primär bei der Erkennung von Ausreissern.<br>
c) Sie ist nur für die Signifikanz der Koeffizienten wichtig.<br>
d) Sie stellt sicher, dass die Residuen normalverteilt sind.<br>
</p>
<details>
<summary>Antwort anzeigen</summary>
<p>Richtige Antwort: a) Die Linearitätsannahme betrifft die Form des Zusammenhangs zwischen Prädiktoren und Zielvariable.</p>
</details>
</div>
```
### 5) Multikollinearität (VIF)
Multikollinearität tritt auf, wenn unabhängige Variablen stark miteinander korrelieren. Die macht es jedoch schwierig, die isolierten Effekte jeder Variablen auf die Zielvariable zu schätzen. Dies führt zu Instabilität in den Koeffizienten, das heisst, kleine Änderungen in den Daten können zu grossen Schwankungen bei den Koeffizienten führen, was die Interpretation der Regressionskoeffizienten erschwert.
Da wir bereits die Korrelationskoeffizienten berechnet haben, wissen wir bereits, dass diese \>0.8 liegen und damit einen Hinweise auf Multikollinearität geben.
Eine zuverlässige Metrik für die Kollinearität ist der **Variance Inflation Factor (VIF)**. Schauen wir uns kurz die Definition an.
##### Mathematische Definition
Der VIF für eine unabhängige Variable $X_j$ in einem linearen Regressionsmodell wird berechnet als:
$$\mathrm{VIF}_j = \frac{1}{1- R_j^2}$$
```{r}
#| label: vif
car::vif(sal_model_1)
```
wobei $R_j^2$ das Bestimmtheitsmass ist, das aus der Regression von $X_j$ auf die anderen unabhängigen Variablen im Modell resultiert.
Ausführlicher wird es im folgenden Video besprochen:
{{< video https://www.youtube.com/watch?v=0SBIXgPVex8 >}}
Der VIF misst also, wie stark die Varianz von $X_j$ durch die anderen Prädiktoren erklärt wird.
Wer sich nicht mehr an die Definition von $R^2$ erinnert:
Das Bestimmtheitsmass $R^2$:
$$R^2 = 1 - \frac{SS_{\mathrm{residual}}}{SS_{\mathrm{total}}} = \frac{\sum_{i} \left( \hat{y}_i - \overline{y} \right)^2}{\sum_{i} \left( y_i - \overline{y} \right)^2}$$
wobei: $SS_{\mathrm{residual}}$ die Summe der Quadrate der Residuen (die Fehlerquadratsumme) ist und $SS_{\mathrm{total}}$ die Gesamtsumme der Quadrate, welche die Gesamtstreuung der abhängigen Variable beschreibt.
Ein $R^2$-Wert von 1 bedeutet, dass das Modell alle Variationen der abhängigen Variable perfekt erklärt. Hingegen bedeutet ein $R^2$-Wert von 0, dass das Modell keinerlei Erklärungskraft besitzt.
Zurück zu unserem Modell: Wir berechnen die vif Werte für unsere beiden Prädiktoren
```{r}
vif_value <- vif(sal_model_1)
vif_value
```
**Interpretation**
- Ein VIF-Wert von **1** bedeutet, dass keine Multikollinearität vorliegt.
- Ein VIF-Wert von **grösser als 1** deutet auf eine gewisse Korrelation zwischen der betrachteten unabhängigen Variablen und den anderen hin.
In der Praxis gelten VIF-Werte von **über 5 oder 10** als Hinweis auf problematische Multikollinearität, was zu instabilen Schätzungen der Regressionskoeffizienten führen kann. Konkret: Der VIF gibt an, um wie viel die Varianz der Koeffizientenschätzung einer unabhängigen Variable aufgrund von Multikollinearität vergrössert wird. Ein hoher VIF-Wert zeigt also an, dass die Varianz der Koeffizienten aufgrund der starken Korrelation mit anderen Prädiktoren **vergrössert** ist. Dies kann zu statistischen Problemen wie unzuverlässigen Schätzungen und überhöhten Standardfehlern führen.
Unsere beiden Werte liegen knapp unter 5 und sind damit gerade nicht mehr problematisch.
Der VIF-Wert hilft uns also die problematischen Variablen zu identifizieren, die eventuell aus dem Modell entfernt oder durch transformierte Variablen ersetzt werden sollten (s. Block 3 bei der Hauptkomponentenanalyse (PCA)), um Multikollinearität zu reduzieren.
```{=html}
<div style="background-color: #e6f7ff; padding: 1em; border-radius: 10px; margin: 2em 0;">
<h3 style="margin-top: 0;">Verständnisfrage: Multikollinearität</h3>
<p>Warum ist Multikollinearität ein Problem?</p>
<p>
a) Sie verursacht Abhängigkeiten der Residuen.<br>
b) Starke Korrelationen zwischen Prädiktoren führen zu instabilen Koeffizienten und grossen Standardfehlern.<br>
c) Sie zeigt fehlende Linearität an.<br>
d) Sie garantiert konstante Varianz der Residuen.<br>
</p>
<details>
<summary>Antwort anzeigen</summary>
<p>Richtige Antwort: b) Wenn Prädiktoren stark korreliert sind, variieren sie gemeinsam. Dadurch wird es unmöglich, ihre individuellen Effekte auf die abhängige Variable zu separieren. </p>
</details>
</div>
```
```{=html}
<div style="background-color: #e6f7ff; padding: 1em; border-radius: 10px; margin: 2em 0;">
<h3 style="margin-top: 0;">Verständnisfrage: VIF</h3>
<p>Was misst der Variance Inflation Factor (VIF)?</p>
<p>
a) Wie stark die Varianz eines Koeffizienten durch Korrelationen mit anderen Prädiktoren "aufgebläht" wird.<br>
b) Ob die Residuen normalverteilt sind.<br>
c) Ob die Varianz der Zielvariable konstant bleibt.<br>
d) Den direkten Zusammenhang zwischen Zielvariable und Prädiktoren.<br>
</p>
<details>
<summary>Antwort anzeigen</summary>
<p>Richtige Antwort: a) Der VIF ist eine Kollinearitätsmetrik.</p>
</details>
</div>
```
## Modellvalidierung
Während wir bisher die Modellvoraussetzungen des linearen Modells überprüft haben, gehen wir jetzt weiter zur Modellvalidierung, um die Güte und Qualität des Modells zu überprüfen.
Welche Fragen wollen wir bei der Modellevaluierung beantworten?
1. Hat (global) unser Modell überhaupt eine Aussagekraft?
Diese Frage beantworten wir mit dem F-Test (ANOVA). Er sagt uns, ob unsere Prädiktoren zusammen signifikant besser vorhersagen als ein reines Raten des Mittelwerts der abhängigen Variable. D.h. wir verwenden nur das Intercept und vernachlässigen alle anderen Prädiktoren im Modell. Dies dient als Referenz für die Güte.
2. Wieviel der Varianz in unseren Daten kann unser Modell erklären?
Diese Frage wird mit dem $R^2$ oder besser dem $\mathrm{adjusted}~R^2$ untersucht, wie wir es auch schon von der Einfachregression her kennen. Wir beginnen mit einer ersten Überprüfung, der ANOVA resp. globalem F-Test und fragen ob unser Modell überhaupt eine signifikante Voraussagekraft besitzt.
Wir rufen uns aber zuerst nochmals die Idee des F-Test und der ANOVA ins Gedächtnis.
### ANOVA (Analysis of Variance)/F-Test
#### Mathematische Grundlagen der ANOVA
Die mathematischen Grundlagen basieren auf der Zerlegung der Gesamtquadratsumme (Total Sum of Squares, SST):
$$\text{SST} = \text{SSR} + \text{SSE}$$
- **SST (Total Sum of Squares):** Die Gesamtsumme der Quadrate, berechnet sich mit:
$$\text{SST} = \sum_{i=1}^n (y_i - \bar{y})^2$$
wobei $y_i$ die beobachteten Werte und $\bar{y}$ der Mittelwert der abhängigen Variable ist.
- **SSR (Regression Sum of Squares):** Die Summe der Quadrate, die durch das Modell erklärt wird:
$$\text{SSR} = \sum_{i=1}^n (\hat{y}_i - \bar{y})^2$$
wobei $\hat{y}_i$ die durch das Modell vorhergesagten Werte sind.
- **SSE (Error Sum of Squares):** Die unerklärte Variation, also die Residuenquadratsumme:
$$\text{SSE} = \sum_{i=1}^n (y_i - \hat{y}_i)^2$$
Er gibt an, wie viel Streung noch übrigbleibt, wenn man das Modell angepasst hat.
Die F-Statistik wird definiert als:
$$F = \frac{\text{MSR}}{\text{MSE}}$$
- **MSR (Mean Square Regression):** Mittlere Quadratsumme der Regression, berechnet als:
$$\text{MSR} = \frac{\text{SSR}}{k}$$
wobei $k$ die Anzahl der Regressoren/Prädiktoren ist.
- **MSE (Mean Square Error):** Mittlere Quadratsumme der Fehler, berechnet als:
$$\text{MSE} = \frac{\text{SSE}}{df} = \frac{\text{SSE}}{n-k-1}$$
wobei $n$ die Stichprobengrösse ist. Durch die Division durch die Anzahl Freiheitsgrade $df =n-k-1$ wird der MSE erwartungstreu. Zur Erinnerung: Die df wird aus dem Stichproben umfang minus der Anzahl Parameter des Modells berechnet. Hier haben wir k Parameter und ein Interzept $= k +1$. Die MSE ist eine Metrik, welche die Modellgenauigkeit misst. Je kleiner Sie ist, umso geringer schwanken die Datenpunkte um die Hyperebene.
#### Wie wird der F-Test formuliert?
Der F-Test prüft die Nullhypothese, ob alle Regressionskoeffizienten (ausser dem Interzept) gleich null sind:
$$H_0: \beta_1 = \beta_2 = ... = \beta_k = 0$$
Die Alternative ist:
$$H_A: \text{Mindestens ein } \beta_i \neq 0$$
Die Berechnung der F-Statistik erfolgt mit:
$$F = \frac{(R^2 / k)}{((1 - R^2) / (n-k-1))}$$
wobei $R^2$ das bekannte **Bestimmtheitsmass** (oder auch **Determinationskoeffizient**) ist.
Der p-Wert des F-Tests gibt an, wie wahrscheinlich die beobachtete F-Statistik unter der Nullhypothese ist.
```{=html}
<div style="background-color: #e6f7ff; padding: 1em; border-radius: 10px; margin: 2em 0;">
<h3 style="margin-top: 0;">Verständnisfrage: Interzept im globalen F-Test</h3>
<p>Beim globalen F-Test der multiplen linearen Regression (H<sub>0</sub>: β<sub>1</sub>=…=β<sub>p</sub>=0) – welche Referenz wird für das Nullmodell verwendet?</p>
<p>
a) Den Interzept des vollen Modells beibehalten und alle anderen Koeffizienten auf 0 setzen.<br>
b) Das Interzept entspricht dem Stichprobenmittel, also \(\hat{\alpha} = \bar{y}\).<br>
c) Den Mittelwert jedes Prädiktors als Referenz.<br>
d) Den Median von y, um Ausreisser robust zu behandeln.<br>
</p>
<details>
<summary>Antwort anzeigen</summary>
<p><strong>Richtig: b)</strong> Beim globalen F-Test wird das <em>reduzierte</em> Modell unter H<sub>0</sub> neu geschätzt: \(y_i = \alpha + \epsilon_i\) mit \(\hat{\alpha} =\bar{y}\). Daher gilt SSE<sub>red</sub> = Σ(y<sub>i</sub>−ȳ)² = SST.
Option a) ist falsch, weil man dabei den Interzept des Vollmodells festhalten würde (kein korrektes Reduced-Model-Fit).</p>
</details>
</div>
```
#### Durchführung des F-Tests
Nachdem wir die theoretischen Grundlagen des globalenF-Tests besprochen haben, wenden wir ihn nun auf unser Modell sal_model_1 an. Der F-Test prüft, ob unser Modell mit den Prädiktoren `Expe_Yrs` und `Skill_lev` eine signifikant bessere Vorhersagekraft hat als ein Nullmodell, das nur den Mittelwert des Jahresgehalts als Vorhersage verwendet.
Die Ergebnisse des globalen F-Tests sind bereits Teil der summary()-Ausgabe unseres Modells. Wir rufen sie erneut auf, um uns gezielt auf diesen Teil zu konzentrieren.
```{r}
#| label: f-test-execution
#| code-summary: "F-Test aus der Modellzusammenfassung extrahieren"
# Die summary()-Funktion liefert den F-Test für das Gesamtmodell
summary(sal_model_1)
```
### Interpretion der ANOVA/F-Test
Da die F-Statistik das Verhältnis zwischen MSR und MSE betrachtet, ist ein Wert von 4469 für die F-Statistik sehr hoch und auch der p-Wert zeigt mit `p-value: < 2.2e-16` einen extrem niedrigen Wert. $H_0$ wird also deutlich abgelehnt.
### 1. Adjusted $R^2$
Das angepasste Bestimmtheitsmass $R^2$, auch adjusted $R^2$ bezeichnet, passt das ursprüngliche $R^2$-Mass an die Anzahl der Prädiktoren und an die Stichprobengrösse an.
Die Definition lautet:
$$R^2_{\mathrm{adj}} = 1 - \left( \frac{SS_{\mathrm{res}}/(n-p-1)}{SS_{\mathrm{tot}}/(n-1)} \right)$$
wobei:
$n$ die Stichprobengrösse ist und $p$ die Anzahl der Prädiktoren im Modell ist.
### Interpretation
Während $R^2$ eine grobe Schätzung dafür ist, wie gut das Modell die Varianz der abhängigen Variable erklärt, ist adjusted $R^2$ ein genaueres Mass für die Modellgüte, insbesondere bei Modellen mit mehreren Prädiktoren. Wenn neue Prädiktoren hinzugefügt werden, wird $R^2$ immer grösser oder bleibt gleich, selbst wenn die neuen Prädiktoren keinen wirklichen Erklärungswert haben. Hingegen sinkt das adjusted $R^2$, wenn die neuen Prädiktoren keinen signifikanten Beitrag leisten.
### Warum ist adjusted $R^2$ sinnvoll?
Adjusted $R^2$ ist besonders nützlich, wenn man Modelle mit unterschiedlicher Anzahl von Prädiktoren vergleicht. Ein höheres adjusted $R^2$ deutet darauf hin, dass das Modell mit mehr Prädiktoren nicht nur zufällig besser ist, sondern tatsächlich eine bessere Erklärung für die abhängige Variable bietet.Da es die Anzahl der Prädiktoren in die Bewertung einbezieht, ist es ein robusteres Mass für die Modellqualität als $R^2$.
### Fazit
Das Bestimmtheitsmass $R^2$ ist ein nützliches Mass für die Modellgüte, hat aber Einschränkungen bei der Anwendung auf komplexere Modelle mit mehreren Prädiktoren. Adjusted $R^2$ bietet eine verbesserte Alternative, die die Anzahl der Prädiktoren berücksichtigt und das Risiko von Overfitting verringert.
**Zurück zu unserem Beispiel:** Mit 0.9948 liegt adjustet $R^2$ schon sehr nahe an 1, was ein sehr guter Wert ist.
Bevor wir zum AIC weitergehen, wollen wir an dieser Stelle noch kurz einen Blick auf das schrittweise Hinzufügen von Prädiktioren von einem visuellen Standpunkt werfen. Beim Nullmodell (0-D) schätzen wir y einfach nur durch den arithmetischen Mittelwert ($\bar{y}$) der abhängigen Variablen. Fügen wir den ersten Prädiktor zum Modell ziehen wir die Datenpunkte in einer Ebene auseinander und fitten die Gerade (1-D). Der nächste Prädiktor zieht die Datenpunkt nochmals, nur im Raum auseinander und aus unserem Modell wird eine Ebene im Raum. Jeder weitere Prädiktor führt dann zu einer Hyperebene als Modell. Ob Prädiktoron tatsächliches zu einer Verbesserung des Modells führen bewerten wir im kommenden Abschnitt, wenn wir im nächsten Abschnitt das \*\*\*\*Akaike Information Criterion als Metrik kennenlernen. ::: {layout-ncol="2"}
```{r}
#| label: plot-0d-focused
#| fig-cap: "0-D: Vertikale Streuung der Datenpunkte um den Mittelwert."
# Plot 1: 0-D (Nullmodell)
# Alle Punkte auf einer vertikalen Linie mit Jitter
ggplot(sal_data_1, aes(x = 0, y = Annu_Salary)) +
geom_jitter(width = 0.05, height = 0,
color = "#0072B2", alpha = 0.6, size = 2.5) +
geom_hline(
aes(yintercept = mean(Annu_Salary)),
color = "red", linetype = "dashed", size = 1
) +
labs(
title = "0-D: Gesamtstreuung",
subtitle = "Modell: Nur der Mittelwert",
x = NULL, y = "Jahresgehalt"
) +
theme_minimal() +
theme(
axis.text.x = element_blank(),
axis.ticks.x = element_blank(),
panel.grid.major.x = element_blank()
)
```
```{r}
#| label: plot-1d-focused
#| fig-cap: "1-D: 'Expansion' der Datenpunkte durch einen Prädiktor."
# Plot 2: 1-D (Einfachregression)
# Expansion in die zweite Dimension
ggplot(sal_data_1, aes(x = Expe_Yrs, y = Annu_Salary)) +
geom_point(color = "#0072B2", alpha = 0.8, size = 2.5) +
geom_smooth(method = "lm", se = FALSE, color = "red") +
labs(
title = "1-D: Erklärte Streuung",
subtitle = "Modell: Regressionsgerade",
x = "Berufserfahrung (Jahre)", y = "Jahresgehalt"
) +
theme_minimal()
```
:::
```{r}
#| label: plot-2d-3d
#| fig-cap: "2-D: Modell mit zwei Prädiktoren (Regressionsebene)"
# Plot 3: 2-D (Multiple Regressionsebene)
# Erzeuge ein Gitter für die Ebene
axis_x <- seq(min(sal_data_1$Expe_Yrs), max(sal_data_1$Expe_Yrs), length.out = 10)
axis_y <- seq(min(sal_data_1$Skill_lev), max(sal_data_1$Skill_lev), length.out = 10)
# Berechne die z-Werte (vorhergesagtes Gehalt) für das Gitter
plane_z <- outer(axis_x, axis_y, function(x, y) {
predict(sal_model_1, newdata = data.frame(Expe_Yrs = x, Skill_lev = y))
})
# Erstelle den 3D-Plot mit Plotly
plot_ly(data = sal_data_1, x = ~Expe_Yrs, y = ~Skill_lev, z = ~Annu_Salary,
type = "scatter3d", mode = "markers",
marker = list(size = 5, color = ~Annu_Salary, colorscale = "Viridis", showscale = FALSE)) %>%
add_surface(x = ~axis_x, y = ~axis_y, z = ~plane_z, opacity = 0.7, colorscale = 'Blues', showscale = FALSE) %>%
layout(
title = "2-D: Modell mit zwei Prädiktoren",
scene = list(
xaxis = list(title = "Berufserfahrung"),
yaxis = list(title = "Qualifikation"),
zaxis = list(title = "Jahresgehalt")
)
)
```
### *Akaike Information Criterion* zur Modellbewertung verwenden
Das Akaike Information Criterion (AIC) ist eine Metrik zur Bewertung und zum Vergleich von Modellen, die ein Gleichgewicht zwischen der Güte der Modellanpassung und der Anzahl der verwendeten Prädiktoren herstellt. Ein Modell mit einer niedrigeren AIC wird bevorzugt, da es eine bessere Modellgüte bietet, ohne zu viele Parameter einzuführen.
### Berechnung des AIC:
Das AIC kann in R mit der Funktion `AIC()` berechnet werden, die Teil der Basisbibliothek **`stats`** ist. Es gilt folgende Formel:
$$\mathrm{AIC} = -2\log(\hat L) + 2k$$
wobei:
- $\hat{L}$ die maximale Likelihood des Modells ist.
- $k$ die Anzahl der geschätzten Parameter im Modell ist (einschliesslich des Interzepts).
Da wir nur zwei unabhängige Pradiktoren im Modell haben, können wir drei Modelle vergleichen: Unser bisheriges mit zwei Prädiktoren und jeweils eines mit nur einem Prädiktor (`Skill_lev`, `Expe_Yrs`)
### Berechnung der noch fehlenden Modelle:
```{r}
sal_model_2 <- lm(Annu_Salary ~ Expe_Yrs, data = sal_data_1)
sal_model_3 <- lm(Annu_Salary ~ Skill_lev, data = sal_data_1)
```
Schauen wir uns die Summaries an:
```{r}
# Zeige beide Modell-Summaries nebeneinander
stargazer(sal_model_2, sal_model_3, type = "text")
```
Checken wir jetzt für alle drei Modell, die Werte für AIC:
```{r}
#| label: aic-compare
sal_model_2 <- lm(Annu_Salary ~ Expe_Yrs, data = sal_data_1)
sal_model_3 <- lm(Annu_Salary ~ Skill_lev, data = sal_data_1)
stargazer::stargazer(sal_model_2, sal_model_3, type = "text")
cbind(
AIC_2p = AIC(sal_model_1),
AIC_Expe = AIC(sal_model_2),
AIC_Skill = AIC(sal_model_3)
)
```
### Interpretation der AIC
Generell: Eine niedrigere AIC bedeutet, dass das Modell besser ist. Wir sehen also, dass die Güte unseres Modells bei Einbeziehung von zwei Prädiktoren wesentlich besser (niedriger Wert) abschneidet, als für die einzelnen Prädiktoren.
Die AIC hilft uns dabei, das Gleichgewicht zwischen Modellgüte und Modellkomplexität zu finden: - Ein niedriger AIC-Wert deutet auf ein besseres Modell hin. Modelle mit einer höheren AIC werden als weniger geeignet angesehen, da sie entweder zu viele Prädiktoren verwenden oder eine geringere Modellgüte bieten.
**Vergleich mehrerer Modelle, wichtiger Hinweis**
Die AIC gibt keine absolute Bewertung der Modellgüte, sondern nur einen Vergleich zwischen Modellen. Sie sagt also **nicht**, wie gut ein Modell ist, sondern welches Modell in Bezug auf Komplexität und Güte besser ist.
### Fazit
Die AIC ist ein nützliches Werkzeug zur Modellbewertung, insbesondere beim Vergleich von Modellen mit unterschiedlicher Anzahl an Prädiktoren. Sie hilft, das Modell zu finden, das die beste Balance zwischen Modellgüte und Komplexität bietet, und schützt vor Overfitting, das wir schon aus dem Machine Learning Modul kennen.
```{=html}
<div style="background-color: #e6f7ff; padding: 1em; border-radius: 10px; margin: 2em 0;">
<h3 style="margin-top: 0;">Verständnisfrage: AIC</h3>
<p>Was ist die korrekte Interpretation des AIC?</p>
<p>
a) Er gibt die absolute Modellgüte an; Werte > 0 sind gut.<br>
b) Höher ist besser, da mehr Komplexität belohnt wird.<br>
c) Er dient dem Modellvergleich; niedriger ist besser (Balance aus Güte und Komplexität).<br>
d) Er ist unabhängig von der Parameterzahl.<br>
</p>
<details>
<summary>Antwort anzeigen</summary>
<p>Richtige Antwort: c) Der AIC vergleicht Modelle unter Penalisierung der Komplexität.</p>
</details>
</div>
```
### Vorhersage des Jahresgehalts für neue Daten
```{r}
predictor_newdata <- data.frame(Expe_Yrs = 3, Skill_lev = 3)
predict(sal_model_1, newdata=predictor_newdata)
```
Ein Angestellter mit drei Jahren Berufserfahrung und einem Qualifikationsniveau von 3 würde folglich ein Jahreseinkommen von 11571 \$ erwarten können nach unserem Modell.
### Fazit:
Unser Modell erfüllt, mit wenigen Einschränkungen, alle Kriterien des linearen Modells und die Regressionshyperfläche wird durch folgende Gleichung beschrieben.
$$Y = \mathrm{Annu_Salary} = \beta_0 + \beta_1 \cdot \mathrm{Expe_Yrs} + \beta_2 \cdot \mathrm{Skill_lev} $$
```{=html}
<div style="background-color: #e6f7ff; padding: 1em; border-radius: 10px; margin: 2em 0;">
<h3 style="margin-top: 0;">Verständnisfrage: F‑Test</h3>
<p>Was testet der F‑Test in der multiplen Regression?</p>
<p>
a) Nur die Signifikanz einzelner Prädiktoren.<br>
b) Ob das Gesamtmodell signifikant besser ist als ein Modell ohne Prädiktoren (erklärte vs. unerklärte Varianz).<br>
c) Ausschliesslich die Normalverteilung der Residuen.<br>
d) Nur Unterschiede zwischen zwei verschachtelten Modellen.<br>
</p>
<details>
<summary>Antwort anzeigen</summary>
<p>Richtige Antwort: b) Der F-Test testet, ob das Modell als Ganzes einen signifikanten Erklärungsgehalt hat.</p>
</details>
</div>
```
## Abschlussbemerkungen
Die multiple lineare Regression ist ein mächtiges statistisches Werkzeug, das Sie nun in seinen Grundzügen beherrschen. Wichtige Punkte zum Mitnehmen:
Die sorgfältige Prüfung der Modellvoraussetzungen ist entscheidend für valide Ergebnisse. Die explorative Datenanalyse hilft, problematische Muster frühzeitig zu erkennen. Verschiedene Gütekriterien (R², AIC, F-Test) ermöglichen eine fundierte Modellbewertung.
Es gibt natürlich noch viele weitere Probleme und Herausforderungen der multiplen linearen Regression in der Praxis, die wir in diesem Rahmen nicht angesprochen haben. So kann man die ANOVA noch vertiefen und kleinere Modelle mit weniger Prädiktoren verwenden, um zu sehen, welches die Variation mit möglichst wenigen Prädiktoren minimiert (**partieller F-Test**). Auch treten in der Praxis häufig kategorische Variablen auf, welche dann mit sog. Dummy-Variablen codiert werden (0 und 1). Die Vorgehensweise ist wie bei der multiplen logistischen Regression (s. dort). Bei der Modellevaluation wird neben dem AIC auch das BIC (**Bayesian Information criterion** oder **Schwarz Information criterion**) verwendet. Sie unterscheiden sich vor allem in der Art des Strafterm (beim BIC $\ln(n)\cdot k$) und bevorzugt besonders kleine Modelle ([BIC](https://en.wikipedia.org/wiki/Bayesian_information_criterion)).
------------------------------------------------------------------------
## Anwendungsaufgabe zur multiplen linearen Regression
::: {.callout-important title="Aufgabe 1"}
Importiere die Daten [`marketing_conversion.csv`](data/marketing_conversion.csv){.btn .btn-outline-secondary .btn-sm download=""} und erzeuge eine Zusammenfassung.
:::
::: {.callout-important title="Aufgabe 2"}
Analysiere Zusammenhänge zwischen den Variablen:
1. Korrelationsmatrix berechnen.
2. Streudiagramm‑Matrix (z. B. `pairs()` oder `GGally::ggpairs()`).
3. Interpretation im Kontext der Marketing‑Aktivitäten.
:::
::: {.callout-important title="Aufgabe 3"}
Führe eine multiple lineare Regression für `Conversion Rate` \~ `social_media_spend` + `email_campaigns` + `website_visitors` durch und gib das `summary()` aus.
:::
::: {.callout-important title="Aufgabe 4"}
Prüfe die Modellvoraussetzungen (Linearität, Homoskedastizität, Unabhängigkeit, Normalverteilung, Multikollinearität). Wo bestehen ggf. Probleme?
:::
::: {.callout-important title="Aufgabe 5"}
Analysiere das `summary()` hinsichtlich der Signifikanz der Modellparameter und interpretiere diese.
:::
::: {.callout-important title="Aufgabe 6"}
Gegebene VIF‑Werte:
```
VIF
social_media_spend 1.942
email_campaigns 1.105
website_visitors 1.944
```
a) Erklären Sie Multikollinearität.\
b) Interpretieren Sie die VIF‑Werte im Kontext.\
c) Welche praktischen Probleme könnten sich ergeben?
:::
::: {.callout-important title="Aufgabe 7"}
Beurteilen Sie `Multiple R‑squared`, `Adjusted R‑squared` und die F‑Statistik. Was sagen sie über das Modell aus?
:::
::: {.callout-important title="Aufgabe 8"}
Welche Schlüsse ziehen wir aus der Analyse für das E‑Commerce‑Business?
:::
# Lösungsvorschläge
::: {.callout-important title="Aufgabe 1"}
Importiere die Daten `marketing_conversion.csv` (Ordner `data`) und erzeuge eine Zusammenfassung.
:::
```{r}
library(readr)
marketing_conversion <- read_csv("data/marketing_conversion.csv")
head(marketing_conversion)
str(marketing_conversion)
summary(marketing_conversion)
```
Wir haben vier numerische Variablen (angenehmerweise ohne `NA`s).
::: {.callout-important title="Aufgabe 2"}
Analysiere Zusammenhänge zwischen den Variablen:
1. Korrelationsmatrix berechnen.
2. Streudiagramm‑Matrix (z. B. `pairs()` oder `GGally::ggpairs()`).
3. Interpretation im Kontext der Marketing‑Aktivitäten.
:::
1. Korrelationsmatrix
```{r}
#| label: 02-korrelation
#| message: false
#| warning: false
library(dplyr)
num_vars <- marketing_conversion %>%
select(conversion_rate, social_media_spend, email_campaigns, website_visitors)
cor_mat <- cor(num_vars, use = "pairwise.complete.obs")
round(cor_mat, 3)
```
2.Streumatrix
```{r}
#| label: 03-pairs
#| fig.width: 7
#| fig.height: 7
#| message: false
#| warning: false
pairs(~ conversion_rate + social_media_spend + email_campaigns + website_visitors,
data = marketing_conversion, main = "Scatterplot-Matrix", pch = 19, cex = 0.6)
```
3. Interpretation & Beobachtungen
- *conversion_rate* vs. Prädiktoren:
email_campaigns r = 0.555 (mittel-stark, stärkster Zusammenhang) → häufigere/gezieltere E-Mails gehen mit höherer Conversion Rate einher (Segmentierung der Kunden sinnvoll/Reminder).
website_visitors r = 0.464 → mehr qualifizierter Traffic, tendenziell mehr Conversions (Qualität des Traffics bleibt kritisch).
social_media_spend r = 0.460 → höheres Paid-Spend korreliert mit höheren Conversions (Reichweite/Retargeting erwägen).
- Zwischen den Prädiktoren:
social_media_spend ↔ website_visitors r = 0.691 (relativ hoch) → Social-Spend treibt Traffic; mögliches Kollinearitäts-Risiko im Regressionsmodell (wir prüfen später mit VIF).
email_campaigns korreliert nur moderat mit den anderen (\~0.28) → eher eigenständiger Hebel.
- Implikation für die Regression:
Da *spend* und *visitors* stark zusammenhängen, könnte der direkte Effekt von spend im multiplen Modell kleiner wirken (ein Teil läuft über „mehr Besucher“ als Mediator!).
Alle drei Prädiktoren sollten (unter sonst gleichen Bedingungen) positive Koeffizienten haben; SEs (Standardfehler) für *spend/visitors* evtl. erhöht.
Plots (Linearität und Residuenverteilungen) auf Nichtlinearitäten/Trichterform prüfen; ggf. Transformationen (z. B. log) in Erwägung ziehen, falls sichtbar.
::: {.callout-important title="Aufgabe 3"}
Führe eine multiple lineare Regression für `Conversion Rate` \~ `social_media_spend` + `email_campaigns` + `website_visitors` durch und gib das `summary()` aus.
:::
```{r}
mod <- lm(conversion_rate ~ social_media_spend + email_campaigns + website_visitors, data = marketing_conversion)
summary(mod)
```
::: {.callout-important title="Aufgabe 4"}
Prüfe die Modellvoraussetzungen (Linearität, Homoskedastizität, Unabhängigkeit, Normalverteilung, Multikollinearität). Wo bestehen ggf. Probleme?
:::
**Linearität** CR-Plot
```{r}
#| label: crplots Conversion
library(car)
car::crPlots(mod)
```
Hier sehen wir erste Anzeichen für Nichtlinearität, besonders bei social media spend, aber nicht dramatisch. Wir sehen, wie es im Residuals vs. Fitted Plot aussieht für alle drei Prädiktoren.
```{r}
#| label: 06-diagnostics
#| message: false
#| warning: false
# Basis-Diagnostik
library(ggfortify)
autoplot(mod, which = 1:4, ncol = 2)
```
Wir sehen in der sog. LOESS Ausgleichskurve (blau) in Residuals vs Fitted eine leichte Krümmung, was ein Hinweis sein kann auch Heteroskedastizität. Schauen wir bei Scale-Location, wo explizit auf Homoskedastizität geschaut wird. Hier sehen wir, dass vor allem einige Ausreisser die LOESS Kurve krümmen. Testen wir noch mit dem Non-constant Variance Score Test:
```{r}
ncvTest(mod)
```
Hier sehen wir, dass wenn wir mit einem $\alpha = 0.05$ testen, würden wir die Nullhypothese verwerfen, testen wir zu $\alpha = 0.01$ behalten wir sie bei. Wir müssen also wegen der Ausreisser tatsächlich vorsichtig sein. Deshalb schauen wir uns noch Cook's distance an.
```{r}
# Einflussreiche Fälle auflisten: Cook's distance
cd <- cooks.distance(mod)
head(sort(cd, decreasing = TRUE), 5) # Top-5 Cook's D
```
Wie wir im Diagramm sehen, dominieren die Ausreisser 12 und 20. Qualitativ besagt Cook's distance, wie stark sich die Modellparameter ändern würden, wenn man den Ausreisser weglassen würde. Auffällig ist es meistens, wenn Cook's distance $D_i>4/n$ (n Stichprobenumfang). In der Praxis müsste man sich die beiden Punkte ansehen, ob dort ggf. Fehler bei der Erfassung oder andere Auffälligkeiten vorliegen. Bei uns gilt $D_i = 0.3098 > 4/200 = 0.02$, also deutlich über der Daumenregel.
**Multikollinearität**
```{r}
#| label: 07-gezielte-checks
#| message: false
#| warning: false
# Multikollinearität
car::vif(mod)
```
- social_media_spend: VIF = 1.942 → √VIF ≈ 1.39 → SE um \~39 % aufgebläht.
- email_campaigns: VIF = 1.105 → √VIF ≈ 1.05 → praktisch unkritisch.
- website_visitors: VIF = 1.944 → √VIF ≈ 1.39 → SE um \~39 % aufgebläht.
**Fazit**: leichte Kollinearität zwischen spend und visitors (konsistent mit r≈0.69), kein ernstes Problem. Alle Grössen \<\< 5 (geschweige denn 10).
::: {.callout-important title="Aufgabe 5"}
Analysiere das `summary()` hinsichtlich der Signifikanz der Modellparameter und interpretiere diese.
:::
```{r}
summary(mod)
```
- email_campaigns (β≈0.0009932, p\<.001): +1 Kampagne ≈ +0.10 pp Conversion Rate (ceteris paribus). Höchste Präzision (kleinster SE).
- website_visitors (β≈1.31e-07, p≈.007): +10’000 Visitors ≈ +0.13 pp.
- social_media_spend (β≈9.58e-07, p≈.011): +1’000 Spend ≈ +0.096 pp.
- Intercept negativ (−0.46 pp), hier ohne inhaltliche Bedeutung (Extrapolation fern der Daten).
Alle Modellparameter sind hoch signifikant.
::: {.callout-important title="Aufgabe 6"}
Gegebene VIF‑Werte:
```
VIF
social_media_spend 1.942
email_campaigns 1.105
website_visitors 1.944
```
a) Erklären Sie Multikollinearität.\
b) Interpretieren Sie die VIF‑Werte im Kontext.\
c) Welche praktischen Probleme könnten sich ergeben?
:::
zu a) Was ist Multikollinearität? Linearer Zusammenhang zwischen Prädiktoren ⇒ Standardfehler der Koeffizienten steigen (Schätzungen instabiler), ohne Bias im Erwartungswert.
zu b) Interpretation:
- *spend* und *visitors* haben milde Kollinearität (VIF \~1.94 ⇒ SEs ca. 1.39× grösser als ohne Korrelation) — konsistent mit r(spend, visitors)=0.691.
- *email_campaigns* praktisch unkritisch (VIF≈1.1).
zu c) Praktische Probleme:
Grössere SEs → schwächere t-Werte, unsichere Richtungs-/Grösseninterpretation; Modell kann bei kleinen Datenänderungen schwanken.
**Massnahmen:** (geht über das hinaus, was wir in der Prüfung fordern) Feature-Engineering (z. B. einen der stark korrelierten Prädiktoren weglassen/zusammenfassen), Regularisierung (Ridge/Lasso), Interpretation auf Partial-Plots stützen.
::: {.callout-important title="Aufgabe 7"}
Beurteilen Sie `Multiple R‑squared`, `Adjusted R‑squared` und die F‑Statistik. Was sagen sie über das Modell aus?
:::
- R² = 0.429 / adj. = 0.420: ca. 42 % der Varianz erklärt; moderat für Marketing-Daten (Rest durch nicht modellierte Treiber/Noise).
- F(3,196)=49.12, p\<2.2e-16: Gesamtmodell ist hochsignifikant ⇒ zumindest ein Prädiktor trägt substantiell zur Erklärung bei.
::: {.callout-important title="Aufgabe 8"}
Welche Schlüsse ziehen wir aus der Analyse für das E‑Commerce‑Business?
:::
- E-Mail-Hebel ist stark (grösster, präzisester Effekt): Kampagnenqualität und -frequenz priorisieren (Segmentierung, Trigger-Mails, Warenkorbabbruch ansehen).
- Traffic & Social Media-Spend wirken positiv, aber teilweise über denselben Kanal (Spend → Visitors). Budget-Allokation daher datenbasiert steuern.
- Conversion rate optimization: Wenn visitors ↑ aber Conversion nicht im gleichen Mass ↑, dann On-Site-Funnel/UX/Checkout optimieren.
**Ergänzungen** (wird nicht an einer Prüfung erwarte, in der Praxis aber relevant)
- Experimente: A/B-/Holdout-Tests pro Kanal; inkrementellen Lift messen (Kausalität!).
- Modellpflege: Diagnostics beobachten; bei Trichter/Nonlinearität Logs oder Splines; ggf. robuste SE berichten.
- Skalierung der Effekte:
+5 E-Mail-Kampagnen ≈ +0.50 pp.
+1’000 Spend ≈ +0.096 pp.
+10’000 Visitors ≈ +0.13 pp.