#install.packages("margins", "AICcmodavg", "corrr", "tidymodels", "pandoc", "jtools", "huxtable", "pscl", "sjPlot", "sjmisc", "sjlabelled", "sjstats", "summarytools", "pwr", "ggpubr", "car", "MatchIt", "cobalt", "logistf", "plm", "bife", "geepack", "tidyverse", "tidyr", "readr", "haven", "dplyr", "ggplot2", "gridExtra", "lattice", "knitr", "broom", "tinytex", "survival", "stargazer", "rbbt", "recipes")
pacman::p_load(tidyverse, tidyr, readr, haven, dplyr, ggplot2, ggpubr, gridExtra, lattice, margins, knitr, AICcmodavg, broom, corrr, stargazer, tidymodels, pandoc, tinytex, jtools, huxtable, pscl, sjPlot, sjmisc, sjlabelled, sjstats, pwr, MatchIt, cobalt, logistf, stars, plm, bife, geepack)
library(tidyverse)
library(tidyr)
library(readr)
library(haven)
library(dplyr)
library(ggplot2)
library(ggpubr)
library(gridExtra)
library(lattice)
library(margins)
library(knitr)
library(AICcmodavg)
library(broom)
library(corrr)
library(stargazer)
library(pandoc)
library(tinytex)
library(huxtable)
library(pscl)
library(sjPlot)
library(sjmisc)
library(sjlabelled)
library(sjstats)
library(summarytools)
library(pwr)
library(car)
library(MatchIt)
library(cobalt)
library(logistf)
library(plm)
library(survival)
library(bife)
library(geepack)
# Define the paths to your data files
rawdata_path <- "2_data/1_input/"
output_path <- "2_data/2_output/"
st_options(
option = NULL,
value = NULL,
style = "simple",
plain.ascii = TRUE,
round.digits = 2,
headings = TRUE,
footnote = "default",
display.labels = TRUE,
bootstrap.css = TRUE,
custom.css = NA_character_,
escape.pipe = FALSE,
char.split = 12,
freq.cumul = TRUE,
freq.totals = TRUE,
freq.report.nas = TRUE,
freq.ignore.threshold = 25,
freq.silent = FALSE,
ctable.prop = "r",
ctable.totals = TRUE,
ctable.round.digits = 1,
descr.stats = "all",
descr.transpose = FALSE,
descr.silent = FALSE,
dfSummary.style = "multiline",
dfSummary.varnumbers = TRUE,
dfSummary.labels.col = TRUE,
dfSummary.valid.col = TRUE,
dfSummary.na.col = TRUE,
dfSummary.graph.col = TRUE,
dfSummary.graph.magnif = 1,
dfSummary.silent = FALSE,
dfSummary.custom.1 = expression(paste(paste0(trs("iqr"), " (", trs("cv"), ") : "),
format_number(IQR(column_data, na.rm = TRUE), round.digits), " (",
format_number(sd(column_data, na.rm = TRUE)/mean(column_data, na.rm = TRUE),
round.digits), ")", collapse = "", sep = "")),
dfSummary.custom.2 = NA,
tmp.img.dir = NA_character_,
subtitle.emphasis = TRUE,
lang = "en",
use.x11 = TRUE
)
(Hlavac 2022)
# Importing the data
selected <- read_dta(paste0("2_data/2_output/modified.dta"))
selected_columns <- c("id", "hid", "year", "partid", "mothid", "fathid", "gender", "age", "cohort", "gebjahr", "bula_h", "edu_yrs", "edu_cat", "pedu", "occup", "occ_loss", "isco88", "isco08", "empl", "class5_r", "class5_p", "occ1_p", "occ2_p", "occ3_p", "occ4_p", "occ5_p", "moth_isco88", "fath_isco88", "east_highstat", "west_highstat", "elite_gdr", "elite_fam", "any_elite", "elite_parents", "incomeind", "eastger", "vote", "afd13", "afd17", "afd21", "linke13", "linke17", "linke21", "dvu13", "dvu17", "dvu21", "antisys_vote", "antisys_id", "right_vote", "right_vote_alt", "right_id", "right_id_alt", "left_vote", "left_id", "left_right", "lifesat", "deserve", "satdem", "party_id", "mig_economy", "mig_gerliving", "mig_riskslong", "genderlegislate", "genderaccept", "samesexwantchild")
used <- selected[selected_columns] %>%
group_by(year) %>%
arrange(id)
The newly created variables left_vote and left_id are derived from the SOEP items plh0333 and plh0012_h (both from the dataset pl) which capture the “Partei Bundestagswahl” (2013, 2017 and 2021) and the “Parteineigung [harmonisiert]”. The new items were created so that they contain the following expressions of plh0333 and plh0012_h respectively:
| Left Party Vote | Left Party Identification |
|---|---|
| [6] Die Linke | [6] Die Linke |
| [16] Buendnis90/Gruene/Die Linke | [16] Buendnis90/Gruene/Die Linke |
| [17] SPD/Die Linke. | [17] SPD/Die Linke |
| [24] FDP/Die Linke | [24] FDP/Die Linke |
left_data <- used
left_data$left_vote = ifelse(test=left_data$left_vote == 1, yes="left party vote", no="no left party vote")
left_data$left_vote <- as.factor(left_data$left_vote)
left_data$left_vote <- factor(left_data$left_vote, levels = c("no left party vote", "left party vote"))
left_party_data <- left_data[!is.na(left_data$left_vote)& left_data$year == 2014 | left_data$year == 2018 | left_data$year == 2022,]
ggplot(data = left_party_data) +
geom_bar(mapping = aes(x = year, fill = factor(left_vote)), position = "fill") +
scale_fill_manual(values = c("#FCF3CF", "#F4D03F"))+
labs(title = "Figure 1: Percentage of Respondents Who Voted For Any Left Party",
subtitle = "In the German General Elections 2013, 2017 and 2021",
caption = "Data Source: SOEP Core v38, unimputed, unweight",
x = "Year", y = "Party vote", fill = "Party vote")
left_data1 <- used
left_data1$left_id = ifelse(test=left_data1$left_id == 1, yes="left party identification", no="no left party identification")
left_data1$left_id <- as.factor(left_data1$left_id)
left_data1$left_id <- factor(left_data1$left_id, levels = c("no left party identification", "left party identification"))
left_party_data1 <- left_data1[!is.na(left_data1$left_id) & left_data$year >= 1990,]
ggplot(data = left_party_data1) +
geom_bar(mapping = aes(x = year, fill = factor(left_id)), position = "fill") +
scale_fill_manual(values = c("#FCF3CF", "#F4D03F"))+
labs(title = "Figure 2: Percentage of Respondents Who Identified With Any Left Party",
subtitle = "1990 until 2021",
caption = "Data Source: SOEP Core v38, unimputed, unweight",
x = "Year", y = "Party closeness", fill = "Party closeness")
data14 <- used[used$year == 2014,]
M1 <- logistf(data = data14, left_vote ~ elite_fam, firth = TRUE, pl = TRUE)
M2 <- logistf(data = data14, left_vote ~ elite_fam + age, firth = TRUE, pl = TRUE)
M3 <- logistf(data = data14, left_vote ~ elite_fam + age + gender, firth = TRUE, pl = TRUE)
tab_model(
M1, M2, M3,
title = "Table 1: Rare Events Logistic Regression for Elite Family Member Status in GDR on Left Party Vote (2013)",
pred.labels = c("Intercept",
"Elite Family Member<br>(Ref.: No Elite Family Member)",
"Age",
"Gender: male<br>(Ref.: female)"),
dv.labels = c("Model 1", "Model 2", "Model 3"),
string.pred = " ",
string.se = "std.<br>Error",
string.p = "p",
show.reflvl = TRUE,
show.p = TRUE,
prefix.labels = "varname",
show.se = TRUE,
show.ci = FALSE,
CSS = list(
css.firsttablecol = 'font-weight: bold;',
css.firsttablerow = 'font-weight: bold;',
css.secondtablerow = 'font-weight: bold;'
),
transform = NULL,
auto.label = FALSE,
show.r2 = FALSE # Disable R-squared computation
)
| Model 1 | Model 2 | Model 3 | |||||||
|---|---|---|---|---|---|---|---|---|---|
| Log-Odds |
std. Error |
p | Log-Odds |
std. Error |
p | Log-Odds |
std. Error |
p | |
| Intercept | -1.78 | 0.05 | <0.001 | -2.33 | 0.23 | <0.001 | -2.36 | 0.24 | <0.001 |
|
Elite Family Member (Ref.: No Elite Family Member) |
0.19 | 0.20 | 0.366 | 0.15 | 0.21 | 0.458 | 0.16 | 0.21 | 0.447 |
| Age | 0.01 | 0.00 | 0.014 | 0.01 | 0.00 | 0.014 | |||
|
Gender: male (Ref.: female) |
0.04 | 0.10 | 0.670 | ||||||
| Observations | 3425 | 3425 | 3425 | ||||||
data18 <- used[used$year == 2018,]
M1 <- logistf(data = data18, left_vote ~ elite_fam, firth = TRUE, pl = TRUE)
M2 <- logistf(data = data18, left_vote ~ elite_fam + age, firth = TRUE, pl = TRUE)
M3 <- logistf(data = data18, left_vote ~ elite_fam + age + gender, firth = TRUE, pl = TRUE)
tab_model(
M1, M2, M3,
title = "Table 2: Rare Events Logistic Regression for Elite Family Member Status in GDR on Left Party Vote (2017)",
pred.labels = c("Intercept",
"Elite Family Member<br>(Ref.: No Elite Family Member)",
"Age",
"Gender: male<br>(Ref.: female)"),
dv.labels = c("Model 1", "Model 2", "Model 3"),
string.pred = " ",
string.se = "std.<br>Error",
string.p = "p",
show.reflvl = TRUE,
show.p = TRUE,
prefix.labels = "varname",
show.se = TRUE,
show.ci = FALSE,
CSS = list(
css.firsttablecol = 'font-weight: bold;',
css.firsttablerow = 'font-weight: bold;',
css.secondtablerow = 'font-weight: bold;'
),
transform = NULL,
auto.label = FALSE,
show.r2 = FALSE # Disable R-squared computation
)
| Model 1 | Model 2 | Model 3 | |||||||
|---|---|---|---|---|---|---|---|---|---|
| Log-Odds |
std. Error |
p | Log-Odds |
std. Error |
p | Log-Odds |
std. Error |
p | |
| Intercept | -1.81 | 0.05 | <0.001 | -2.85 | 0.26 | <0.001 | -2.81 | 0.27 | <0.001 |
|
Elite Family Member (Ref.: No Elite Family Member) |
0.39 | 0.22 | 0.093 | 0.32 | 0.22 | 0.168 | 0.31 | 0.22 | 0.177 |
| Age | 0.02 | 0.00 | <0.001 | 0.02 | 0.00 | <0.001 | |||
|
Gender: male (Ref.: female) |
-0.07 | 0.10 | 0.481 | ||||||
| Observations | 3326 | 3326 | 3326 | ||||||
data18 <- used[used$year == 2022,]
M1 <- logistf(data = data18, left_vote ~ elite_fam, firth = TRUE, pl = TRUE)
M2 <- logistf(data = data18, left_vote ~ elite_fam + age, firth = TRUE, pl = TRUE)
M3 <- logistf(data = data18, left_vote ~ elite_fam + age + gender, firth = TRUE, pl = TRUE)
tab_model(
M1, M2, M3,
title = "Table 3: Rare Events Logistic Regression for Elite Family Member Status in GDR on Left Party Vote (2021)",
pred.labels = c("Intercept",
"Elite Family Member<br>(Ref.: No Elite Family Member)",
"Age",
"Gender: male<br>(Ref.: female)"),
dv.labels = c("Model 1", "Model 2", "Model 3"),
string.pred = " ",
string.se = "std.<br>Error",
string.p = "p",
show.reflvl = TRUE,
show.p = TRUE,
prefix.labels = "varname",
show.se = TRUE,
show.ci = FALSE,
CSS = list(
css.firsttablecol = 'font-weight: bold;',
css.firsttablerow = 'font-weight: bold;',
css.secondtablerow = 'font-weight: bold;'
),
transform = NULL,
auto.label = FALSE,
show.r2 = FALSE # Disable R-squared computation
)
| Model 1 | Model 2 | Model 3 | |||||||
|---|---|---|---|---|---|---|---|---|---|
| Log-Odds |
std. Error |
p | Log-Odds |
std. Error |
p | Log-Odds |
std. Error |
p | |
| Intercept | -2.32 | 0.08 | <0.001 | -3.33 | 0.47 | <0.001 | -3.25 | 0.48 | <0.001 |
|
Elite Family Member (Ref.: No Elite Family Member) |
0.90 | 0.33 | 0.011 | 0.82 | 0.33 | 0.021 | 0.81 | 0.33 | 0.023 |
| Age | 0.02 | 0.01 | 0.028 | 0.02 | 0.01 | 0.027 | |||
|
Gender: male (Ref.: female) |
-0.16 | 0.16 | 0.312 | ||||||
| Observations | 1857 | 1857 | 1857 | ||||||
used1 <- pdata.frame(used, index = c("id", "year"))
plm(left_id ~ elite_gdr + age + gender, data = used1, model = "random", family = binomial) %>%
tidy() %>%
mutate(
p.value = scales::pvalue(p.value),
term = c("Intercept",
"Elite Status in GDR<br>(Ref.: No Elite GDR)",
"Age",
"Gender: male<br>(Ref.: female)")
) %>%
kable(
caption = "Table 4: Random Effects Regression for Elite Status in GDR on Anti-System Party Identification",
col.names = c("Predictor", "B", "SE", "t", "p"),
digits = c(0, 3, 3, 2, 3)
)
| Predictor | B | SE | t | p |
|---|---|---|---|---|
| Intercept | -0.043 | 0.010 | -4.44 | <0.001 |
| Elite Status in GDR (Ref.: No Elite GDR) |
0.053 | 0.017 | 3.21 | 0.001 |
| Age | 0.002 | 0.000 | 19.50 | <0.001 |
| Gender: male (Ref.: female) |
0.004 | 0.010 | 0.37 | 0.712 |
data14 <- used[used$year == 2014,]
M1 <- logistf(data = data14, antisys_vote ~ elite_fam, firth = TRUE, pl = TRUE)
M2 <- logistf(data = data14, antisys_vote ~ elite_fam + age, firth = TRUE, pl = TRUE)
M3 <- logistf(data = data14, antisys_vote ~ elite_fam + age + gender, firth = TRUE, pl = TRUE)
tab_model(
M1, M2, M3,
title = "Table 5: Rare Events Logistic Regression for Elite Family Member Status in GDR on Anti-System Party Vote (2013)",
pred.labels = c("Intercept",
"Elite Family Member<br>(Ref.: No Elite Family Member)",
"Age",
"Gender: male<br>(Ref.: female)"),
dv.labels = c("Model 1", "Model 2", "Model 3"),
string.pred = " ",
string.se = "std.<br>Error",
string.p = "p",
show.reflvl = TRUE,
show.p = TRUE,
prefix.labels = "varname",
show.se = TRUE,
show.ci = FALSE,
CSS = list(
css.firsttablecol = 'font-weight: bold;',
css.firsttablerow = 'font-weight: bold;',
css.secondtablerow = 'font-weight: bold;'
),
transform = NULL,
auto.label = FALSE,
show.r2 = FALSE # Disable R-squared computation
)
| Model 1 | Model 2 | Model 3 | |||||||
|---|---|---|---|---|---|---|---|---|---|
| Log-Odds |
std. Error |
p | Log-Odds |
std. Error |
p | Log-Odds |
std. Error |
p | |
| Intercept | -1.57 | 0.05 | <0.001 | -1.71 | 0.21 | <0.001 | -1.65 | 0.22 | <0.001 |
|
Elite Family Member (Ref.: No Elite Family Member) |
0.32 | 0.18 | 0.088 | 0.31 | 0.18 | 0.098 | 0.30 | 0.18 | 0.109 |
| Age | 0.00 | 0.00 | 0.498 | 0.00 | 0.00 | 0.494 | |||
|
Gender: male (Ref.: female) |
-0.11 | 0.09 | 0.217 | ||||||
| Observations | 3425 | 3425 | 3425 | ||||||
data18 <- used[used$year == 2018,]
M1 <- logistf(data = data18, antisys_vote ~ elite_fam, firth = TRUE, pl = TRUE)
M2 <- logistf(data = data18, antisys_vote ~ elite_fam + age, firth = TRUE, pl = TRUE)
M3 <- logistf(data = data18, antisys_vote ~ elite_fam + age + gender, firth = TRUE, pl = TRUE)
tab_model(
M1, M2, M3,
title = "Table 6: Rare Events Logistic Regression for Elite Family Member Status in GDR on Anti-System Party Vote (2017)",
pred.labels = c("Intercept",
"Elite Family Member<br>(Ref.: No Elite Family Member)",
"Age",
"Gender: male<br>(Ref.: female)"),
dv.labels = c("Model 1", "Model 2", "Model 3"),
string.pred = " ",
string.se = "std.<br>Error",
string.p = "p",
show.reflvl = TRUE,
show.p = TRUE,
prefix.labels = "varname",
show.se = TRUE,
show.ci = FALSE,
CSS = list(
css.firsttablecol = 'font-weight: bold;',
css.firsttablerow = 'font-weight: bold;',
css.secondtablerow = 'font-weight: bold;'
),
transform = NULL,
auto.label = FALSE,
show.r2 = FALSE # Disable R-squared computation
)
| Model 1 | Model 2 | Model 3 | |||||||
|---|---|---|---|---|---|---|---|---|---|
| Log-Odds |
std. Error |
p | Log-Odds |
std. Error |
p | Log-Odds |
std. Error |
p | |
| Intercept | -1.07 | 0.04 | <0.001 | -1.11 | 0.20 | <0.001 | -0.91 | 0.21 | <0.001 |
|
Elite Family Member (Ref.: No Elite Family Member) |
0.14 | 0.19 | 0.470 | 0.14 | 0.20 | 0.480 | 0.11 | 0.20 | 0.583 |
| Age | 0.00 | 0.00 | 0.843 | 0.00 | 0.00 | 0.775 | |||
|
Gender: male (Ref.: female) |
-0.41 | 0.08 | <0.001 | ||||||
| Observations | 3326 | 3326 | 3326 | ||||||
data18 <- used[used$year == 2022,]
M1 <- logistf(data = data18, antisys_vote ~ elite_fam, firth = TRUE, pl = TRUE)
M2 <- logistf(data = data18, antisys_vote ~ elite_fam + age, firth = TRUE, pl = TRUE)
M3 <- logistf(data = data18, antisys_vote ~ elite_fam + age + gender, firth = TRUE, pl = TRUE)
tab_model(
M1, M2, M3,
title = "Table 7: Rare Events Logistic Regression for Elite Family Member Status in GDR on Anti-System Party Vote (2021)",
pred.labels = c("Intercept",
"Elite Family Member<br>(Ref.: No Elite Family Member)",
"Age",
"Gender: male<br>(Ref.: female)"),
dv.labels = c("Model 1", "Model 2", "Model 3"),
string.pred = " ",
string.se = "std.<br>Error",
string.p = "p",
show.reflvl = TRUE,
show.p = TRUE,
prefix.labels = "varname",
show.se = TRUE,
show.ci = FALSE,
CSS = list(
css.firsttablecol = 'font-weight: bold;',
css.firsttablerow = 'font-weight: bold;',
css.secondtablerow = 'font-weight: bold;'
),
transform = NULL,
auto.label = FALSE,
show.r2 = FALSE # Disable R-squared computation
)
| Model 1 | Model 2 | Model 3 | |||||||
|---|---|---|---|---|---|---|---|---|---|
| Log-Odds |
std. Error |
p | Log-Odds |
std. Error |
p | Log-Odds |
std. Error |
p | |
| Intercept | -1.59 | 0.06 | <0.001 | -1.33 | 0.35 | <0.001 | -1.14 | 0.36 | 0.001 |
|
Elite Family Member (Ref.: No Elite Family Member) |
0.27 | 0.31 | 0.395 | 0.30 | 0.31 | 0.360 | 0.27 | 0.32 | 0.407 |
| Age | -0.00 | 0.01 | 0.464 | -0.00 | 0.01 | 0.493 | |||
|
Gender: male (Ref.: female) |
-0.41 | 0.12 | 0.001 | ||||||
| Observations | 1857 | 1857 | 1857 | ||||||
Respondents were categorized as “[1] Elite Parent(s)” when either their father or their mother who were part of the SOEP survey at any time held any type of elite status in the GDR. Otherwise they were coded as “[0] No Elite Parent(s)”.
elite_parents <- used[!is.na(used$elite_parents),]
elite_parents <- elite_parents %>%
mutate(elite_parents = case_when(
elite_parents == 0 ~ "[0] No Elite Parent(s)",
elite_parents == 1 ~ "[1] Elite Parent(s)",
))
ggplot(data = elite_parents) +
geom_bar(mapping = aes(x = year, fill = elite_parents), position = "fill") +
scale_fill_manual(values = c("[0] No Elite Parent(s)" = "#e8daef", "[1] Elite Parent(s)" = "#6c3483")) +
labs(title = "Figure 3: Percentage of Respondents Whose Parents Were Part of the Elite in the GDR",
subtitle = "From 1984 to 2021",
caption = "Data Source: SOEP Core v38, unimputed, unweight",
x = "Year", y = "Parnet(s) Elite Status", fill = "Elite Parent(s)")
only_elite_p <- used[used$elite_parents == 1,]
only_elite_p <- only_elite_p %>%
mutate(elite_parents = case_when(
elite_parents == 0 ~ "[0] No Elite Parent(s)",
elite_parents == 1 ~ "[1] Elite Parent(s)",
))
ggplot(data = only_elite_p) +
geom_bar(mapping = aes(x = year, fill = elite_parents), position = "dodge") +
scale_fill_manual(values = c("[1] Elite Parent(s)" = "#6c3483")) +
labs(title = "Figure 4: Absolute Numbers of Respondents Whose Parents Were Part of the Elite in the GDR",
subtitle = "From 1984 to 2021",
caption = "Data Source: SOEP Core v38, unimputed, unweight",
x = "Year", y = "Parnet(s) Elite Status", fill = "Elite Parent(s)")
data14 <- used[used$year == 2014,]
M1 <- logistf(data = data14, right_vote ~ elite_parents, firth = TRUE, pl = TRUE)
M2 <- logistf(data = data14, right_vote ~ elite_parents + age, firth = TRUE, pl = TRUE)
M3 <- logistf(data = data14, right_vote ~ elite_parents + age + gender, firth = TRUE, pl = TRUE)
tab_model(
M1, M2, M3,
title = "Table 8: Rare Events Logistic Regression for Having Elite Parents in GDR on Right Party Vote (2013)",
pred.labels = c("Intercept",
"Elite Parents<br>(Ref.: No Elite Parents)",
"Age",
"Gender: male<br>(Ref.: female)"),
dv.labels = c("Model 1", "Model 2", "Model 3"),
string.pred = " ",
string.se = "std.<br>Error",
string.p = "p",
show.reflvl = TRUE,
show.p = TRUE,
prefix.labels = "varname",
show.se = TRUE,
show.ci = FALSE,
CSS = list(
css.firsttablecol = 'font-weight: bold;',
css.firsttablerow = 'font-weight: bold;',
css.secondtablerow = 'font-weight: bold;'
),
transform = NULL,
auto.label = FALSE,
show.r2 = FALSE # Disable R-squared computation
)
| Model 1 | Model 2 | Model 3 | |||||||
|---|---|---|---|---|---|---|---|---|---|
| Log-Odds |
std. Error |
p | Log-Odds |
std. Error |
p | Log-Odds |
std. Error |
p | |
| Intercept | -3.47 | 0.10 | <0.001 | -2.00 | 0.45 | <0.001 | -1.66 | 0.46 | <0.001 |
|
Elite Parents (Ref.: No Elite Parents) |
1.59 | 0.69 | 0.055 | 1.13 | 0.70 | 0.154 | 1.00 | 0.70 | 0.202 |
| Age | -0.03 | 0.01 | 0.001 | -0.03 | 0.01 | 0.001 | |||
|
Gender: male (Ref.: female) |
-0.74 | 0.21 | <0.001 | ||||||
| Observations | 3425 | 3425 | 3425 | ||||||
data_2014 <- used[used$year == 2014,]
data_2014_13wall<- data_2014[data_2014$gebjahr > 1976,]
M1 <- logistf(data = data_2014_13wall, right_vote ~ elite_fam, firth = TRUE, pl = TRUE)
M2 <- logistf(data = data_2014_13wall, right_vote ~ elite_fam + age, firth = TRUE, pl = TRUE)
M3 <- logistf(data = data_2014_13wall, right_vote ~ elite_fam + age + gender, firth = TRUE, pl = TRUE)
tab_model(
M1, M2, M3,
title = "Table 9: Rare Events Logistic Regression for Elite Family Member Status in GDR on Right Party Vote (2013)<br>For respondents who were younger than 13 when the wall fell",
pred.labels = c("Intercept",
"Elite Family Member<br>(Ref.: No Elite Family Member)",
"Age",
"Gender: male<br>(Ref.: female)"),
dv.labels = c("Model 1", "Model 2", "Model 3"),
string.pred = " ",
string.se = "std.<br>Error",
string.p = "p",
show.reflvl = TRUE,
show.p = TRUE,
prefix.labels = "varname",
show.se = TRUE,
show.ci = FALSE,
CSS = list(
css.firsttablecol = 'font-weight: bold;',
css.firsttablerow = 'font-weight: bold;',
css.secondtablerow = 'font-weight: bold;'
),
transform = NULL,
auto.label = FALSE,
show.r2 = FALSE # Disable R-squared computation
)
| Model 1 | Model 2 | Model 3 | |||||||
|---|---|---|---|---|---|---|---|---|---|
| Log-Odds |
std. Error |
p | Log-Odds |
std. Error |
p | Log-Odds |
std. Error |
p | |
| Intercept | -3.23 | 0.54 | <0.001 | -6.15 | 5.07 | 0.194 | -5.52 | 4.71 | 0.221 |
|
Elite Family Member (Ref.: No Elite Family Member) |
2.44 | 0.94 | 0.017 | 2.14 | 0.95 | 0.036 | 2.14 | 0.93 | 0.034 |
| Age | 0.09 | 0.15 | 0.557 | 0.08 | 0.14 | 0.568 | |||
|
Gender: male (Ref.: female) |
-0.66 | 0.84 | 0.450 | ||||||
| Observations | 98 | 98 | 98 | ||||||
data_2014_1325wall <- data_2014[data_2014$gebjahr >= 1964 & data_2014$gebjahr <= 1976,]
M1 <- logistf(data = data_2014_1325wall, right_vote ~ elite_fam, firth = TRUE, pl = TRUE)
M2 <- logistf(data = data_2014_1325wall, right_vote ~ elite_fam + age, firth = TRUE, pl = TRUE)
M3 <- logistf(data = data_2014_1325wall, right_vote ~ elite_fam + age + gender, firth = TRUE, pl = TRUE)
tab_model(
M1, M2, M3,
title = "Table 10: Rare Events Logistic Regression for Elite Family Member Status in GDR on Right Party Vote (2013)<br>For respondents who were between 13 and 25 years old when the wall fell",
pred.labels = c("Intercept",
"Elite Family Member<br>(Ref.: No Elite Family Member)",
"Age",
"Gender: male<br>(Ref.: female)"),
dv.labels = c("Model 1", "Model 2", "Model 3"),
string.pred = " ",
string.se = "std.<br>Error",
string.p = "p",
show.reflvl = TRUE,
show.p = TRUE,
prefix.labels = "varname",
show.se = TRUE,
show.ci = FALSE,
CSS = list(
css.firsttablecol = 'font-weight: bold;',
css.firsttablerow = 'font-weight: bold;',
css.secondtablerow = 'font-weight: bold;'
),
transform = NULL,
auto.label = FALSE,
show.r2 = FALSE # Disable R-squared computation
)
| Model 1 | Model 2 | Model 3 | |||||||
|---|---|---|---|---|---|---|---|---|---|
| Log-Odds |
std. Error |
p | Log-Odds |
std. Error |
p | Log-Odds |
std. Error |
p | |
| Intercept | -3.08 | 0.17 | <0.001 | -3.55 | 2.18 | 0.101 | -3.17 | 2.17 | 0.145 |
|
Elite Family Member (Ref.: No Elite Family Member) |
-0.42 | 1.45 | 0.759 | -0.42 | 1.44 | 0.759 | -0.49 | 1.43 | 0.714 |
| Age | 0.01 | 0.05 | 0.825 | 0.01 | 0.05 | 0.833 | |||
|
Gender: male (Ref.: female) |
-0.79 | 0.35 | 0.024 | ||||||
| Observations | 823 | 823 | 823 | ||||||
data_2014_25wall <- data_2014[data_2014$gebjahr == 1964,]
M1 <- logistf(data = data_2014_25wall, right_vote ~ elite_fam, firth = TRUE, pl = TRUE)
M2 <- logistf(data = data_2014_25wall, right_vote ~ elite_fam + age, firth = TRUE, pl = TRUE)
M3 <- logistf(data = data_2014_25wall, right_vote ~ elite_fam + age + gender, firth = TRUE, pl = TRUE)
tab_model(
M1, M2, M3,
title = "Table 11: Rare Events Logistic Regression for Elite Family Member Status in GDR on Right Party Vote (2013)<br>For respondents who were of age 25 when the wall fell",
pred.labels = c("Intercept",
"Elite Family Member<br>(Ref.: No Elite Family Member)",
"Age",
"Gender: male<br>(Ref.: female)"),
dv.labels = c("Model 1", "Model 2", "Model 3"),
string.pred = " ",
string.se = "std.<br>Error",
string.p = "p",
show.reflvl = TRUE,
show.p = TRUE,
prefix.labels = "varname",
show.se = TRUE,
show.ci = FALSE,
CSS = list(
css.firsttablecol = 'font-weight: bold;',
css.firsttablerow = 'font-weight: bold;',
css.secondtablerow = 'font-weight: bold;'
),
transform = NULL,
auto.label = FALSE,
show.r2 = FALSE # Disable R-squared computation
)
| Model 1 | Model 2 | Model 3 | |||||||
|---|---|---|---|---|---|---|---|---|---|
| Log-Odds |
std. Error |
p | Log-Odds |
std. Error |
p | Log-Odds |
std. Error |
p | |
| Intercept | -2.63 | 0.44 | <0.001 | -2.63 | 0.44 | 1.000 | -2.70 | 0.48 | 0.835 |
|
Elite Family Member (Ref.: No Elite Family Member) |
1.53 | 1.69 | 0.425 | 1.53 | 1.69 | 0.451 | 2.41 | 1.74 | 0.346 |
| Age | -0.00 | 0.00 | 1.000 | 0.01 | 0.00 | 0.835 | |||
|
Gender: male (Ref.: female) |
-1.46 | 0.64 | 0.451 | ||||||
| Observations | 82 | 82 | 82 | ||||||
data_2014_25old <- data_2014[data_2014$gebjahr < 1964,]
M1 <- logistf(data = data_2014_25old, right_vote ~ elite_fam, firth = TRUE, pl = TRUE)
M2 <- logistf(data = data_2014_25old, right_vote ~ elite_fam + age, firth = TRUE, pl = TRUE)
M3 <- logistf(data = data_2014_25old, right_vote ~ elite_fam + age + gender, firth = TRUE, pl = TRUE)
tab_model(
M1, M2, M3,
title = "Table 12: Rare Events Logistic Regression for Elite Family Member Status in GDR on Right Party Vote (2013)<br>For respondents who were older than 25 when the wall fell",
pred.labels = c("Intercept",
"Elite Family Member<br>(Ref.: No Elite Family Member)",
"Age",
"Gender: male<br>(Ref.: female)"),
dv.labels = c("Model 1", "Model 2", "Model 3"),
string.pred = " ",
string.se = "std.<br>Error",
string.p = "p",
show.reflvl = TRUE,
show.p = TRUE,
prefix.labels = "varname",
show.se = TRUE,
show.ci = FALSE,
CSS = list(
css.firsttablecol = 'font-weight: bold;',
css.firsttablerow = 'font-weight: bold;',
css.secondtablerow = 'font-weight: bold;'
),
transform = NULL,
auto.label = FALSE,
show.r2 = FALSE # Disable R-squared computation
)
| Model 1 | Model 2 | Model 3 | |||||||
|---|---|---|---|---|---|---|---|---|---|
| Log-Odds |
std. Error |
p | Log-Odds |
std. Error |
p | Log-Odds |
std. Error |
p | |
| Intercept | -3.70 | 0.13 | <0.001 | -1.45 | 0.89 | 0.113 | -1.03 | 0.90 | 0.263 |
|
Elite Family Member (Ref.: No Elite Family Member) |
0.84 | 0.38 | 0.044 | 0.86 | 0.38 | 0.038 | 0.82 | 0.38 | 0.049 |
| Age | -0.04 | 0.01 | 0.011 | -0.04 | 0.01 | 0.009 | |||
|
Gender: male (Ref.: female) |
-0.71 | 0.26 | 0.005 | ||||||
| Observations | 2504 | 2504 | 2504 | ||||||
data_2018 <- used[used$year == 2018,]
data_2018_13wall <- data_2018[data_2018$gebjahr > 1976,]
M1 <- logistf(data = data_2018_13wall, right_vote ~ elite_fam, firth = TRUE, pl = TRUE)
M2 <- logistf(data = data_2018_13wall, right_vote ~ elite_fam + age, firth = TRUE, pl = TRUE)
M3 <- logistf(data = data_2018_13wall, right_vote ~ elite_fam + age + gender, firth = TRUE, pl = TRUE)
tab_model(
M1, M2, M3,
title = "Table 13: Rare Events Logistic Regression for Elite Family Member Status in GDR on Right Party Vote (2017)<br>For respondents who were younger than 13 when the wall fell",
pred.labels = c("Intercept",
"Elite Family Member<br>(Ref.: No Elite Family Member)",
"Age",
"Gender: male<br>(Ref.: female)"),
dv.labels = c("Model 1", "Model 2", "Model 3"),
string.pred = " ",
string.se = "std.<br>Error",
string.p = "p",
show.reflvl = TRUE,
show.p = TRUE,
prefix.labels = "varname",
show.se = TRUE,
show.ci = FALSE,
CSS = list(
css.firsttablecol = 'font-weight: bold;',
css.firsttablerow = 'font-weight: bold;',
css.secondtablerow = 'font-weight: bold;'
),
transform = NULL,
auto.label = FALSE,
show.r2 = FALSE # Disable R-squared computation
)
| Model 1 | Model 2 | Model 3 | |||||||
|---|---|---|---|---|---|---|---|---|---|
| Log-Odds |
std. Error |
p | Log-Odds |
std. Error |
p | Log-Odds |
std. Error |
p | |
| Intercept | -2.31 | 0.36 | <0.001 | -7.28 | 3.87 | 0.028 | -7.04 | 3.71 | 0.029 |
|
Elite Family Member (Ref.: No Elite Family Member) |
1.21 | 1.01 | 0.272 | 0.90 | 1.02 | 0.406 | 0.91 | 1.01 | 0.400 |
| Age | 0.14 | 0.10 | 0.156 | 0.14 | 0.10 | 0.137 | |||
|
Gender: male (Ref.: female) |
-0.57 | 0.66 | 0.392 | ||||||
| Observations | 98 | 98 | 98 | ||||||
data_2018_1325 <- data_2018[data_2018$gebjahr >= 1964 & data_2018$gebjahr <= 1976,]
M1 <- logistf(data = data_2018_1325, right_vote ~ elite_fam, firth = TRUE, pl = TRUE)
M2 <- logistf(data = data_2018_1325, right_vote ~ elite_fam + age, firth = TRUE, pl = TRUE)
M3 <- logistf(data = data_2018_1325, right_vote ~ elite_fam + age + gender, firth = TRUE, pl = TRUE)
tab_model(
M1, M2, M3,
title = "Table 14: Rare Events Logistic Regression for Elite Family Member Status in GDR on Right Party Vote (2017)<br>For respondents who were between 13 and 25 years old when the wall fell",
pred.labels = c("Intercept",
"Elite Family Member<br>(Ref.: No Elite Family Member)",
"Age",
"Gender: male<br>(Ref.: female)"),
dv.labels = c("Model 1", "Model 2", "Model 3"),
string.pred = " ",
string.se = "std.<br>Error",
string.p = "p",
show.reflvl = TRUE,
show.p = TRUE,
prefix.labels = "varname",
show.se = TRUE,
show.ci = FALSE,
CSS = list(
css.firsttablecol = 'font-weight: bold;',
css.firsttablerow = 'font-weight: bold;',
css.secondtablerow = 'font-weight: bold;'
),
transform = NULL,
auto.label = FALSE,
show.r2 = FALSE # Disable R-squared computation
)
| Model 1 | Model 2 | Model 3 | |||||||
|---|---|---|---|---|---|---|---|---|---|
| Log-Odds |
std. Error |
p | Log-Odds |
std. Error |
p | Log-Odds |
std. Error |
p | |
| Intercept | -1.79 | 0.09 | <0.001 | -1.79 | 1.37 | 0.190 | -1.65 | 1.37 | 0.229 |
|
Elite Family Member (Ref.: No Elite Family Member) |
-1.34 | 1.45 | 0.250 | -1.34 | 1.44 | 0.250 | -1.35 | 1.44 | 0.249 |
| Age | 0.00 | 0.03 | 1.000 | 0.00 | 0.03 | 0.944 | |||
|
Gender: male (Ref.: female) |
-0.47 | 0.19 | 0.014 | ||||||
| Observations | 916 | 916 | 916 | ||||||
data_2018_25 <- data_2018[data_2018$gebjahr == 1964,]
M1 <- logistf(data = data_2018_25, right_vote ~ elite_fam, firth = TRUE, pl = TRUE)
M2 <- logistf(data = data_2018_25, right_vote ~ elite_fam + age, firth = TRUE, pl = TRUE)
M3 <- logistf(data = data_2018_25, right_vote ~ elite_fam + age + gender, firth = TRUE, pl = TRUE)
tab_model(
M1, M2, M3,
title = "Table 15: Rare Events Logistic Regression for Elite Family Member Status in GDR on Right Party Vote (2017)<br>For respondents who were of age 25 when the wall fell",
pred.labels = c("Intercept",
"Elite Family Member<br>(Ref.: No Elite Family Member)",
"Age",
"Gender: male<br>(Ref.: female)"),
dv.labels = c("Model 1", "Model 2", "Model 3"),
string.pred = " ",
string.se = "std.<br>Error",
string.p = "p",
show.reflvl = TRUE,
show.p = TRUE,
prefix.labels = "varname",
show.se = TRUE,
show.ci = FALSE,
CSS = list(
css.firsttablecol = 'font-weight: bold;',
css.firsttablerow = 'font-weight: bold;',
css.secondtablerow = 'font-weight: bold;'
),
transform = NULL,
auto.label = FALSE,
show.r2 = FALSE # Disable R-squared computation
)
| Model 1 | Model 2 | Model 3 | |||||||
|---|---|---|---|---|---|---|---|---|---|
| Log-Odds |
std. Error |
p | Log-Odds |
std. Error |
p | Log-Odds |
std. Error |
p | |
| Intercept | -2.23 | 0.38 | <0.001 | -2.23 | 0.38 | 1.000 | -2.24 | 0.44 | 1.000 |
|
Elite Family Member (Ref.: No Elite Family Member) |
1.13 | 1.68 | 0.541 | 1.13 | 1.68 | 0.563 | 0.92 | 1.68 | 0.671 |
| Age | 0.00 | 0.00 | 1.000 | -0.01 | 0.00 | 1.000 | |||
|
Gender: male (Ref.: female) |
0.50 | 0.20 | 0.367 | ||||||
| Observations | 77 | 77 | 77 | ||||||
data_2018_25old <- data_2018[data_2018$gebjahr < 1964,]
M1 <- logistf(data = data_2018_25old, right_vote ~ elite_fam, firth = TRUE, pl = TRUE)
M2 <- logistf(data = data_2018_25old, right_vote ~ elite_fam + age, firth = TRUE, pl = TRUE)
M3 <- logistf(data = data_2018_25old, right_vote ~ elite_fam + age + gender, firth = TRUE, pl = TRUE)
tab_model(
M1, M2, M3,
title = "Table 16: Rare Events Logistic Regression for Elite Family Member Status in GDR on Right Party Vote (2017)<br>For respondents who were older than 25 when the wall fell",
pred.labels = c("Intercept",
"Elite Family Member<br>(Ref.: No Elite Family Member)",
"Age",
"Gender: male<br>(Ref.: female)"),
dv.labels = c("Model 1", "Model 2", "Model 3"),
string.pred = " ",
string.se = "std.<br>Error",
string.p = "p",
show.reflvl = TRUE,
show.p = TRUE,
prefix.labels = "varname",
show.se = TRUE,
show.ci = FALSE,
CSS = list(
css.firsttablecol = 'font-weight: bold;',
css.firsttablerow = 'font-weight: bold;',
css.secondtablerow = 'font-weight: bold;'
),
transform = NULL,
auto.label = FALSE,
show.r2 = FALSE # Disable R-squared computation
)
| Model 1 | Model 2 | Model 3 | |||||||
|---|---|---|---|---|---|---|---|---|---|
| Log-Odds |
std. Error |
p | Log-Odds |
std. Error |
p | Log-Odds |
std. Error |
p | |
| Intercept | -2.17 | 0.07 | <0.001 | 0.19 | 0.56 | 0.729 | 0.61 | 0.57 | 0.280 |
|
Elite Family Member (Ref.: No Elite Family Member) |
-0.18 | 0.33 | 0.582 | -0.15 | 0.33 | 0.642 | -0.20 | 0.33 | 0.530 |
| Age | -0.04 | 0.01 | <0.001 | -0.04 | 0.01 | <0.001 | |||
|
Gender: male (Ref.: female) |
-0.86 | 0.14 | <0.001 | ||||||
| Observations | 2312 | 2312 | 2312 | ||||||
The estimation was hindered by a singular Fisher information matrix, likely caused by insufficient data variability (Determinant of Fisher information matrix was numerically 0).
data_2022 <- used[used$year == 2022,]
data_2022_1325 <- data_2022[data_2022$gebjahr >= 1964 & data_2022$gebjahr <= 1976,]
M1 <- logistf(data = data_2022_1325, right_vote ~ elite_fam, firth = TRUE, pl = TRUE)
M2 <- logistf(data = data_2022_1325, right_vote ~ elite_fam + age, firth = TRUE, pl = TRUE)
M3 <- logistf(data = data_2022_1325, right_vote ~ elite_fam + age + gender, firth = TRUE, pl = TRUE)
tab_model(
M1, M2, M3,
title = "Table 17: Rare Events Logistic Regression for Elite Family Member Status in GDR on Right Party Vote (2021)<br>For respondents who were between 13 and 25 years old when the wall fell",
pred.labels = c("Intercept",
"Elite Family Member<br>(Ref.: No Elite Family Member)",
"Age",
"Gender: male<br>(Ref.: female)"),
dv.labels = c("Model 1", "Model 2", "Model 3"),
string.pred = " ",
string.se = "std.<br>Error",
string.p = "p",
show.reflvl = TRUE,
show.p = TRUE,
prefix.labels = "varname",
show.se = TRUE,
show.ci = FALSE,
CSS = list(
css.firsttablecol = 'font-weight: bold;',
css.firsttablerow = 'font-weight: bold;',
css.secondtablerow = 'font-weight: bold;'
),
transform = NULL,
auto.label = FALSE,
show.r2 = FALSE # Disable R-squared computation
)
| Model 1 | Model 2 | Model 3 | |||||||
|---|---|---|---|---|---|---|---|---|---|
| Log-Odds |
std. Error |
p | Log-Odds |
std. Error |
p | Log-Odds |
std. Error |
p | |
| Intercept | -2.04 | 0.13 | <0.001 | -2.36 | 2.07 | 0.252 | -2.34 | 2.08 | 0.260 |
|
Elite Family Member (Ref.: No Elite Family Member) |
0.09 | 1.52 | 0.953 | 0.07 | 1.52 | 0.963 | 0.34 | 1.53 | 0.830 |
| Age | 0.01 | 0.04 | 0.873 | 0.01 | 0.04 | 0.782 | |||
|
Gender: male (Ref.: female) |
-0.55 | 0.27 | 0.043 | ||||||
| Observations | 543 | 543 | 543 | ||||||
data_2022_25wall <- data_2022[data_2022$gebjahr == 1964,]
M1 <- logistf(data = data_2022_25wall, right_vote ~ elite_fam, firth = TRUE, pl = TRUE)
M2 <- logistf(data = data_2022_25wall, right_vote ~ elite_fam + age, firth = TRUE, pl = TRUE)
M3 <- logistf(data = data_2022_25wall, right_vote ~ elite_fam + age + gender, firth = TRUE, pl = TRUE)
tab_model(
M1, M2, M3,
title = "Table 18: Rare Events Logistic Regression for Elite Family Member Status in GDR on Right Party Vote (2021)<br>For respondents who were of age 25 when the wall fell",
pred.labels = c("Intercept",
"Elite Family Member<br>(Ref.: No Elite Family Member)",
"Age",
"Gender: male<br>(Ref.: female)"),
dv.labels = c("Model 1", "Model 2", "Model 3"),
string.pred = " ",
string.se = "std.<br>Error",
string.p = "p",
show.reflvl = TRUE,
show.p = TRUE,
prefix.labels = "varname",
show.se = TRUE,
show.ci = FALSE,
CSS = list(
css.firsttablecol = 'font-weight: bold;',
css.firsttablerow = 'font-weight: bold;',
css.secondtablerow = 'font-weight: bold;'
),
transform = NULL,
auto.label = FALSE,
show.r2 = FALSE # Disable R-squared computation
)
| Model 1 | Model 2 | Model 3 | |||||||
|---|---|---|---|---|---|---|---|---|---|
| Log-Odds |
std. Error |
p | Log-Odds |
std. Error |
p | Log-Odds |
std. Error |
p | |
| Intercept | -2.34 | 0.56 | <0.001 | -2.34 | 0.56 | 1.000 | -2.33 | 0.59 | 0.746 |
|
Elite Family Member (Ref.: No Elite Family Member) |
1.25 | 1.73 | 0.512 | 1.25 | 1.73 | 0.557 | 1.25 | 1.72 | 0.615 |
| Age | 0.00 | 0.00 | 1.000 | 0.00 | 0.00 | 0.746 | |||
|
Gender: male (Ref.: female) |
-0.10 | 0.38 | 1.000 | ||||||
| Observations | 40 | 40 | 40 | ||||||
data_2022_25old <- data_2022[data_2022$gebjahr < 1964,]
M1 <- logistf(data = data_2022_25old, right_vote ~ elite_fam, firth = TRUE, pl = TRUE)
M2 <- logistf(data = data_2022_25old, right_vote ~ elite_fam + age, firth = TRUE, pl = TRUE)
M3 <- logistf(data = data_2022_25old, right_vote ~ elite_fam + age + gender, firth = TRUE, pl = TRUE)
tab_model(
M1, M2, M3,
title = "Table 19: Rare Events Logistic Regression for Elite Family Member Status in GDR on Right Party Vote (2021)<br>For respondents who were older than 25 when the wall fell",
pred.labels = c("Intercept",
"Elite Family Member<br>(Ref.: No Elite Family Member)",
"Age",
"Gender: male<br>(Ref.: female)"),
dv.labels = c("Model 1", "Model 2", "Model 3"),
string.pred = " ",
string.se = "std.<br>Error",
string.p = "p",
show.reflvl = TRUE,
show.p = TRUE,
prefix.labels = "varname",
show.se = TRUE,
show.ci = FALSE,
CSS = list(
css.firsttablecol = 'font-weight: bold;',
css.firsttablerow = 'font-weight: bold;',
css.secondtablerow = 'font-weight: bold;'
),
transform = NULL,
auto.label = FALSE,
show.r2 = FALSE # Disable R-squared computation
)
| Model 1 | Model 2 | Model 3 | |||||||
|---|---|---|---|---|---|---|---|---|---|
| Log-Odds |
std. Error |
p | Log-Odds |
std. Error |
p | Log-Odds |
std. Error |
p | |
| Intercept | -2.63 | 0.12 | <0.001 | 0.77 | 1.10 | 0.481 | 1.07 | 1.11 | 0.333 |
|
Elite Family Member (Ref.: No Elite Family Member) |
-1.05 | 0.83 | 0.138 | -1.04 | 0.83 | 0.142 | -1.09 | 0.83 | 0.122 |
| Age | -0.05 | 0.02 | 0.001 | -0.05 | 0.02 | 0.002 | |||
|
Gender: male (Ref.: female) |
-0.66 | 0.23 | 0.004 | ||||||
| Observations | 1260 | 1260 | 1260 | ||||||
4.1.1 Socialized in the GDR (born before 1976)
For respondents who were socialized in the GDR
Error
Error
Error
(Ref.: No Elite Family Member)
(Ref.: female)