# Laden der Pakete ####
library(report) # Einfaches Erstellen von statistischen Berichten
library(marginaleffects) # Für Vorhersagen
library(tidyverse) # Datenmanagement und Visualisierung: https://www.tidyverse.org/
# Laden und aufbereiten des Datensatzes ####
# Kopiert aus Skript zur Vorlesung ####
d <- haven::read_stata(here::here("data/Vanerkel_Vanaelst_2021.dta")) |>
rename(
Political_knowledge = PK,
Personalized_news = personalized_news,
Radio = News_channels_w4_1,
Television = News_channels_w4_2,
Newspapers = News_channels_w4_3,
Online_news_sites = News_channels_w4_4,
Twitter = News_channels_w4_5,
Facebook = News_channels_w4_6
) |>
mutate(
Gender = as_factor(Gender),
Education = as_factor(Education),
trad = factor(trad, labels = c(
"traditional news diet: no",
"traditional news diet: yes"
))
)
### 2) Prüfen Sie die Hypothese: Je häufiger eine Person Zeitungen nutzt, desto höher ist ihr politisches Wissen.
# - Zeitungsnutzung: Variable `Newspapers`
# - Stellen Sie den Zusammenhang als 'jittered Scatterplot' dar.
theme_set(theme_classic()) # Layout des Plots
d |>
ggplot(aes(Newspapers, Political_knowledge)) +
geom_jitter(width = 0.3, height = 0.3) +
geom_smooth(method = "lm", se = FALSE, linewidth = 2)
## `geom_smooth()` using formula = 'y ~ x'

# - Schätzen Sie den Zusammenhang mit einer linearen Regression.
m_pk_np <- lm(Political_knowledge ~ Newspapers, data = d)
m_pk_np |>
report_table(metrics = "R2")
## Parameter | Coefficient | 95% CI | t(991) | p | Std. Coef.
## -----------------------------------------------------------------------
## (Intercept) | 2.11 | [1.93, 2.30] | 22.34 | < .001 | 3.03e-16
## Newspapers | 0.27 | [0.22, 0.31] | 10.95 | < .001 | 0.33
## | | | | |
## R2 | | | | |
##
## Parameter | Std. Coef. 95% CI | Fit
## --------------------------------------
## (Intercept) | [-0.06, 0.06] |
## Newspapers | [ 0.27, 0.39] |
## | |
## R2 | | 0.11
# - Sagen Sie das politische Wissen für Personen mit unterdurchschnittlicher, durchschnittlicher und überdurchschnittlicher Zeitungsnutzung voraus.
m_pk_np |>
avg_predictions(variables = list(Newspapers = "threenum"))
##
## Newspapers Estimate Std. Error z Pr(>|z|) S 2.5 % 97.5 %
## 1.83 2.60 0.0578 44.9 <0.001 Inf 2.48 2.71
## 3.52 3.04 0.0408 74.5 <0.001 Inf 2.96 3.12
## 5.20 3.49 0.0578 60.4 <0.001 Inf 3.38 3.60
##
## Type: response
m_pk_np |>
plot_predictions(condition = list(Newspapers = "threenum"))

# - Interpretieren Sie die Ergebnisse. Schreiben Sie dazu einen kurzen Text.
# BONUS: Überprüfen Sie, inwiefern das Modell die statistischen Annahmen erfüllt.
library(performance)
check_model(m_pk_np, check = c("linearity", "normality", "homogeneity", "outliers"))

check_residuals(m_pk_np) |> plot()

# - BONUS: Zentrieren Sie die Variable `Newspapers` um ihren Mittelwert. Verwenden Sie die neue Variable `Newspapers_z` in einer Regressionsanalyse und vergleichen Sie die Ergebnisse.
d <- d |>
mutate(Newspapers_z = Newspapers - mean(Newspapers))
m_pk_npz <- lm(Political_knowledge ~ Newspapers_z, data = d)
m_pk_npz |>
report_table(metrics = "R2")
## Parameter | Coefficient | 95% CI | t(991) | p | Std. Coef.
## ------------------------------------------------------------------------
## (Intercept) | 3.04 | [2.96, 3.12] | 74.54 | < .001 | 2.64e-16
## Newspapers z | 0.27 | [0.22, 0.31] | 10.95 | < .001 | 0.33
## | | | | |
## R2 | | | | |
##
## Parameter | Std. Coef. 95% CI | Fit
## ---------------------------------------
## (Intercept) | [-0.06, 0.06] |
## Newspapers z | [ 0.27, 0.39] |
## | |
## R2 | | 0.11