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_
))
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