# Pakete laden ####
library(report) # Einfaches Erstellen von statistischen Berichten
library(marginaleffects) # Vorhersagen aus Regressionsmodellen
library(tidyverse) # Datenmanagement und Visualisierung: https://www.tidyverse.org/

# Datensatz lesen und relevante Variablen auswählen und umbenennen ####
# Verfügbar unter https://osf.io/72azd/
d <- haven::read_sav(here::here("data/Voegele_Bachl_2017.sav")) |>
  mutate(
    schwab = factor(c_0001, labels = c("Hochdeutsch", "Schwäbisch")), # Stimulus
    gender = as_factor(v_113), # Gender
    age = ifelse(v_114 == 0, NA, v_114), # Alter
    gesamt = v_126, # Gesamtbewertung des Politikers
    sym = rowMeans(pick(v_139, v_141)), # Sympathie des Politikers
    atol = rowMeans(pick(v_25, v_26_gedreht, v_27, v_28_gedreht, v_29)), # Einstellung zum schwäbischen Dialekt
    klang = rowMeans(pick(v_54, v_55_gedreht, v_57_gedreht)), # Klang der Stimme
    verst = rowMeans(pick(v_121, v_122, v_123, v_125)), # Verständlichkeit des Sprechers
    polint = rowMeans(pick(v_4, v_5))
    ) |> 
  filter(v_104 == 1) |>  # Filter: Nur Wahlberechtigte in BW
  filter(gender != 0) |> # Zur Vereinfachung: Ohne 1 Person ohne Gender- und Age-Antwort
  mutate(gender = fct_drop(gender)) |> # Zur Vereinfachung: Ohne 1 Person ohne Gender- und Age-Antwort
  select(schwab, gender, age, polint, atol, klang, verst, gesamt, sym)

# Stichprobenbeschreibung ####
d |> 
  haven::zap_labels() |> 
  report_sample()
## # Descriptive Statistics
## 
## Variable               |       Summary
## --------------------------------------
## schwab [Schwäbisch], % |          54.8
## gender [männlich], %   |          44.0
## Mean age (SD)          | 39.79 (18.82)
## Mean polint (SD)       |   3.47 (0.85)
## Mean atol (SD)         |   3.31 (0.78)
## Mean klang (SD)        |   3.74 (0.68)
## Mean verst (SD)        |   3.97 (0.78)
## Mean gesamt (SD)       |   3.71 (0.86)
## Mean sym (SD)          |   3.82 (0.84)
d |> 
  haven::zap_labels() |> 
  report_sample(by = "schwab")
## # Descriptive Statistics
## 
## Variable             | Hochdeutsch (n=146) | Schwäbisch (n=177) | Total (n=323)
## -------------------------------------------------------------------------------
## gender [männlich], % |                44.5 |               43.5 |          44.0
## Mean age (SD)        |       39.34 (18.53) |      40.16 (19.10) | 39.79 (18.82)
## Mean polint (SD)     |         3.51 (0.86) |        3.44 (0.84) |   3.47 (0.85)
## Mean atol (SD)       |         3.33 (0.77) |        3.29 (0.79) |   3.31 (0.78)
## Mean klang (SD)      |         3.81 (0.67) |        3.68 (0.69) |   3.74 (0.68)
## Mean verst (SD)      |         4.08 (0.74) |        3.88 (0.81) |   3.97 (0.78)
## Mean gesamt (SD)     |         3.84 (0.79) |        3.59 (0.90) |   3.71 (0.86)
## Mean sym (SD)        |         3.85 (0.85) |        3.79 (0.83) |   3.82 (0.84)
# Eigene Moderationsanalysen ####
# Treatment
# schwab
# Mögliche Moderatorvariablen:
# gender (dichotom)
# atol (1-5)
# polint (1-5)
# Mögliche abhängige Variablen
# gesamt (1-5)
# sym (1-5)
# klang (1-5)
# verst (1-5)

# Effekt auf Verständlichkeit moderiert durch politisches Interesse ####
# Ggf. Zentrieren des Moderators um Mittelwert
d <- d |> 
  mutate(polint_c = polint - mean(polint))
# Regressionsmodell
m_mod <- lm(verst ~ schwab * polint_c, data = d)
# Regressionstabelle
m_mod |> 
  report_table(include_effectsize = FALSE, metrics = "R2_adj")
## Parameter                      | Coefficient |         95% CI | t(319) |      p |      Fit
## ------------------------------------------------------------------------------------------
## (Intercept)                    |        4.08 | [ 3.95,  4.21] |  63.12 | < .001 |         
## schwab [Schwäbisch]            |       -0.20 | [-0.37, -0.03] |  -2.27 | 0.024  |         
## polint c                       |    8.19e-03 | [-0.14,  0.16] |   0.11 | 0.913  |         
## schwab [Schwäbisch] × polint c |       -0.03 | [-0.23,  0.17] |  -0.29 | 0.773  |         
##                                |             |                |        |        |         
## R2 (adj.)                      |             |                |        |        | 6.89e-03
# Kein statistisch signifikanter Interaktionseffekt

# Effekt auf Sympathie moderiert durch atol
# AtoL um den Mittelwert zentrieren, damit AtoL = 0 bedeutsam ist
d <- d |>
  mutate(atol_c = atol - mean(atol))
# Regressionsmodell
m_mod <- lm(sym ~ schwab * atol_c, data = d)
# Regressionstabelle
m_mod |> 
  report_table(include_effectsize = FALSE, metrics = "R2_adj")
## Parameter                    | Coefficient |        95% CI | t(319) |      p |  Fit
## -----------------------------------------------------------------------------------
## (Intercept)                  |        3.85 | [ 3.72, 3.99] |  56.20 | < .001 |     
## schwab [Schwäbisch]          |       -0.06 | [-0.24, 0.12] |  -0.63 | 0.527  |     
## atol c                       |       -0.09 | [-0.27, 0.08] |  -1.02 | 0.309  |     
## schwab [Schwäbisch] × atol c |        0.32 | [ 0.09, 0.55] |   2.69 | 0.008  |     
##                              |             |               |        |        |     
## R2 (adj.)                    |             |               |        |        | 0.02
# Statistisch signifikanter, positiver Interaktionsterm.
# Je größer atol, desto positiver (weniger negativ) Effekt des Dialekts.
# Abbildungen des Effekts
# Für quasi-metrischen Moderator
# Vorhergesagte Werte
plot_predictions(m_mod, condition = list("schwab", atol_c = "threenum")) +
  plot_predictions(m_mod, condition = rev(list("schwab", atol_c = "threenum"))) +
  scale_color_brewer(type = "qual")

# Dialekt-Effekt als Funktion des Moderators
plot_slopes(m_mod, variables = "schwab", condition = "atol_c") + 
  geom_hline(yintercept = 0, linetype = 2)

# Für die Sympathie dreht sich der Effekt des Dialekts (ganz knapp). Personen,
# die das Schwäbische richtig toll finden, bewerten den Politiker als 
# sympathischer, wenn er Dialekt sprecht, als wenn er versucht, Standarddeutsch
# zu sprechen. Für Personen, die das Schwäbische nicht schön finden, fällt der 
# Effekt des Dialekts auf die Sympathie negativ aus.