Pakete laden

#Prelimaniers

suppressPackageStartupMessages({
library(dplyr)
library(tidyr)
library(data.table)
library(ggplot2)
library(ggridges)
library(purrr)
library(forcats)
library(magrittr)
library(lubridate)
library(scales)
library(sf)
library(data.table)
library(extrafont)
library(ggthemes)
library(stargazer)
library(RColorBrewer)
library(viridis)})

Daten laden

#Arbeitsverzeichnis definieren
setwd("~/Datajournalism")
#Dateipfad definieren
file1 <-
  "~/Datajournalism/sotomo/daten_sotomo_24112022/vorsorge/vorsorge_data.csv"
file2 <-
  "~/Datajournalism/sotomo/daten_sotomo_24112022/geschlechtergerechter/geschlechtergerechter_data.csv"
#Daten einlesen
vorsorge.raw <- read.csv(file1,
                         sep = ",",
                         encoding = "UTF-8",
                         stringsAsFactors = FALSE) %>%
  as_tibble()

geschlechtergerecht.raw <- read.csv(file2,
                                    sep = ",",
                                    encoding = "UTF",
                                    stringsAsFactors = FALSE) %>%
  as_tibble()

Theme definieren

# define a theme function
theme_eat <- function(base_size = 12,
                      base_line_size = base_size / 170,
                      base_rect_size = base_size / 170) {
  ggplot2::theme_minimal(base_size = base_size,
                         base_line_size = base_line_size) %+replace%
    ggplot2::theme(
      plot.title = element_text(
        color = rgb(22, 27, 27,
                    maxColorValue = 250),
        face = "bold",
        hjust = 0
      ),
      axis.title = element_text(
        color = rgb(22, 27, 27,
                    maxColorValue = 250),
        size = rel(0.75)
      ) ,
      axis.text = element_text(
        color = rgb(22, 27, 27,
                    maxColorValue = 250),
        size = rel(0.7)
      ) ,
      
      panel.grid.minor = element_line(
        rgb(153, 153, 153,
            maxColorValue = 250),
        linetype = "dotted",
        size = rel(4)
      ) ,
      complete = TRUE
    )
}

Datenbereinigung Vorsorgedatensatz für Frage: Haben Sie Beiträge in die Pensionskasse gerichtet?

vorsorge <- vorsorge.raw %>%
  mutate(
    pkhab =
      case_when(
        PKdone == "A1" ~ "Berufliche Vorsorge",
        PKdone == "A0" ~ "Keine berufliche Vorsorge",
        TRUE ~ NA_character_
      )
  ) %>%
  
  mutate(
    herkunft = case_when(
      sex == "F" & stber == "A2" ~ "Ausländerin",
      sex == "M" & stber == "A2" ~ "Ausländer",
      sex == "F" &
        stber == "A1" ~ "Schweizerin",
      sex == "M" & stber == "A1" ~ "Schweizer",
      TRUE ~ NA_character_
    )
  ) %>%
  mutate(
    eltern = case_when(
      sex == "F" &
        kinder == "A2" &
        stber == "A2" ~ "Ausländerin ohne Kinder",
      sex == "M" &
        kinder == "A2" & stber == "A2" ~ "Ausländer ohne Kinder",
      sex == "F" &
        kinder == "A2" & stber == "A1" ~ "Schweizerin ohne Kinder",
      sex == "M" &
        kinder == "A2" & stber == "A1" ~ "Schweizer ohne Kinder",
      sex == "F" &
        kinder == "A1" & stber == "A2" ~ "Ausländerin mit Kinder",
      sex == "M" &
        kinder == "A1" & stber == "A2" ~ "Ausländer mit Kinder",
      sex == "F" &
        kinder == "A1" & stber == "A1" ~ "Schweizerin mit Kinder",
      sex == "M" &
        kinder == "A1" & stber == "A1" ~ "Schweizer mit Kinder",
      
      TRUE ~ NA_character_
    )
  )  %>%
  
  mutate(sex =
           case_when(sex == "M" ~ "Männer",
                     sex == "F" ~ "Frauen",
                     TRUE ~ NA_character_))  %>%
  mutate(
    haushaltstyp =
      case_when(
        haushalt == "A1" ~ "Einpersonenhaushalt",
        haushalt == "A2" ~ "Paarhaushalt",
        haushalt == "A3" ~ "Familienhaushalt mit Minderjährigen",
        haushalt == "A4" ~ "Familienhaushalt ohne Minderjährige",
        haushalt == "A5" ~ "Anderer Mehrpersonenhaushalt",
        TRUE ~ NA_character_
      )
  ) %>%
  
  select(haushalt,
         haushaltstyp,
         sex,
         age,
         eltern,
         stber,
         herkunft,
         pkhab,
         PKdone,
         weight)

