knitr::opts_chunk$set(warning = FALSE)
knitr::opts_chunk$set(message = FALSE)
knitr::opts_chunk$set(tidy = FALSE)
p_needed <- c("haven", "tidyverse", "texreg", "psych", "RColorBrewer", "ggalt", "gridExtra", "glm.predict")
lapply(p_needed, library, character.only = TRUE)
rm(list = ls())
Die Datenaufbereitung ist in einem separaten RMD-File zu finden.
shp <- read_csv("shp_aufbereitet.csv", show_col_types = FALSE)
Bei wievielen Wellen hat eine Person durchschnittlich am SHP teilgenommen?
shp_unique <- shp %>%
filter(!AGE>26) %>% # diese Linie entfernen, falls man alle Beobachtungen will
filter(!duplicated(IDPERS))
# -> 19'151 Personen haben in mind. einem Jahr bei der Umfrage teilgenommen, 6221 davon waren unter 26 Jahre
participation_counts <- shp %>%
filter(!AGE>26) %>%
group_by(IDPERS) %>%
summarize(participation_count = n_distinct(YEAR)) %>%
mutate(mean = mean(participation_count), # Mean 5.2 für alle Alter, 2.9 für U26
median = median(participation_count), # Median 3 für alle Alter, 2 für U26
var = var(participation_count),
sd = sd(participation_count))
hist(participation_counts$participation_count)
round(prop.table(table(participation_counts$participation_count)),2)
##
## 1 2 3 4 5 6 7 8 9 10 11
## 0.35 0.22 0.14 0.08 0.06 0.05 0.04 0.03 0.02 0.01 0.01
# -> Die allermeisten haben nur 1-3x an der Umfrage teilgenommen
# Alle Alter: 25% nur 1x, 42% bis und mit 2x, 60% bis und mit 3x
# U26: 35% nur 1x, 57% bis und mit 2x, 81% bis und mit 3x
Obwohl es sich beim SHP um Paneldaten handelt, gibt es insgesamt eher wenige wiederholte Messungen der gleichen Personen, besonders wenn man nur die jüngeren Personen beachtet. Deshalb, und auch um die kommenden Analysen zu vereinfachen, ignoriere ich den Fakt dass es teilweise die gleichen Personendaten sind, und behandle alle Observationen als individuell. Das heisst konkret, dass ich z.B. keine Mixed Models rechne mit der Personen-ID als Cluster.
Um statistisch signifikante Unterschiede zwischen den Generationen feststellen zu können, muss ich die Gruppen auf folgende Bedingungen hin überprüfen:
Zusätzlich gibt es für die Interpretation das APC-Problem (vom engl. age-period-cohort identification problem) zu beachten. Über den Geburtsjahrgang einer Person hängen Alter, hist. Periode bzw. Zeitpunkt der Befragung und die Zugehörigkeit zu einer Geburtenkohorte (Generation) unausweichlich miteinander zusammen. Dies macht es extrem schwierig, die Effekte auseinanderzuhalten für die Erklärung eines Phänomens. Im Bezug auf Unterschiede in der Arbeitsmotivation hat sich beispielsweise Schroeder (2023) gefragt: Ändert sie sich tatsächlich, weil man einer anderen Generation angehört? Oder ändert sie sich eher deshalb, weil man in einem gewissen Alter/Lebensabschnitt ist, oder weil sich über die Zeit hinweg die allgemeine Arbeitseinstellung in der Gesellschaft verändert hat? Das APC-Problem verkompliziert meine Analyse, da damit auch der Erhebungszeitraum und die Verteilung der exogenen Variable “Alter” betroffen ist für die Vergleichbarkeit der Generationen. Schroeder (2023) testet dies anhand von Multi-Level-Regressionen mit Daten von 584.217 Personen, die im Rahmen des Integrated Values Survey in 113 Ländern über zw. 1981 und 2022 erhoben wurden. Er stellt fest, dass der Generationeneffekt nicht mehr siginifikant ist, wenn Alter, Alter im Quadrat und Befragungsjahr als Kontrollen eingeführt werden.
Für meine Analyse steht die Gen Z und die Arbeit im Vordergrund. Dessen Einstellungen und Verhalten bez. Arbeit gilt es im Vergleich zu den anderen Generationen zu überprüfen. In der Schweiz schliessen die meisten ihre obl. Schulzeit mit 15 Jahren ab; und da die meisten eine Lehre machen, ist der Beginn der Berufstätigkeit meistens mit 16. Die lässt sich auch in meinen SHP-Daten bestätigen - der Wert für das erste Quartal der Variable “WORKSTART”, bei der die Befragten ihr Alter beim Berufseinstieg angegeben haben, ist 16 Jahre:
## Alter beim Berufseinstieg ----
summary(shp$WORKSTART, na.rm = T) # alle
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 6.00 16.00 17.00 18.84 21.00 96.00 16942
Dementsprechend ist der erste Jahrgang der Gen Z (1996) frühestens ab 2012 erwerbstätig, vorher existieren keine Werte. Im Vergleich dazu hatte der älteste Jahrgang der Gen Y oder Millenials (1981) ihren Berufseintieg 1997. Leider ist dies ausserhalb meines Datenzeitraums, aber mit jüngeren Jahrgängen der Gen Y gibt es trotzdem eine gemeinsame Fläche mit der Gen Z für Vergleiche. Bei der Gen X decken sich dessen jüngsten Jahrgänge im Alter mit den ältesten Jahrgängen der Gen Z im vorliegenden Datenzeitraum. Da dies aber sehr wenige Beobachtungen für die Gen X sind, und der Vergleich zw. ältester Jahrgänge und jüngste Jahrgänge nicht ganz fair ist, verzichte ich auf eine Analyse der Gen X. Entsprechend dieser Logik mache ich auch keine Aussagen über die noch älteren Generationen.
Auf der anderen Seite ist mein Datenzeitraum auch gegen hinten beschränkt, und zwar auf das Jahr 2022. In diesem Jahr wurde der älteste Jahrgang der Gen Z 26 Jahre alt. Ich fokussiere mich in meiner Analyse deshalb auch den Lebensabschnitts des Berufseinstiegs (Alter 16-26), da Aussagen darüber hinaus in Bezug auf die Gen Z eigentlich nicht möglich sind (ausser man würde mit Daten der anderen Generationen inferieren, aber dies geht gegen mein Interesse, genau Unterschiede in den Generationen zu untersuchen). Da Hochschulabgänger oft erst mit Ende 20 ins Berufsleben einsteigen, ist die Aussagekraft über diese Gruppe leider etwas klein, aber dafür gibt es andere Vorteile.
# Subset mit Gen Z + Gen Y im Lebensabschnitt "Berufseinstieg"
shp_u26 <- shp %>%
filter(!AGE>26) %>%
filter(GEN %in% c("Gen Y ('81-'95)", "Gen Z ('96-'10)")) %>%
mutate(GEN = factor(GEN,
level = c("Gen Y ('81-'95)", "Gen Z ('96-'10)")))
Der Vorteil beim Fokus auf 16-26 Jährige ist es auch, dass damit automatisch der Bias von Age-Effekt auf den Cohort-Effekt (Stichwort: APC-Problem) vermindert wird. Hier als Veranschaulichung die Variable “EXHAUST”, bei der die Befragten angaben, wie erschöpft sie nach der Arbeit sind, um z.B. Hobbies nachzugehen (Skala 0 bzw. “gar nicht” - 10 bzw. “komplett”):
# Referenzkategorie auf Gen Z wechseln
shp <- shp %>%
mutate(GEN_rev=fct_relevel(GEN,c("Gen Alpha ('10-heute)", "Gen Z ('96-'10)",
"Gen Y ('81-'95)", "Gen X ('66-'80)",
"Babyboomer ('56-'65)", "Traditionals ('22-'55)")))
shp_u26 <- shp_u26 %>%
mutate(GEN_rev=fct_relevel(GEN,c("Gen Z ('96-'10)",
"Gen Y ('81-'95)")))
# Lineare Regression zu EXHAUST
lm1_EXHAUST <- lm(EXHAUST ~ GEN_rev, data = shp) # GEN-Effekt allein
lm2_EXHAUST <- lm(EXHAUST ~ GEN_rev + AGE + AGE2 + YEAR, data = shp) # GEN-Effekt kontrolliert nach AGE, AGE2, YEAR
lm3_EXHAUST <- lm(EXHAUST ~ GEN_rev, data = shp_u26) # GEN-Effekt allein bzw. AGE etwas kontrolliert durch filter==AGE<26
lm4_EXHAUST <- lm(EXHAUST ~ GEN_rev + AGE + AGE2 + YEAR, data = shp_u26) # GEN-Effekt kontrolliert nach AGE, AGE2, YEAR
screenreg(list(lm1_EXHAUST, lm2_EXHAUST, lm3_EXHAUST, lm4_EXHAUST),
custom.model.names = c("shp, M1", "shp, M2", "shp_u26, M3", "shp_u26, M4"))
##
## ==================================================================================
## shp, M1 shp, M2 shp_u26, M3 shp_u26, M4
## ----------------------------------------------------------------------------------
## (Intercept) 4.27 *** -16.45 *** 4.27 *** -26.42 *
## (0.03) (4.92) (0.03) (11.03)
## GEN_revGen Y ('81-'95) 0.13 *** -0.04 -0.06 -0.01
## (0.04) (0.05) (0.04) (0.07)
## GEN_revGen X ('66-'80) 0.31 *** -0.06
## (0.03) (0.07)
## GEN_revBabyboomer ('56-'65) 0.27 *** -0.04
## (0.04) (0.09)
## AGE 0.07 *** 0.14
## (0.01) (0.09)
## AGE2 -0.00 *** -0.00
## (0.00) (0.00)
## YEAR 0.01 *** 0.01 **
## (0.00) (0.01)
## ----------------------------------------------------------------------------------
## R^2 0.00 0.00 0.00 0.00
## Adj. R^2 0.00 0.00 0.00 0.00
## Num. obs. 99632 99632 17424 17424
## ==================================================================================
## *** p < 0.001; ** p < 0.01; * p < 0.05
Im ersten Modell verwende ich den gesamten shp-Datensatz und nur die Generationen (GEN) als unabhängige Variable, um die Varianzen bei EXHAUST zu erklären. Obwohl der Generationen-Effekt bzw. die Unterschiede zw. den Generationen klein sind, sind sie signifikant. Sobald ich Alter (AGE), quadriertes Alter (AGE2) und Jahr (YEAR) aber als Kontrolle in das Modell einfliessen lasse, ist der Kohorteneffekt für keine Generation mehr signifikant (Modell 2). In Modell 3 kontrolliere ich schon allein durch den Datensatz, der auf 16-26 Jährige gefiltert wurde, für das Alter. Man sieht, dass dadurch auch kein siginifanter Generationeneffekt existiert. 16-26 ist aber ein Lebensabschnitt, in dem viele neue Veränderungen passieren, oft von einem Jahr aufs nächste - deshalb binde ich in Modell 4 die Alterskontrollen nochmals kontinuierlich ein. Weil das Alter hier auch nicht mehr signifikant ist, interpretiere ich es als Kontrolle genug, wenn ich die Alter 16-26 in einer gemeinsamen Gruppe behalte. Ein weiterer Vorteil entsteht durch diese Beschränkung auch bez. der Verteilung der exogenen Variablen (Bildung, Anstellungstyp, Einkommen, Zivilstand, Kinder) gleichmässiger, da diese stark mit dem Alter zusammenhängen. Zum Beispiel war das durchschnittliche Heiratsalter in der Schweiz 2002 ca. 28 Jahre für Frauen und ca. 30 Jahre für Männer, seit dem ist sie konstant und linear gestiegen auf 30 bzw. 32 Jahre im 2022 (BFS 2023) - mit der Begrezung auf Jugendliche bis 26 Jahre ist der Lebensabschnitt als ledige Person, die vermutlich weniger Verantwortung trägt und somit wohl auch eine andere Beziehung zur Arbeit hat als verheiratete Personen. 16-26 ist auch annähernd gleich wie 15-25 - laut Karl Mannheim, der das Konzept der Generationen definierte, stellt die Altersspanne 15-25 als den prägenden Lebensabschnitt einer Person dar (Schröder 2023). Prägende Ereignisse während den prägenden Jahren sind erst überhaupt der Grund, warum laut ihm eine Generation entsteht.
Exogene Variablen:
# Funktionen für Merkmalverteilungen ----
verteilung <- function(data, vari){
p <- data %>%
group_by(GEN) %>%
filter(!is.na({{vari}})) %>%
count({{vari}}) %>%
mutate(prop = n/sum(n),
rprop = round(prop,2)
)
}
verteilung_prop_barplot <- function(data, vari){
p <- data %>%
ggplot(aes(y = prop, x = {{vari}}, fill = {{vari}})) +
geom_bar(stat = "identity", position = "dodge") +
facet_wrap(~ GEN) +
scale_y_continuous(labels = scales::percent_format(accuracy = 1),
breaks = c(0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1),
limits = c(0,1)
) +
theme_minimal() +
theme(legend.position = "none")
}
verteilung_densityplot <- function(data, vari){
p <- data %>%
group_by(GEN) %>%
ggplot(aes(x = {{vari}},
y = reorder(GEN, {{vari}}),
fill = GEN)) +
scale_x_continuous(n.breaks = 10) +
ggridges::stat_density_ridges(bandwidth = 0.6,
quantile_lines = TRUE, # Median Indikator hinzufügen
quantiles = (0.5)) +
theme_minimal() +
theme(axis.text.y = element_blank(),
axis.ticks.y = element_blank())
}
## Geschlechterverteilung der Generationengruppen ----
verteilung_sex <- verteilung(shp_u26, SEX)
verteilung_sex_plot <- verteilung_prop_barplot(verteilung_sex, SEX) +
labs(title = "Merkmalverteilung: SEX",
caption = "Daten: SHP, 2002-2022, 16-26J",
x = "",
y = "")
verteilung_sex_plot
## Alterverteilung der Generationengruppen ----
verteilung_age <- verteilung(shp_u26, AGE)
verteilung_age_plot <- verteilung_densityplot(shp_u26, AGE) +
labs(title = "Merkmalverteilung: AGE",
caption = "Daten: SHP, 2002-2022, 16-26J",
x = "",
y = "Abs. Häufigkeit")
verteilung_age_plot
## Bildungsverteilung der Generationengruppen ----
verteilung_edu <- verteilung(shp_u26, EDU_HIGH)
verteilung_edu1_plot <- verteilung_prop_barplot(verteilung_edu, EDU_HIGH) +
coord_flip() +
labs(title = "Merkmalverteilung: EDU_HIGH",
caption = "Daten: SHP, 2002-2022, 16-26J",
x = "",
y = "")
verteilung_edu1_plot
verteilung_edu2_plot <- verteilung_densityplot(shp_u26, EDU_YEAR) +
labs(title = "Merkmalverteilung: EDU_YEAR",
caption = "Daten: SHP, 2002-2022, 16-26J",
x = "",
y = "Abs. Häufigkeit")
verteilung_edu2_plot
## Verteilung des Zivilstands der Generationengruppen ----
verteilung_civ <- verteilung(shp_u26, CIVIL)
verteilung_civ_plot <- verteilung_prop_barplot(verteilung_civ, CIVIL) +
labs(title = "Merkmalverteilung: CIVIL",
caption = "Daten: SHP, 2002-2022, 16-26J",
x = "",
y = "")
verteilung_civ_plot
## Verteilung des Kinderhabens der Generationengruppen ----
verteilung_kids <- verteilung(shp_u26, KIDS)
verteilung_kids_plot <- verteilung_prop_barplot(verteilung_kids, KIDS) +
labs(title = "Merkmalverteilung: KIDS",
caption = "Daten: SHP, 2002-2022, 16-26J",
x = "",
y = "")
verteilung_kids_plot
## Einkommensverteilung der Generationengruppen ----
verteilung_income <- verteilung(shp_u26, INCOME_NET)
verteilung_income_plot <- verteilung_densityplot(shp_u26, INCOME_NET) +
scale_x_continuous(limits=c(0, 100000)) +
labs(title = "Merkmalverteilung: INCOME_NET",
caption = "Daten: SHP, 2002-2022, 16-26J",
x = "",
y = "Abs. Häufigkeit")
verteilung_income_plot
## Teilzeit ----
verteilung_parttime <- verteilung(shp_u26, PARTTIME)
verteilung_parttime_plot <- verteilung_prop_barplot(verteilung_parttime, PARTTIME) +
labs(title = "Merkmalverteilung: PARTTIME",
caption = "Daten: SHP, 2002-2022, 16-26J",
x = "",
y = "")
verteilung_parttime_plot
Bezüglich der Generationengruppen-Grösse sind nur etwa halb so viele Gen Z (35%) im Datensatz wie Gen Y (65%). Dies ist ein enormer Unterschied, weshalb ich mir überlegt habe, dies via Matching-Methoden (z.B. Propensity Score Matching) auszugleichen. Ich habe mich dann aber dagegen entschieden, da es (je nach genauer Methode) zu noch kleineren Samples führen kann und diese Datenmanipulation auch wieder Verzerrungen hervorbringen kann.
Grösse:
# Grösse der Generationengruppen für gesamtes shp
table(shp$GEN) # 6100 Z, 24104 Y, 37588 X, 32226 Boomer
##
## Babyboomer ('56-'65) Gen X ('66-'80) Gen Y ('81-'95)
## 32226 37588 24104
## Gen Z ('96-'10)
## 6100
round(prop.table(table(shp$GEN)),2)*100 # 6% Z, 24% Y, 38% X, 32% Boomer
##
## Babyboomer ('56-'65) Gen X ('66-'80) Gen Y ('81-'95)
## 32 38 24
## Gen Z ('96-'10)
## 6
# Grösse der Generationengruppen für U26
table(shp_u26$GEN) # 6100 Z, 11425 Y
##
## Gen Y ('81-'95) Gen Z ('96-'10)
## 11425 6100
round(prop.table(table(shp_u26$GEN)),2)*100 # 35% Z, 65% Y
##
## Gen Y ('81-'95) Gen Z ('96-'10)
## 65 35
shp_u26$WORK_HOURS <- ifelse(shp_u26$WORK_HOURS < 0, NA, shp_u26$WORK_HOURS)
# deskriptive Statistiken pro Generationsgruppe
describeBy(shp_u26$WORK_HOURS, shp_u26$GEN)
##
## Descriptive statistics by group
## group: Gen Y ('81-'95)
## vars n mean sd median trimmed mad min max range skew kurtosis se
## X1 1 10520 34.67 14.55 42 36.44 4.45 1 96 95 -1 0.06 0.14
## ------------------------------------------------------------
## group: Gen Z ('96-'10)
## vars n mean sd median trimmed mad min max range skew kurtosis se
## X1 1 5153 32.99 15.33 40 34.65 7.41 1 95 94 -0.85 -0.27 0.21
hist(shp_u26$WORK_HOURS)
# Verteilung ist nicht normal, sondern left-skewed -> nicht-parametrische Analyse
# Boxplot inkl. mean
mean <- shp_u26 %>%
group_by(YEAR, GEN) %>%
summarize(mean = mean(WORK_HOURS, na.rm=T),
median = median(WORK_HOURS, na.rm=T),
sd = sd(WORK_HOURS, na.rm=T)) %>%
ungroup %>%
filter(YEAR %in% c(2002,2007,2010,2012,2017,2022)) # nur alle 5 Jahre, damit Grafik leserlicher ist
shp_u26 %>%
filter(YEAR %in% c(2002,2007,2010,2012,2017,2022)) %>%
ggplot(aes(y=WORK_HOURS, x = GEN, colour=GEN)) +
#geom_jitter(alpha = 0.1) +
geom_boxplot() +
geom_point(data = mean,
aes(x = GEN, y = mean),
shape = 13,
size = 2) +
facet_grid(GEN~YEAR) +
labs(title = "Arbeitsstunden pro Woche",
subtitle = "pro Jahr und Generation, in h",
caption = "Daten: SHP, 2002-2022, 16-26J",
x = "",
y = "") +
theme(legend.position = "bottom",
axis.text.x = element_blank(),
axis.ticks.x = element_blank())
# -> Die Within-Group-Variance unterscheidet sich ein wenig von Jahr zu Jahr. Grundsätzlich arbeiten die allermeisten 40h (Median). Mehr als das machen die meisten nicht, sondern eher weniger.
# Levene Test um zu testen, ob die Varianzen von den Gruppen (Generationen) homogen sind
car::leveneTest(shp_u26$WORK_HOURS ~ shp_u26$GEN)
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 1 21.699 3.216e-06 ***
## 15671
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Nullhypothese: es gibt keine sign. Unterschiede
# Altenativhypothese: es gibt (mind. 1) sign. Unterschied
#-> Varianzen für WORK_HOURS sind unterschiedlich zw. Gen Y & Gen Z (weil p-Wert signifikant), d.h. signifikante Between-Group-Variance.
# Mann-Withney U Test (weil Nicht-Parametrisch & Heterogene Varianz), um Signifikanz der Unterschiede zu prüfen
library(rstatix)
shp_u26 %>%
wilcox_test(WORK_HOURS ~ GEN,
detailed = TRUE) %>%
glimpse()
## Rows: 1
## Columns: 12
## $ estimate <dbl> 0.999962
## $ .y. <chr> "WORK_HOURS"
## $ group1 <chr> "Gen Y ('81-'95)"
## $ group2 <chr> "Gen Z ('96-'10)"
## $ n1 <int> 10520
## $ n2 <int> 5153
## $ statistic <dbl> 29390845
## $ p <dbl> 5.73e-18
## $ conf.low <dbl> 5.387342e-05
## $ conf.high <dbl> 0.9999617
## $ method <chr> "Wilcoxon"
## $ alternative <chr> "two.sided"
# -> signifikanter Effekt
# Effektgrösse
ef_WORK_HOURS <- shp_u26 %>%
wilcox_effsize(WORK_HOURS ~ GEN,
ci = TRUE)
effectsize::interpret_r(ef_WORK_HOURS$effsize)
## Effect size (r)
## "very small"
## (Rules: funder2019)
# -> sehr kleine Effektgrösse
# Lineplot über Zeit mit allen Datenpunkten ----
shp_u26 %>%
#Plot
ggplot(aes(y=WORK_HOURS, x = YEAR, colour = GEN)) +
#geom_point(alpha=0.1) +
geom_smooth(method = "lm") +
scale_x_continuous(breaks = scales::breaks_width(1), limits=c(2002,2022)) +
labs(title = "Arbeitszeit pro Woche",
subtitle = "pro Jahr und Generation, in h",
x = "",
y = "Arbeitsstunden pro Woche") +
theme_minimal() +
theme(legend.position = "bottom",
plot.title = element_text(size = 14, face = 2, margin = margin(0, 0, 2, 0), hjust = 0),
plot.title.position = "plot")
# Lineplot über Zeit nur mit jährlichen Durchschnittswerten ----
shp_u26 %>%
#Durchschnitt berechnen
group_by(YEAR, GEN) %>%
summarize(mean = mean(WORK_HOURS, na.rm=T),
median = median(WORK_HOURS, na.rm=T),
sd = sd(WORK_HOURS, na.rm=T),
perc25 = quantile(WORK_HOURS, 0.25, na.rm=T),
perc75 = quantile(WORK_HOURS, 0.75, na.rm=T)) %>%
#Plot
ggplot(aes(x = YEAR, y = mean, colour = GEN, fill = GEN)) +
geom_point() +
geom_line() +
#geom_ribbon(aes(ymin = perc25, ymax = perc75), alpha=0.2) +
#geom_smooth(method = "lm") +
scale_x_continuous(breaks = scales::breaks_width(1), limits=c(2002,2022)) +
scale_y_continuous(limits = c(0,45)) +
labs(title = "Durchschnittliche Arbeitszeit pro Woche",
subtitle = "pro Jahr und Generation, in h",
x = "",
y = "⌀ Arbeitsstunden pro Woche") +
theme_minimal() +
theme(legend.position = "bottom",
plot.title = element_text(size = 14, face = 2, margin = margin(0, 0, 2, 0), hjust = 0),
plot.title.position = "plot")
# Lineplot über Zeit nur mit jährlichen Durchschnittswerten, nicht gefiltert nach Alter ----
shp %>%
#Durchschnitt berechnen
group_by(YEAR, GEN) %>%
summarize(mean = mean(WORK_HOURS, na.rm=T),
median = median(WORK_HOURS, na.rm=T),
sd = sd(WORK_HOURS, na.rm=T),
perc25 = quantile(WORK_HOURS, 0.25, na.rm=T),
perc75 = quantile(WORK_HOURS, 0.75, na.rm=T)) %>%
#Plot
ggplot(aes(x = YEAR, y = mean, colour = GEN, fill = GEN)) +
geom_point() +
geom_line() +
#geom_ribbon(aes(ymin = perc25, ymax = perc75), alpha=0.2) +
#geom_smooth(method = "lm") +
scale_x_continuous(breaks = scales::breaks_width(1), limits=c(2002,2022)) +
scale_y_continuous(limits = c(0,45)) +
labs(title = "Durchschnittliche Arbeitszeit pro Woche",
subtitle = "pro Jahr und Generation, in h",
x = "",
y = "⌀ Arbeitsstunden pro Woche") +
theme_minimal() +
theme(legend.position = "bottom",
plot.title = element_text(size = 14, face = 2, margin = margin(0, 0, 2, 0), hjust = 0),
plot.title.position = "plot")
# -> Im Vergleich zum Lineplot nur mit 16-26-Jährigen sind die Unterschiede zwischen den Generationen, wenn auch minimal, kleiner geworden. Dies fasse ich als erneute Bestätigung, dass die Beschränkung auf junge Personen im Datensatz richtig war.
# -> Bei allen drei Visualisierungen ist zu sehen, dass die (durchsch.) Arbeitszeit für alle Generationen mit der Zeit ganz wenig kürzer wird.
Als Robustness Check rechne ich jeweils noch eine Regression, mit der ich vorhergesagte Werte von und marginale Effekte zwischen den Generationen berechnen kann. Da ich das Alter hier doch auch nochmals als kontinuierliche Kontrollvariable berücksichtige (statt mich nur auf den Filter AGE = 16 bis 26 zu verlassen), kann es leichte Differenzen bei den Effekten geben. Hier komme ich auf dasselbe Ergebnis wie oben, dass es einen signifikanten, aber sehr kleinen Generationenunterschied gibt bei der Anzahl Arbeitsstunden pro Woche. In der Grafik sieht man dies daran, dass sich die Konfidenzitervalle sich (zumindest für einige Jahre) nicht überlappen.
Für das Reporting im Blog verwende ich aber keine Grafiken, die auf die Regression zurückzuführen sind, sondern zeige die deskriptiven Ergebnisse als Lineplot (s. oben). Dies weil, die deskriptiven Plots dieselben Tendenzen aufzeigen und für die durchschnittliche Leserschaft einfacher ist zu verstehen.
lm_WORK_HOURS <- lm(WORK_HOURS ~ GEN_rev + AGE + AGE2 + YEAR, data = shp_u26) # GEN-Effekt kontrolliert nach AGE, AGE2, YEAR
screenreg(lm_WORK_HOURS)
##
## ====================================
## Model 1
## ------------------------------------
## (Intercept) 206.65 **
## (68.43)
## GEN_revGen Y ('81-'95) 1.06 *
## (0.41)
## AGE -3.50 ***
## (0.58)
## AGE2 0.08 ***
## (0.01)
## YEAR -0.07 *
## (0.03)
## ------------------------------------
## R^2 0.01
## Adj. R^2 0.01
## Num. obs. 15673
## ====================================
## *** p < 0.001; ** p < 0.01; * p < 0.05
v_predicted_WORK_HOURS <- predicts(lm_WORK_HOURS, c("F", "mean", "mean", "2002-2022"))
v_predicted_WORK_HOURS %>%
ggplot(aes(x = YEAR, y = mean, fill = GEN_rev, colour = GEN_rev)) +
geom_line() +
geom_ribbon(aes(ymin = lower, ymax = upper), alpha = 0.2)
dcv_predicted_WORK_HOURS <- predicts(lm_WORK_HOURS, c("F", "mean", "mean", "2002-2022"),
position = 1)
# deskriptive Statistiken pro Generationsgruppe
describeBy(shp_u26$WORK_HOURS_DIF, shp_u26$GEN)
##
## Descriptive statistics by group
## group: Gen Y ('81-'95)
## vars n mean sd median trimmed mad min max range skew kurtosis se
## X1 1 9928 1.8 10.96 0 1.09 0 -65 101 166 0.25 13.97 0.11
## ------------------------------------------------------------
## group: Gen Z ('96-'10)
## vars n mean sd median trimmed mad min max range skew kurtosis se
## X1 1 4833 0.99 11.45 0 0.79 0 -65 83 148 -0.22 11.35 0.16
hist(shp_u26$WORK_HOURS_DIF)
# normalverteilt -> parametrisch
# Boxplot inkl. mean
mean <- shp_u26 %>%
group_by(YEAR, GEN) %>%
summarize(mean = mean(WORK_HOURS_DIF, na.rm=T),
median = median(WORK_HOURS_DIF, na.rm=T),
sd = sd(WORK_HOURS_DIF, na.rm=T)) %>%
ungroup %>%
filter(YEAR %in% c(2002,2007,2010,2012,2017,2022)) # nur alle 5 Jahre, damit Grafik leserlicher ist
shp_u26 %>%
filter(YEAR %in% c(2002,2007,2010,2012,2017,2022)) %>%
ggplot(aes(y=WORK_HOURS_DIF, x = GEN, colour=GEN)) +
#geom_jitter(alpha = 0.1) +
geom_boxplot() +
geom_point(data = mean,
aes(x = GEN, y = mean),
shape = 13,
size = 2) +
facet_grid(~YEAR) +
labs(title = "Differenz Soll- & Echt-Arbeitzeit pro Woche",
subtitle = "pro Jahr und Generation, in h",
caption = "Daten: SHP, 2002-2022, 16-26J",
x = "",
y = "") +
theme(legend.position = "bottom",
axis.text.x = element_blank(),
axis.ticks.x = element_blank())
# Levene Test um zu testen, ob die Varianzen von den Gruppen (Generationen) homogen sind
car::leveneTest(shp_u26$WORK_HOURS_DIF ~ shp_u26$GEN)
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 1 0.9701 0.3247
## 14759
# Nullhypothese: es gibt keine sign. Unterschiede
# Altenativhypothese: es gibt (mind. 1) sign. Unterschied
#-> Varianzen für WORK_HOURS_DIF sind NICHT unterschiedlich zw. Gen Y & Gen Z (weil p-Wert NICHT signifikant).
# t-Test
shp_u26 %>% t_test(WORK_HOURS_DIF ~ GEN,
var.equal = TRUE,
detailed = TRUE) %>%
glimpse()
## Rows: 1
## Columns: 15
## $ estimate <dbl> 0.8050348
## $ estimate1 <dbl> 1.795931
## $ estimate2 <dbl> 0.9908959
## $ .y. <chr> "WORK_HOURS_DIF"
## $ group1 <chr> "Gen Y ('81-'95)"
## $ group2 <chr> "Gen Z ('96-'10)"
## $ n1 <int> 9928
## $ n2 <int> 4833
## $ statistic <dbl> 4.12689
## $ p <dbl> 3.7e-05
## $ df <dbl> 14759
## $ conf.low <dbl> 0.4226721
## $ conf.high <dbl> 1.187397
## $ method <chr> "T-test"
## $ alternative <chr> "two.sided"
# -> Unterschied ist signifikant
# Effektgrösse
ef_WORK_HOURS_DIF <- shp_u26 %>%
cohens_d(WORK_HOURS_DIF ~ GEN,
var.equal = TRUE,
ci = TRUE)
effectsize::interpret_cohens_d(ef_WORK_HOURS_DIF$effsize)
## Cohen's d
## "very small"
## (Rules: cohen1988)
# -> Unterschied ist sehr klein
verteilung_WORK_HOURS_DIF <- verteilung(shp_u26, WORK_HOURS_DIF)
verteilung_WORK_HOURS_DIF_plot <- verteilung_densityplot(shp_u26, WORK_HOURS_DIF) +
labs(title = "Merkmalverteilung: WORK_HOURS_DIF",
caption = "Daten: SHP, 2002-2022, 16-26J",
x = "",
y = "Abs. Häufigkeit") +
theme_minimal() +
theme(plot.title = element_text(size = 14, face = 2, margin = margin(0, 0, 2, 0), hjust = 0),
plot.title.position = "plot")
verteilung_WORK_HOURS_DIF_plot
shp_u26 %>%
ggplot(aes(x=WORK_HOURS_DIF, colour=GEN)) +
geom_density(alpha=0.1) +
theme_minimal()
# as.factor & Prozente
shp_u26 <- shp_u26 %>%
mutate(WORK_HOURS_DIF_fac = case_when(
WORK_HOURS_DIF < 0 ~ "im Minus",
WORK_HOURS_DIF %in% 0 ~ "auf Null",
WORK_HOURS_DIF > 0 ~ "im Plus"
))
round(prop.table(table(shp_u26$GEN, shp_u26$WORK_HOURS_DIF_fac),1),2)*100
##
## auf Null im Minus im Plus
## Gen Y ('81-'95) 54 7 38
## Gen Z ('96-'10) 57 10 33
lm_WORK_HOURS_DIF <- lm(WORK_HOURS_DIF ~ GEN_rev + AGE + AGE2 + YEAR, data = shp_u26) # GEN-Effekt kontrolliert nach AGE, AGE2, YEAR
screenreg(lm_WORK_HOURS_DIF)
##
## ===================================
## Model 1
## -----------------------------------
## (Intercept) 33.81
## (53.06)
## GEN_revGen Y ('81-'95) 0.07
## (0.32)
## AGE 1.46 **
## (0.46)
## AGE2 -0.03 *
## (0.01)
## YEAR -0.03
## (0.03)
## -----------------------------------
## R^2 0.01
## Adj. R^2 0.01
## Num. obs. 14761
## ===================================
## *** p < 0.001; ** p < 0.01; * p < 0.05
v_predicted_WORK_HOURS_DIF <- predicts(lm_WORK_HOURS_DIF, c("F", "mean", "mean", "2002-2022"))
v_predicted_WORK_HOURS_DIF %>%
ggplot(aes(x = YEAR, y = mean, fill = GEN_rev, colour = GEN_rev)) +
geom_line() +
geom_ribbon(aes(ymin = lower, ymax = upper), alpha = 0.2)
dcv_predicted_WORK_HOURS_DIF <- predicts(lm_WORK_HOURS_DIF, c("F", "mean", "mean", "2002-2022"),
position = 1)
round(prop.table(table(shp_u26$GEN, shp_u26$JOB_CHANGE),1),2)*100
##
## Ja Nein
## Gen Y ('81-'95) 2 98
## Gen Z ('96-'10) 2 98
df_JOB_CHANGE_REAS <-as.data.frame(round(prop.table(table(shp_u26$GEN, shp_u26$JOB_CHANGE_REAS),1),2)) %>%
pivot_wider(names_from = Var1, values_from = Freq) %>%
filter(!`Gen Z ('96-'10)` %in% 0)
#Visualisierung rangiert nach Gen Z
dumbbell_JOB_CHANGE_REAS <- ggplot(df_JOB_CHANGE_REAS) +
aes(y = reorder(Var2, `Gen Z ('96-'10)`), x = `Gen Z ('96-'10)`, xend = `Gen Y ('81-'95)`) +
geom_dumbbell(size = 1.5, size_x = 2, size_xend = 2, color = "gray71",
colour_x = "#0f6599", colour_xend = "#d7191c") +
labs(title = "Gründe für Jobwechsel",
subtitle = "nach Generationen, in %",
caption = "Daten: SHP, 2002-2022, 16-26J",
x = "",
y = "") +
scale_x_continuous(labels = scales::percent) +
theme_minimal() +
theme(plot.title = element_text(size = 14, face = 2, margin = margin(0, 0, 2, 0), hjust = 0),
plot.title.position = "plot") +
geom_text(data = filter(df_JOB_CHANGE_REAS, Var2 == "Ausbildung, Praktikum, Studium (Ende, Anfang, Abbruch, Weiterbildung)"),
aes(x=`Gen Z ('96-'10)`, y = Var2, label = "Gen Z"),
color = "#0f6599", size = 3, vjust = -1.5) +
geom_text(data = filter(df_JOB_CHANGE_REAS, Var2 == "Ausbildung, Praktikum, Studium (Ende, Anfang, Abbruch, Weiterbildung)"),
aes(x=`Gen Y ('81-'95)`, y = Var2, label = "Gen Y"),
color = "#d7191c", size = 3, vjust = -1.5)
dumbbell_JOB_CHANGE_REAS
# deskriptive Statistiken pro Generationsgruppe
describeBy(shp_u26$DISCONNECT, shp_u26$GEN)
##
## Descriptive statistics by group
## group: Gen Y ('81-'95)
## vars n mean sd median trimmed mad min max range skew kurtosis se
## X1 1 11392 2.48 2.46 2 2.17 2.97 0 10 10 0.81 -0.22 0.02
## ------------------------------------------------------------
## group: Gen Z ('96-'10)
## vars n mean sd median trimmed mad min max range skew kurtosis se
## X1 1 6036 2.46 2.45 2 2.14 2.97 0 10 10 0.86 -0.06 0.03
hist(shp_u26$DISCONNECT)
# nicht normalverteilt -> nicht parametrisch
# Boxplot inkl. mean
mean <- shp_u26 %>%
group_by(YEAR, GEN) %>%
summarize(mean = mean(DISCONNECT, na.rm=T),
median = median(DISCONNECT, na.rm=T),
sd = sd(DISCONNECT, na.rm=T)) %>%
ungroup %>%
filter(YEAR %in% c(2002,2007,2010,2012,2017,2022)) # nur alle 5 Jahre, damit Grafik leserlicher ist
shp_u26 %>%
filter(YEAR %in% c(2002,2007,2010,2012,2017,2022)) %>%
ggplot(aes(y=DISCONNECT, x = GEN, colour=GEN)) +
#geom_jitter(alpha = 0.1) +
geom_boxplot() +
geom_point(data = mean,
aes(x = GEN, y = mean),
shape = 13,
size = 2) +
facet_grid(~YEAR) +
labs(title = "Schwierigkeit, sich von Arbeit zu trennen",
subtitle = "pro Jahr und Generation, 0=gar nicht & 10=absolut",
caption = "Daten: SHP, 2002-2022, 16-26J",
x = "",
y = "") +
theme(legend.position = "bottom",
axis.text.x = element_blank(),
axis.ticks.x = element_blank())
# Levene Test um zu testen, ob die Varianzen von den Gruppen (Generationen) homogen sind
car::leveneTest(shp_u26$DISCONNECT ~ shp_u26$GEN)
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 1 0.6796 0.4097
## 17426
# Nullhypothese: es gibt keine sign. Unterschiede
# Altenativhypothese: es gibt (mind. 1) sign. Unterschied
#-> Varianzen für DISCONNECT sind NICHT unterschiedlich zw. Gen Y & Gen Z (weil p-Wert NICHT signifikant).
# Mann-Withney U Test (weil Nicht-Parametrisch & Heterogene Varianz), um Signifikanz der Unterschiede zu prüfen
library(rstatix)
shp_u26 %>%
wilcox_test(DISCONNECT ~ GEN,
detailed = TRUE) %>%
glimpse()
## Rows: 1
## Columns: 12
## $ estimate <dbl> 2.193308e-05
## $ .y. <chr> "DISCONNECT"
## $ group1 <chr> "Gen Y ('81-'95)"
## $ group2 <chr> "Gen Z ('96-'10)"
## $ n1 <int> 11392
## $ n2 <int> 6036
## $ statistic <dbl> 34483998
## $ p <dbl> 0.739
## $ conf.low <dbl> -4.128818e-05
## $ conf.high <dbl> 3.647266e-05
## $ method <chr> "Wilcoxon"
## $ alternative <chr> "two.sided"
# -> kein signifikanter Effekt, dementsprechend berechne ich auch keine Effektgrösse
# Lineplot über Zeit mit allen Datenpunkten ----
shp_u26 %>%
#Plot
ggplot(aes(y=DISCONNECT, x = YEAR, colour = GEN)) +
#geom_point(alpha=0.1) +
geom_smooth(method = "lm") +
scale_y_continuous(limits=c(0,10)) +
scale_x_continuous(breaks = scales::breaks_width(1), limits=c(2002,2022)) +
labs(title = "Schwierigkeit, sich von Arbeit zu trennen",
subtitle = "pro Jahr und Generation, 0=gar nicht & 10=absolut",
x = "",
y = "") +
theme_minimal() +
theme(legend.position = "bottom",
plot.title = element_text(size = 14, face = 2, margin = margin(0, 0, 2, 0), hjust = 0),
plot.title.position = "plot")
# Lineplot über Zeit nur mit jährlichen Durchschnittswerten ----
shp_u26 %>%
#Durchschnitt berechnen
group_by(YEAR, GEN) %>%
summarize(mean = mean(DISCONNECT, na.rm=T),
median = median(DISCONNECT, na.rm=T),
sd = sd(DISCONNECT, na.rm=T)) %>%
#Plot
ggplot(aes(x = YEAR, y = mean, colour = GEN)) +
geom_point() +
geom_line() +
#geom_smooth(method = "lm") +
scale_y_continuous(limits=c(0,10)) +
scale_x_continuous(breaks = scales::breaks_width(1), limits=c(2002,2022)) +
labs(title = "Durchsch. Schwierigkeit, sich von Arbeit zu trennen",
subtitle = "pro Jahr und Generation, 0=gar nicht & 10=absolut",
x = "",
y = "") +
theme_minimal() +
theme(legend.position = "bottom",
plot.title = element_text(size = 14, face = 2, margin = margin(0, 0, 2, 0), hjust = 0),
plot.title.position = "plot")
# Lineplot über Zeit nur mit jährlichen Durchschnittswerten, nicht gefiltert nach Alter ----
shp %>%
#Durchschnitt berechnen
group_by(YEAR, GEN) %>%
summarize(mean = mean(DISCONNECT, na.rm=T),
median = median(DISCONNECT, na.rm=T),
sd = sd(DISCONNECT, na.rm=T)) %>%
#Plot
ggplot(aes(x = YEAR, y = mean, colour = GEN)) +
geom_point() +
geom_line() +
#geom_smooth(method = "lm") +
scale_y_continuous(limits=c(0,10)) +
scale_x_continuous(breaks = scales::breaks_width(1), limits=c(2002,2022)) +
labs(title = "Durchsch. Schwierigkeit, sich von Arbeit zu trennen",
subtitle = "pro Jahr und Generation, 0=gar nicht & 10=absolut",
x = "",
y = "") +
theme_minimal() +
theme(legend.position = "bottom",
plot.title = element_text(size = 14, face = 2, margin = margin(0, 0, 2, 0), hjust = 0),
plot.title.position = "plot")
lm_DISCONNECT <- lm(DISCONNECT ~ GEN_rev + AGE + AGE2 + YEAR, data = shp_u26) # GEN-Effekt kontrolliert nach AGE, AGE2, YEAR
screenreg(lm_DISCONNECT)
##
## ===================================
## Model 1
## -----------------------------------
## (Intercept) -26.93 *
## (10.68)
## GEN_revGen Y ('81-'95) -0.13 *
## (0.06)
## AGE -0.11
## (0.09)
## AGE2 0.01 **
## (0.00)
## YEAR 0.01 **
## (0.01)
## -----------------------------------
## R^2 0.03
## Adj. R^2 0.03
## Num. obs. 17428
## ===================================
## *** p < 0.001; ** p < 0.01; * p < 0.05
v_predicted_DISCONNECT <- predicts(lm_DISCONNECT, c("F", "mean", "mean", "2002-2022"))
v_predicted_DISCONNECT %>%
ggplot(aes(x = YEAR, y = mean, fill = GEN_rev, colour = GEN_rev)) +
geom_line() +
geom_ribbon(aes(ymin = lower, ymax = upper), alpha = 0.2)
dcv_predicted_DISCONNECT <- predicts(lm_DISCONNECT, c("F", "mean", "mean", "2002-2022"),
position = 1)
# deskriptive Statistiken pro Generationsgruppe
describeBy(shp_u26$EXHAUST, shp_u26$GEN)
##
## Descriptive statistics by group
## group: Gen Y ('81-'95)
## vars n mean sd median trimmed mad min max range skew kurtosis se
## X1 1 11387 4.21 2.48 4 4.21 2.97 0 10 10 0.06 -0.75 0.02
## ------------------------------------------------------------
## group: Gen Z ('96-'10)
## vars n mean sd median trimmed mad min max range skew kurtosis se
## X1 1 6037 4.27 2.54 4 4.28 2.97 0 10 10 0.01 -0.81 0.03
hist(shp_u26$EXHAUST)
# einigermassen normalverteilt -> parametrisch
# Boxplot inkl. mean
mean <- shp_u26 %>%
group_by(YEAR, GEN) %>%
summarize(mean = mean(EXHAUST, na.rm=T),
median = median(EXHAUST, na.rm=T),
sd = sd(EXHAUST, na.rm=T)) %>%
ungroup #%>%
#filter(YEAR %in% c(2002,2007,2010,2012,2017,2022)) # nur alle 5 Jahre, damit Grafik leserlicher ist
shp_u26 %>%
#filter(YEAR %in% c(2002,2007,2010,2012,2017,2022)) %>%
ggplot(aes(y=EXHAUST, x = GEN, colour=GEN)) +
#geom_jitter(alpha = 0.1) +
geom_boxplot() +
geom_point(data = mean,
aes(x = GEN, y = mean),
shape = 13,
size = 2) +
facet_grid(~YEAR) +
labs(title = "Erschöpfungsgrad nach Arbeit",
subtitle = "pro Jahr und Generation, 0=gar nicht & 10=absolut",
caption = "Daten: SHP, 2002-2022, 16-26J",
x = "",
y = "") +
theme(legend.position = "bottom",
axis.text.x = element_blank(),
axis.ticks.x = element_blank())
# Levene Test um zu testen, ob die Varianzen von den Gruppen (Generationen) homogen sind
car::leveneTest(shp_u26$EXHAUST ~ shp_u26$GEN)
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 1 7.2483 0.007104 **
## 17422
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Nullhypothese: es gibt keine sign. Unterschiede
# Altenativhypothese: es gibt (mind. 1) sign. Unterschied
#-> Varianzen für EXHAUST sind unterschiedlich zw. Gen Y & Gen Z (weil p-Wert signifikant).
# t-Test
shp_u26 %>% t_test(EXHAUST ~ GEN,
var.equal = FALSE,
detailed = TRUE) %>%
glimpse()
## Rows: 1
## Columns: 15
## $ estimate <dbl> -0.06113067
## $ estimate1 <dbl> 4.21384
## $ estimate2 <dbl> 4.274971
## $ .y. <chr> "EXHAUST"
## $ group1 <chr> "Gen Y ('81-'95)"
## $ group2 <chr> "Gen Z ('96-'10)"
## $ n1 <int> 11387
## $ n2 <int> 6037
## $ statistic <dbl> -1.525268
## $ p <dbl> 0.127
## $ df <dbl> 12046.04
## $ conf.low <dbl> -0.1396913
## $ conf.high <dbl> 0.01742994
## $ method <chr> "T-test"
## $ alternative <chr> "two.sided"
# -> Unterschied ist nicht signifikant, also berechne ich auch keine Effektgrösse
# Lineplot über Zeit mit allen Datenpunkten ----
shp_u26 %>%
#Plot
ggplot(aes(y=EXHAUST, x = YEAR, colour = GEN)) +
#geom_point(alpha=0.1) +
geom_smooth(method = "lm") +
scale_y_continuous(limits=c(0,10)) +
scale_x_continuous(breaks = scales::breaks_width(1), limits=c(2002,2022)) +
labs(title = "Erschöpfungsgrad nach Arbeit",
subtitle = "pro Jahr und Generation, 0=gar nicht & 10=absolut",
x = "",
y = "") +
theme_minimal() +
theme(legend.position = "bottom",
plot.title = element_text(size = 14, face = 2, margin = margin(0, 0, 2, 0), hjust = 0),
plot.title.position = "plot")
# Lineplot über Zeit nur mit jährlichen Durchschnittswerten ----
shp_u26 %>%
#Durchschnitt berechnen
group_by(YEAR, GEN) %>%
summarize(mean = mean(EXHAUST, na.rm=T),
median = median(EXHAUST, na.rm=T),
sd = sd(EXHAUST, na.rm=T)) %>%
#Plot
ggplot(aes(x = YEAR, y = mean, colour = GEN)) +
geom_point() +
geom_line() +
#geom_smooth(method = "lm") +
scale_y_continuous(limits=c(0,10)) +
scale_x_continuous(breaks = scales::breaks_width(1), limits=c(2002,2022)) +
labs(title = "Durchsch. Erschöpfungsgrad nach Arbeit",
subtitle = "pro Jahr und Generation, 0=gar nicht & 10=absolut",
x = "",
y = "") +
theme_minimal() +
theme(legend.position = "bottom",
plot.title = element_text(size = 14, face = 2, margin = margin(0, 0, 2, 0), hjust = 0),
plot.title.position = "plot")
# Lineplot über Zeit nur mit jährlichen Durchschnittswerten, nicht gefiltert nach Alter ----
shp %>%
#Durchschnitt berechnen
group_by(YEAR, GEN) %>%
summarize(mean = mean(EXHAUST, na.rm=T),
median = median(EXHAUST, na.rm=T),
sd = sd(EXHAUST, na.rm=T)) %>%
#Plot
ggplot(aes(x = YEAR, y = mean, colour = GEN)) +
geom_point() +
geom_line() +
#geom_smooth(method = "lm") +
scale_y_continuous(limits=c(0,10)) +
scale_x_continuous(breaks = scales::breaks_width(1), limits=c(2002,2022)) +
labs(title = "Durchsch. Erschöpfungsgrad nach Arbeit",
subtitle = "pro Jahr und Generation, 0=gar nicht & 10=absolut",
x = "",
y = "") +
theme_minimal() +
theme(legend.position = "bottom",
plot.title = element_text(size = 14, face = 2, margin = margin(0, 0, 2, 0), hjust = 0),
plot.title.position = "plot")
lm_EXHAUST <- lm(EXHAUST ~ GEN_rev + AGE + AGE2 + YEAR, data = shp_u26) # GEN-Effekt kontrolliert nach AGE, AGE2, YEAR
screenreg(lm_EXHAUST)
##
## ===================================
## Model 1
## -----------------------------------
## (Intercept) -26.42 *
## (11.03)
## GEN_revGen Y ('81-'95) -0.01
## (0.07)
## AGE 0.14
## (0.09)
## AGE2 -0.00
## (0.00)
## YEAR 0.01 **
## (0.01)
## -----------------------------------
## R^2 0.00
## Adj. R^2 0.00
## Num. obs. 17424
## ===================================
## *** p < 0.001; ** p < 0.01; * p < 0.05
v_predicted_EXHAUST <- predicts(lm_EXHAUST, c("F", "mean", "mean", "2002-2022"))
v_predicted_EXHAUST %>%
ggplot(aes(x = YEAR, y = mean, fill = GEN_rev, colour = GEN_rev)) +
geom_line() +
geom_ribbon(aes(ymin = lower, ymax = upper), alpha = 0.2)
dcv_predicted_EXHAUST <- predicts(lm_EXHAUST, c("F", "mean", "mean", "2002-2022"),
position = 1)
# deskriptive Statistiken pro Generationsgruppe
describeBy(shp_u26$SAT_FREE, shp_u26$GEN)
##
## Descriptive statistics by group
## group: Gen Y ('81-'95)
## vars n mean sd median trimmed mad min max range skew kurtosis se
## X1 1 11088 6.56 2.27 7 6.67 1.48 0 10 10 -0.44 -0.21 0.02
## ------------------------------------------------------------
## group: Gen Z ('96-'10)
## vars n mean sd median trimmed mad min max range skew kurtosis se
## X1 1 5933 6.59 2.19 7 6.67 1.48 0 10 10 -0.42 -0.16 0.03
hist(shp_u26$SAT_FREE)
# nicht normalverteilt -> nicht parametrisch
# Boxplot inkl. mean
mean <- shp_u26 %>%
group_by(YEAR, GEN) %>%
summarize(mean = mean(SAT_FREE, na.rm=T),
median = median(SAT_FREE, na.rm=T),
sd = sd(SAT_FREE, na.rm=T)) %>%
ungroup %>%
filter(YEAR %in% c(2002,2007,2010,2012,2017,2022)) # nur alle 5 Jahre, damit Grafik leserlicher ist
shp_u26 %>%
filter(YEAR %in% c(2002,2007,2010,2012,2017,2022)) %>%
ggplot(aes(y=SAT_FREE, x = GEN, colour=GEN)) +
#geom_jitter(alpha = 0.1) +
geom_boxplot() +
geom_point(data = mean,
aes(x = GEN, y = mean),
shape = 13,
size = 2) +
facet_grid(~YEAR) +
labs(title = "Zufriedenheit mit Freizeit",
subtitle = "pro Jahr und Generation, 0=gar nicht & 10=absolut",
caption = "Daten: SHP, 2002-2022, 16-26J",
x = "",
y = "") +
theme(legend.position = "bottom",
axis.text.x = element_blank(),
axis.ticks.x = element_blank())
# Levene Test um zu testen, ob die Varianzen von den Gruppen (Generationen) homogen sind
car::leveneTest(shp_u26$SAT_FREE ~ shp_u26$GEN)
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 1 9.7021 0.001844 **
## 17019
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Nullhypothese: es gibt keine sign. Unterschiede
# Altenativhypothese: es gibt (mind. 1) sign. Unterschied
#-> Varianzen für SAT_FREE sind unterschiedlich zw. Gen Y & Gen Z (weil p-Wert signifikant).
# Mann-Withney U Test (weil Nicht-Parametrisch & Heterogene Varianz), um Signifikanz der Unterschiede zu prüfen
library(rstatix)
shp_u26 %>%
wilcox_test(SAT_FREE ~ GEN,
detailed = TRUE) %>%
glimpse()
## Rows: 1
## Columns: 12
## $ estimate <dbl> -8.115041e-05
## $ .y. <chr> "SAT_FREE"
## $ group1 <chr> "Gen Y ('81-'95)"
## $ group2 <chr> "Gen Z ('96-'10)"
## $ n1 <int> 11088
## $ n2 <int> 5933
## $ statistic <dbl> 32850500
## $ p <dbl> 0.889
## $ conf.low <dbl> -4.810397e-05
## $ conf.high <dbl> 4.65107e-05
## $ method <chr> "Wilcoxon"
## $ alternative <chr> "two.sided"
# -> kein signifikanter Effekt, dementsprechend berechne ich auch keine Effektgrösse
# Lineplot über Zeit mit allen Datenpunkten ----
shp_u26 %>%
#Plot
ggplot(aes(y=SAT_FREE, x = YEAR, colour = GEN)) +
#geom_point(alpha=0.1) +
geom_smooth(method = "lm") +
scale_y_continuous(limits=c(0,10)) +
scale_x_continuous(breaks = scales::breaks_width(1), limits=c(2002,2022)) +
labs(title = "Zufridenheit mit Freizeit",
subtitle = "pro Jahr und Generation, 0=gar nicht & 10=absolut",
x = "",
y = "") +
theme_minimal() +
theme(legend.position = "bottom",
plot.title = element_text(size = 14, face = 2, margin = margin(0, 0, 2, 0), hjust = 0),
plot.title.position = "plot")
# Lineplot über Zeit nur mit jährlichen Durchschnittswerten ----
shp_u26 %>%
#Durchschnitt berechnen
group_by(YEAR, GEN) %>%
summarize(mean = mean(SAT_FREE, na.rm=T),
median = median(SAT_FREE, na.rm=T),
sd = sd(SAT_FREE, na.rm=T)) %>%
#Plot
ggplot(aes(x = YEAR, y = mean, colour = GEN)) +
geom_point() +
geom_line() +
#geom_smooth(method = "lm") +
scale_y_continuous(limits=c(0,10)) +
scale_x_continuous(breaks = scales::breaks_width(1), limits=c(2002,2022)) +
labs(title = "Durchsch. Zufridenheit mit Freizeit",
subtitle = "pro Jahr und Generation, 0=gar nicht & 10=absolut",
x = "",
y = "") +
theme_minimal() +
theme(legend.position = "bottom",
plot.title = element_text(size = 14, face = 2, margin = margin(0, 0, 2, 0), hjust = 0),
plot.title.position = "plot")
# Lineplot über Zeit nur mit jährlichen Durchschnittswerten, nicht gefiltert nach Alter ----
shp %>%
#Durchschnitt berechnen
group_by(YEAR, GEN) %>%
summarize(mean = mean(SAT_FREE, na.rm=T),
median = median(SAT_FREE, na.rm=T),
sd = sd(SAT_FREE, na.rm=T)) %>%
#Plot
ggplot(aes(x = YEAR, y = mean, colour = GEN)) +
geom_point() +
geom_line() +
#geom_smooth(method = "lm") +
scale_y_continuous(limits=c(0,10)) +
scale_x_continuous(breaks = scales::breaks_width(1), limits=c(2002,2022)) +
labs(title = "Durchsch. Zufridenheit mit Freizeit",
subtitle = "pro Jahr und Generation, 0=gar nicht & 10=absolut",
x = "",
y = "") +
theme_minimal() +
theme(legend.position = "bottom",
plot.title = element_text(size = 14, face = 2, margin = margin(0, 0, 2, 0), hjust = 0),
plot.title.position = "plot")
lm_SAT_FREE <- lm(SAT_FREE ~ GEN_rev + AGE + AGE2 + YEAR, data = shp_u26) # GEN-Effekt kontrolliert nach AGE, AGE2, YEAR
screenreg(lm_SAT_FREE)
##
## ==================================
## Model 1
## ----------------------------------
## (Intercept) 11.40
## (10.03)
## GEN_revGen Y ('81-'95) -0.05
## (0.06)
## AGE 0.17 *
## (0.08)
## AGE2 -0.00 *
## (0.00)
## YEAR -0.00
## (0.00)
## ----------------------------------
## R^2 0.00
## Adj. R^2 0.00
## Num. obs. 17021
## ==================================
## *** p < 0.001; ** p < 0.01; * p < 0.05
v_predicted_SAT_FREE <- predicts(lm_SAT_FREE, c("F", "mean", "mean", "2002-2022"))
v_predicted_DISCONNECT%>%
ggplot(aes(x = YEAR, y = mean, fill = GEN_rev, colour = GEN_rev)) +
geom_line() +
geom_ribbon(aes(ymin = lower, ymax = upper), alpha = 0.2)
dcv_predicted_SAT_FREE <- predicts(lm_SAT_FREE, c("F", "mean", "mean", "2002-2022"),
position = 1)
# deskriptive Statistiken pro Generationsgruppe
describeBy(shp_u26$SAT_HOBBY, shp_u26$GEN)
##
## Descriptive statistics by group
## group: Gen Y ('81-'95)
## vars n mean sd median trimmed mad min max range skew kurtosis se
## X1 1 11087 7.71 1.84 8 7.9 1.48 0 10 10 -0.98 1.38 0.02
## ------------------------------------------------------------
## group: Gen Z ('96-'10)
## vars n mean sd median trimmed mad min max range skew kurtosis se
## X1 1 5930 7.68 1.84 8 7.85 1.48 0 10 10 -0.92 1.28 0.02
hist(shp_u26$SAT_HOBBY)
# nicht normalverteilt -> nicht parametrisch
# Boxplot inkl. mean
mean <- shp_u26 %>%
group_by(YEAR, GEN) %>%
summarize(mean = mean(SAT_HOBBY, na.rm=T),
median = median(SAT_HOBBY, na.rm=T),
sd = sd(SAT_HOBBY, na.rm=T)) %>%
ungroup %>%
filter(YEAR %in% c(2002,2007,2010,2012,2017,2022)) # nur alle 5 Jahre, damit Grafik leserlicher ist
shp_u26 %>%
filter(YEAR %in% c(2002,2007,2010,2012,2017,2022)) %>%
ggplot(aes(y=SAT_HOBBY, x = GEN, colour=GEN)) +
#geom_jitter(alpha = 0.1) +
geom_boxplot() +
geom_point(data = mean,
aes(x = GEN, y = mean),
shape = 13,
size = 2) +
facet_grid(~YEAR) +
labs(title = "Zufriedenheit mit Hobbies",
subtitle = "pro Jahr und Generation, 0=gar nicht & 10=absolut",
caption = "Daten: SHP, 2002-2022, 16-26J",
x = "",
y = "") +
theme(legend.position = "bottom",
axis.text.x = element_blank(),
axis.ticks.x = element_blank())
# Levene Test um zu testen, ob die Varianzen von den Gruppen (Generationen) homogen sind
car::leveneTest(shp_u26$SAT_HOBBY ~ shp_u26$GEN)
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 1 2.9321 0.08685 .
## 17015
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Nullhypothese: es gibt keine sign. Unterschiede
# Altenativhypothese: es gibt (mind. 1) sign. Unterschied
#-> Varianzen für SAT_HOBBY sind ganz wenig unterschiedlich zw. Gen Y & Gen Z (weil p-Wert knapp signifikant).
# Mann-Withney U Test (weil Nicht-Parametrisch & Heterogene Varianz), um Signifikanz der Unterschiede zu prüfen
library(rstatix)
shp_u26 %>%
wilcox_test(SAT_HOBBY ~ GEN,
detailed = TRUE) %>%
glimpse()
## Rows: 1
## Columns: 12
## $ estimate <dbl> 1.444944e-05
## $ .y. <chr> "SAT_HOBBY"
## $ group1 <chr> "Gen Y ('81-'95)"
## $ group2 <chr> "Gen Z ('96-'10)"
## $ n1 <int> 11087
## $ n2 <int> 5930
## $ statistic <dbl> 33376595
## $ p <dbl> 0.0922
## $ conf.low <dbl> -2.741965e-05
## $ conf.high <dbl> 3.159556e-05
## $ method <chr> "Wilcoxon"
## $ alternative <chr> "two.sided"
# -> kein signifikanter Effekt, dementsprechend berechne ich auch keine Effektgrösse
# Lineplot über Zeit mit allen Datenpunkten ----
shp_u26 %>%
#Plot
ggplot(aes(y=SAT_HOBBY, x = YEAR, colour = GEN)) +
#geom_point(alpha=0.1) +
geom_smooth(method = "lm") +
scale_y_continuous(limits=c(0,10)) +
scale_x_continuous(breaks = scales::breaks_width(1), limits=c(2002,2022)) +
labs(title = "Zufridenheit mit Hobbies",
subtitle = "pro Jahr und Generation, 0=gar nicht & 10=absolut",
x = "",
y = "") +
theme_minimal() +
theme(legend.position = "bottom",
plot.title = element_text(size = 14, face = 2, margin = margin(0, 0, 2, 0), hjust = 0),
plot.title.position = "plot")
# Lineplot über Zeit nur mit jährlichen Durchschnittswerten ----
shp_u26 %>%
#Durchschnitt berechnen
group_by(YEAR, GEN) %>%
summarize(mean = mean(SAT_HOBBY, na.rm=T),
median = median(SAT_HOBBY, na.rm=T),
sd = sd(SAT_HOBBY, na.rm=T)) %>%
#Plot
ggplot(aes(x = YEAR, y = mean, colour = GEN)) +
geom_point() +
geom_line() +
#geom_smooth(method = "lm") +
scale_y_continuous(limits=c(0,10)) +
scale_x_continuous(breaks = scales::breaks_width(1), limits=c(2002,2022)) +
labs(title = "Durchsch. Zufridenheit mit Hobbies",
subtitle = "pro Jahr und Generation, 0=gar nicht & 10=absolut",
x = "",
y = "") +
theme_minimal() +
theme(legend.position = "bottom",
plot.title = element_text(size = 14, face = 2, margin = margin(0, 0, 2, 0), hjust = 0),
plot.title.position = "plot")
# Lineplot über Zeit nur mit jährlichen Durchschnittswerten, nicht gefiltert nach Alter ----
shp %>%
#Durchschnitt berechnen
group_by(YEAR, GEN) %>%
summarize(mean = mean(SAT_HOBBY, na.rm=T),
median = median(SAT_HOBBY, na.rm=T),
sd = sd(SAT_HOBBY, na.rm=T)) %>%
#Plot
ggplot(aes(x = YEAR, y = mean, colour = GEN)) +
geom_point() +
geom_line() +
#geom_smooth(method = "lm") +
scale_y_continuous(limits=c(0,10)) +
scale_x_continuous(breaks = scales::breaks_width(1), limits=c(2002,2022)) +
labs(title = "Durchsch. Zufridenheit mit Hobbies",
subtitle = "pro Jahr und Generation, 0=gar nicht & 10=absolut",
x = "",
y = "") +
theme_minimal() +
theme(legend.position = "bottom",
plot.title = element_text(size = 14, face = 2, margin = margin(0, 0, 2, 0), hjust = 0),
plot.title.position = "plot")
lm_SAT_HOBBY <- lm(SAT_HOBBY ~ GEN_rev + AGE + AGE2 + YEAR, data = shp_u26) # GEN-Effekt kontrolliert nach AGE, AGE2, YEAR
screenreg(lm_SAT_HOBBY)
##
## ====================================
## Model 1
## ------------------------------------
## (Intercept) 43.65 ***
## (8.21)
## GEN_revGen Y ('81-'95) -0.03
## (0.05)
## AGE -0.34 ***
## (0.07)
## AGE2 0.01 ***
## (0.00)
## YEAR -0.02 ***
## (0.00)
## ------------------------------------
## R^2 0.01
## Adj. R^2 0.01
## Num. obs. 17017
## ====================================
## *** p < 0.001; ** p < 0.01; * p < 0.05
v_predicted_SAT_HOBBY <- predicts(lm_SAT_HOBBY, c("F", "mean", "mean", "2002-2022"))
v_predicted_DISCONNECT%>%
ggplot(aes(x = YEAR, y = mean, fill = GEN_rev, colour = GEN_rev)) +
geom_line() +
geom_ribbon(aes(ymin = lower, ymax = upper), alpha = 0.2)
dcv_predicted_SAT_HOBBY <- predicts(lm_SAT_HOBBY, c("F", "mean", "mean", "2002-2022"),
position = 1)
# deskriptive Statistiken pro Generationsgruppe
describeBy(shp_u26$SAT_JOB, shp_u26$GEN)
##
## Descriptive statistics by group
## group: Gen Y ('81-'95)
## vars n mean sd median trimmed mad min max range skew kurtosis se
## X1 1 10756 7.78 1.53 8 7.9 1.48 0 10 10 -0.94 1.92 0.01
## ------------------------------------------------------------
## group: Gen Z ('96-'10)
## vars n mean sd median trimmed mad min max range skew kurtosis se
## X1 1 6017 7.87 1.56 8 8 1.48 0 10 10 -0.99 2.04 0.02
hist(shp_u26$SAT_JOB)
# nicht normalverteilt -> nicht parametrisch
# Boxplot inkl. mean
mean <- shp_u26 %>%
group_by(YEAR, GEN) %>%
summarize(mean = mean(SAT_JOB, na.rm=T),
median = median(SAT_JOB, na.rm=T),
sd = sd(SAT_JOB, na.rm=T)) %>%
ungroup %>%
filter(YEAR %in% c(2004,2007,2010,2012,2017,2022)) # nur alle 5 Jahre, damit Grafik leserlicher ist
shp_u26 %>%
filter(YEAR %in% c(2004,2007,2010,2012,2017,2022)) %>%
ggplot(aes(y=SAT_JOB, x = GEN, colour=GEN)) +
#geom_jitter(alpha = 0.1) +
geom_boxplot() +
geom_point(data = mean,
aes(x = GEN, y = mean),
shape = 13,
size = 2) +
facet_grid(~YEAR) +
labs(title = "Zufriedenheit mit Job",
subtitle = "pro Jahr und Generation, 0=gar nicht & 10=absolut",
caption = "Daten: SHP, 2004-2022, 16-26J",
x = "",
y = "") +
theme(legend.position = "bottom",
axis.text.x = element_blank(),
axis.ticks.x = element_blank())
# Levene Test um zu testen, ob die Varianzen von den Gruppen (Generationen) homogen sind
car::leveneTest(shp_u26$SAT_JOB ~ shp_u26$GEN)
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 1 2.1321 0.1443
## 16771
# Nullhypothese: es gibt keine sign. Unterschiede
# Altenativhypothese: es gibt (mind. 1) sign. Unterschied
#-> Varianzen für SAT_JOB sind NICHT unterschiedlich zw. Gen Y & Gen Z (weil p-Wert NICHT signifikant).
# Mann-Withney U Test (weil Nicht-Parametrisch & Homogene Varianz), um Signifikanz der Unterschiede zu prüfen
library(rstatix)
shp_u26 %>%
wilcox_test(SAT_JOB ~ GEN,
detailed = TRUE) %>%
glimpse()
## Rows: 1
## Columns: 12
## $ estimate <dbl> -1.812488e-05
## $ .y. <chr> "SAT_JOB"
## $ group1 <chr> "Gen Y ('81-'95)"
## $ group2 <chr> "Gen Z ('96-'10)"
## $ n1 <int> 10756
## $ n2 <int> 6017
## $ statistic <dbl> 31187033
## $ p <dbl> 6.06e-05
## $ conf.low <dbl> -9.075913e-05
## $ conf.high <dbl> -2.463057e-05
## $ method <chr> "Wilcoxon"
## $ alternative <chr> "two.sided"
# -> kein signifikanter Effekt, dementsprechend berechne ich auch keine Effektgrösse
# Lineplot über Zeit mit allen Datenpunkten ----
shp_u26 %>%
#Plot
ggplot(aes(y=SAT_JOB, x = YEAR, colour = GEN)) +
#geom_point(alpha=0.1) +
geom_smooth(method = "lm") +
scale_y_continuous(limits=c(0,10)) +
scale_x_continuous(breaks = scales::breaks_width(1), limits=c(2002,2022)) +
labs(title = "Zufridenheit mit Job",
subtitle = "pro Jahr und Generation, 0=gar nicht & 10=absolut",
x = "",
y = "") +
theme_minimal() +
theme(legend.position = "bottom")
# Lineplot über Zeit nur mit jährlichen Durchschnittswerten ----
shp_u26 %>%
#Durchschnitt berechnen
group_by(YEAR, GEN) %>%
summarize(mean = mean(SAT_JOB, na.rm=T),
median = median(SAT_JOB, na.rm=T),
sd = sd(SAT_JOB, na.rm=T)) %>%
#Plot
ggplot(aes(x = YEAR, y = mean, colour = GEN)) +
geom_point() +
geom_line() +
#geom_smooth(method = "lm") +
scale_y_continuous(limits=c(0,10)) +
scale_x_continuous(breaks = scales::breaks_width(1), limits=c(2002,2022)) +
labs(title = "Durchsch. Zufridenheit mit Job",
subtitle = "pro Jahr und Generation, 0=gar nicht & 10=absolut",
x = "",
y = "") +
theme_minimal() +
theme(legend.position = "bottom",
plot.title = element_text(size = 14, face = 2, margin = margin(0, 0, 2, 0), hjust = 0),
plot.title.position = "plot")
# Lineplot über Zeit nur mit jährlichen Durchschnittswerten, nicht gefiltert nach Alter ----
shp %>%
#Durchschnitt berechnen
group_by(YEAR, GEN) %>%
summarize(mean = mean(SAT_JOB, na.rm=T),
median = median(SAT_JOB, na.rm=T),
sd = sd(SAT_JOB, na.rm=T)) %>%
#Plot
ggplot(aes(x = YEAR, y = mean, colour = GEN)) +
geom_point() +
geom_line() +
#geom_smooth(method = "lm") +
scale_y_continuous(limits=c(0,10)) +
scale_x_continuous(breaks = scales::breaks_width(1), limits=c(2002,2022)) +
labs(title = "Durchsch. Zufridenheit mit Job",
subtitle = "pro Jahr und Generation, 0=gar nicht & 10=absolut",
x = "",
y = "") +
theme_minimal() +
theme(legend.position = "bottom")
lm_SAT_JOB <- lm(SAT_JOB ~ GEN_rev + AGE + AGE2 + YEAR, data = shp_u26) # GEN-Effekt kontrolliert nach AGE, AGE2, YEAR
screenreg(lm_SAT_JOB)
##
## ====================================
## Model 1
## ------------------------------------
## (Intercept) 42.55 ***
## (7.21)
## GEN_revGen Y ('81-'95) -0.08 *
## (0.04)
## AGE -0.71 ***
## (0.06)
## AGE2 0.02 ***
## (0.00)
## YEAR -0.01 ***
## (0.00)
## ------------------------------------
## R^2 0.02
## Adj. R^2 0.02
## Num. obs. 16773
## ====================================
## *** p < 0.001; ** p < 0.01; * p < 0.05
v_predicted_SAT_JOB <- predicts(lm_SAT_JOB, c("F", "mean", "mean", "2002-2022"))
v_predicted_DISCONNECT%>%
ggplot(aes(x = YEAR, y = mean, fill = GEN_rev, colour = GEN_rev)) +
geom_line() +
geom_ribbon(aes(ymin = lower, ymax = upper), alpha = 0.2)
dcv_predicted_SAT_JOB <- predicts(lm_SAT_JOB, c("F", "mean", "mean", "2002-2022"),
position = 1)
# Lineplot über Zeit nur mit jährlichen Durchschnittswerten ----
p1 <- shp_u26 %>%
#Durchschnitt berechnen
group_by(YEAR, GEN) %>%
summarize(mean = mean(WORK_HOURS, na.rm=T),
median = median(WORK_HOURS, na.rm=T),
sd = sd(WORK_HOURS, na.rm=T),
perc25 = quantile(WORK_HOURS, 0.25, na.rm=T),
perc75 = quantile(WORK_HOURS, 0.75, na.rm=T)) %>%
#Plot
ggplot(aes(x = YEAR, y = mean, colour = GEN, fill = GEN)) +
geom_point() +
geom_line() +
scale_x_continuous(breaks = scales::breaks_width(1), expand=c(0,0.7)) +
scale_y_continuous(limits = c(0,45)) +
scale_color_manual(values=c("magenta", "cyan")) +
scale_fill_manual(values=c("magenta", "cyan")) +
labs(title = "Durchschnittliche Arbeitszeit pro Woche",
subtitle = "pro Jahr und Generation, in h",
caption = "Daten: SHP, 2002-2022, 16-26 Jährige",
x = "",
y = "") +
theme_minimal() +
theme(legend.position = "bottom",
legend.title = element_blank(),
plot.title = element_text(size = 14, face = 2),
legend.margin=margin(c(-10,0,0,0))
)
# Lineplot über Zeit nur mit jährlichen Durchschnittswerten ----
p2 <- shp_u26 %>%
#Durchschnitt berechnen
group_by(YEAR, GEN) %>%
summarize(mean = mean(DISCONNECT, na.rm=T),
median = median(DISCONNECT, na.rm=T),
sd = sd(DISCONNECT, na.rm=T)) %>%
#Plot
ggplot(aes(x = YEAR, y = mean, colour = GEN)) +
geom_point() +
geom_line() +
scale_y_continuous(limits=c(0,10)) +
scale_x_continuous(breaks = scales::breaks_width(1), expand=c(0,0.7)) +
scale_color_manual(values=c("magenta", "cyan")) +
scale_fill_manual(values=c("magenta", "cyan")) +
labs(title = "Durchschnittliche Schwierigkeit, sich von Arbeit zu trennen",
subtitle = "pro Jahr und Generation, 0=gar nicht & 10=absolut",
caption = "Daten: SHP, 2002-2022, 16-26 Jährige",
x = "",
y = "") +
theme_minimal() +
theme(legend.position = "bottom",
legend.title = element_blank(),
plot.title = element_text(size = 14, face = 2),
legend.margin=margin(c(-10,0,0,0))
)
# Lineplot über Zeit nur mit jährlichen Durchschnittswerten ----
p3 <- shp_u26 %>%
#Durchschnitt berechnen
group_by(YEAR, GEN) %>%
summarize(mean = mean(EXHAUST, na.rm=T),
median = median(EXHAUST, na.rm=T),
sd = sd(EXHAUST, na.rm=T)) %>%
#Plot
ggplot(aes(x = YEAR, y = mean, colour = GEN)) +
geom_point() +
geom_line() +
scale_y_continuous(limits=c(0,10)) +
scale_x_continuous(breaks = scales::breaks_width(1), expand=c(0,0.7)) +
scale_color_manual(values=c("magenta", "cyan")) +
scale_fill_manual(values=c("magenta", "cyan")) +
labs(title = "Durchschnittlicher Erschöpfungsgrad nach Arbeit",
subtitle = "pro Jahr und Generation, 0=gar nicht & 10=absolut",
caption = "Daten: SHP, 2002-2022, 16-26 Jährige",
x = "",
y = "") +
theme_minimal() +
theme(legend.position = "bottom",
legend.title = element_blank(),
plot.title = element_text(size = 14, face = 2),
legend.margin=margin(c(-10,0,0,0))
)
p1
p2
p3
BFS (2023). Heiratshäufigkeit. https://www.bfs.admin.ch/bfs/de/home/statistiken/bevoelkerung/heiraten-eingetragene-partnerschaften-scheidungen/heiratshaeufigkeit.html
Schröder, M. (2023). Work Motivation Is Not Generational but Depends on Age and Period. J Bus Psychol. https://doi.org/10.1007/s10869-023-09921-8