Datenbereinigung Geschlechtergerechtdatensatz

geschlechtergerecht <- geschlechtergerecht.raw %>%
  mutate(
    herkunft = case_when(
      stber == "Y" & gender == "W" ~ "Ausländerin",
      stber == "Y" &
        gender == "M" ~ "Ausländer",
      stber == "N" &
        gender == "W" ~ "Schweizerin",
      stber == "N" &
        gender == "M" ~ "Schweizer",
      TRUE ~ NA_character_
    )
  )  %>%
  mutate(
    eltern = case_when(
      gender == "W" &
        kids == "A0" &
        stber == "Y" ~ "Ausländerin ohne Kinder",
      gender == "M" &
        kids == "A0" & stber == "Y" ~ "Ausländer ohne Kinder",
      gender == "W" &
        kids == "A0" & stber == "N" ~ "Schweizerin ohne Kinder",
      gender == "M" &
        kids == "A0" & stber == "N" ~ "Schweizer ohne Kinder",
      gender == "W" &
        kids == "A1" & stber == "Y" ~ "Ausländerin mit Kinder",
      gender == "M" &
        kids == "A1" & stber == "Y" ~ "Ausländer mit Kinder",
      gender == "W" &
        kids == "A1" & stber == "N" ~ "Schweizerin mit Kinder",
      gender == "M" &
        kids == "A1" & stber == "N" ~ "Schweizer mit Kinder",
      
      TRUE ~ NA_character_
    )
  )  %>%
  mutate(sex = case_when(
    gender == "W" ~ "Frauen",
    gender == "M" ~ "Männer",
    TRUE ~ NA_character_
  ))

Beitrag in die Pensionskasse

Haben Sie bereits Beiträge in die obligatorische berufliche Vorsorge (BVG, Pensionskasse) eingezahlt? (Fairplay und Vorsorgestudie) [pkdone]

# Datengewichtung und Vorbereitung für Beitrag geleistet in die Pensionskasse  nach Herkunft für Grafik 1


pkhab_herk <- vorsorge %>%
  mutate(id = row_number())  %>%
  select("id",
         "pkhab",
         "herkunft",
         "weight") %>%
  group_by(id) %>%
  group_by(pkhab, herkunft) %>%
  summarise(Nweighted = sum(weight), .groups = 'drop') %>%
  na.omit() %>%
  group_by(herkunft) %>%
  mutate(Percentage = Nweighted / sum(Nweighted))  %>%
  ungroup() %>%
  arrange(desc(Percentage))
# Kontrolle Percentage --> ob es ein 1 ergibt
aggregate(Percentage ~ herkunft, pkhab_herk, sum)
##      herkunft Percentage
## 1   Ausländer          1
## 2 Ausländerin          1
## 3   Schweizer          1
## 4 Schweizerin          1
# Grafik 1 Beitrag in die Pensionskasse geleistet nach Herkunft

plot1 <-
  ggplot(pkhab_herk, aes(
    x = factor(
      herkunft,
      levels = c("Schweizer", "Schweizerin", "Ausländer", "Ausländerin")
    ) ,
    y = Percentage,
    fill = pkhab
  )) +
  geom_bar(
    stat = "identity",
    position = "fill",
    color = "white",
    width = 0.9
  ) +
  geom_text(
    aes(
      y = Percentage,
      label = scales::percent(Percentage, accuracy = 1L)
      
    ),
    position = position_stack(vjust = 0.5),
    color = "white",
    size = 3
  ) +
  scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +
  
  
  labs(
    title = "Rund 40 Prozent der ausländischen Frauen haben keine berufliche \nVorsorge",
    subtitle = "\nHaben Sie bereits Beiträge in die obligatorische berufliche Vorsorge \n(BVG, Pensionskasse) eingezahlt?",
    caption = "Daten: Forschungsstelle sotomo, Vorsorge und Fairplay-Studie (Stand: Januar 2023)",
    x = "",
    y = "",
    fill = ""
  ) +
  scale_fill_manual(
    values = c(
      "Keine berufliche Vorsorge" = "#f4a582",
      "Berufliche Vorsorge" = "#3d5a80"
    ),
    breaks = c("Keine berufliche Vorsorge", "Berufliche Vorsorge")
  )  +
  
  theme_eat() +
  coord_flip() +
  theme(legend.position = "bottom")
## Warning: The `size` argument of `element_line()` is deprecated as of ggplot2 3.4.0.
## ℹ Please use the `linewidth` argument instead.
plot1

# Datengewichtung und Vorbereitung für Beitrag geleistet in die Pensionskasse nach Kinder und Herkunft Grafik 2
pkhab_eltern <- vorsorge %>%
  mutate(id = row_number())  %>%
  select("id",
         "pkhab",
         "eltern",
         "weight") %>%
  group_by(id) %>%
  group_by(pkhab, eltern) %>%
  summarise(Nweighted = sum(weight), .groups = 'drop') %>%
  na.omit() %>%
  group_by(eltern) %>%
  mutate(Percentage = Nweighted / sum(Nweighted))  %>%
  ungroup() %>%
  arrange(Percentage)
#Kontrolle Percentage --> ob es ein 1 ergibt
aggregate(Percentage ~ eltern, pkhab_eltern, sum)
##                    eltern Percentage
## 1    Ausländer mit Kinder          1
## 2   Ausländer ohne Kinder          1
## 3  Ausländerin mit Kinder          1
## 4 Ausländerin ohne Kinder          1
## 5    Schweizer mit Kinder          1
## 6   Schweizer ohne Kinder          1
## 7  Schweizerin mit Kinder          1
## 8 Schweizerin ohne Kinder          1
# Grafik 2 Beitrag in die Pensionskasse geleistet nach Herkunft und Kinder

plot2 <-
  ggplot(pkhab_eltern, aes(
    x = factor(
      eltern,
      levels = c(
        "Schweizer mit Kinder",
        "Schweizerin mit Kinder",
        "Ausländer mit Kinder",
        "Ausländerin mit Kinder",
        "Schweizer ohne Kinder",
        "Schweizerin ohne Kinder",
        "Ausländerin ohne Kinder",
        "Ausländer ohne Kinder"
      )
    ),
    y = Percentage,
    fill = pkhab
  ))  +
  geom_bar(
    stat = "identity",
    position = "fill",
    color = "white",
    width = 0.9
  ) +
  geom_text(
    aes(
      y = Percentage,
      label = scales::percent(Percentage, accuracy = 1L)
    ),
    position = position_stack(vjust = 0.5),
    color = "white",
    size = 3
  ) +
  scale_y_continuous(labels = scales::percent_format(accuracy = 1))  +
  
  labs(
    title = "Nur 13 Prozent der Schweizer mit Kinder haben nicht in die \nberufliche Vorsorge einbezahlt",
    subtitle = "\nHaben Sie bereits Beiträge in die obligatorische berufliche \nVorsorge (BVG, Pensionskasse) eingezahlt?",
    caption = "Daten: Forschungsstelle sotomo, Vorsorge und Fairplay-Studie (Stand: Januar 2023)",
    x = "",
    y = "",
    fill = ""
  ) +
  scale_fill_manual(
    values = c(
      "Keine berufliche Vorsorge" = "#f4a582" ,
      "Berufliche Vorsorge" = "#3d5a80"
    ),
    breaks = c("Keine berufliche Vorsorge", "Berufliche Vorsorge")
  ) +
  theme_eat() +
  coord_flip() +
  theme(legend.position = "bottom")

plot2