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

1 Family Analyses

1.1 Left-Wing Party

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

1.1.1 2013 General Election

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
)
Table 1: Rare Events Logistic Regression for Elite Family Member Status in GDR on Left Party Vote (2013)
  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

1.1.2 2017 General Election

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
)
Table 2: Rare Events Logistic Regression for Elite Family Member Status in GDR on Left Party Vote (2017)
  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

1.1.3 2021 General Election

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
)
Table 3: Rare Events Logistic Regression for Elite Family Member Status in GDR on Left Party Vote (2021)
  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

1.1.4 Left wing Identification

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)
  )
Table 4: Random Effects Regression for Elite Status in GDR on Anti-System Party Identification
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

1.2 Anti-System Party

1.2.1 2013 General Election

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
)
Table 5: Rare Events Logistic Regression for Elite Family Member Status in GDR on Anti-System Party Vote (2013)
  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

1.2.2 2017 General Election

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
)
Table 6: Rare Events Logistic Regression for Elite Family Member Status in GDR on Anti-System Party Vote (2017)
  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

1.2.3 2021 General Election

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
)
Table 7: Rare Events Logistic Regression for Elite Family Member Status in GDR on Anti-System Party Vote (2021)
  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

2 Parent(s) who were/was Elite in the GDR

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
)
Table 8: Rare Events Logistic Regression for Having Elite Parents in GDR on Right Party Vote (2013)
  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

3 Family Analyses for Different Age Cohorts

3.1 2013 Election

3.1.1 Younger Than 13 When Wall Fell (born after 1976)

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
)
Table 9: Rare Events Logistic Regression for Elite Family Member Status in GDR on Right Party Vote (2013)
For respondents who were younger than 13 when the wall fell
  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

3.1.2 Age 13 - 25 When Wall Fell (born between 1964 and 1976)

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
)
Table 10: Rare Events Logistic Regression for Elite Family Member Status in GDR on Right Party Vote (2013)
For respondents who were between 13 and 25 years old when the wall fell
  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

3.1.3 Age 25 When Wall Fell (born 1964)

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
)
Table 11: Rare Events Logistic Regression for Elite Family Member Status in GDR on Right Party Vote (2013)
For respondents who were of age 25 when the wall fell
  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

3.1.4 Older Than 25 When Wall Fell (born before 1964)

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
)
Table 12: Rare Events Logistic Regression for Elite Family Member Status in GDR on Right Party Vote (2013)
For respondents who were older than 25 when the wall fell
  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

3.2 2017 Election

3.2.1 Younger Than 13 When Wall Fell (born after 1976)

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
)
Table 13: Rare Events Logistic Regression for Elite Family Member Status in GDR on Right Party Vote (2017)
For respondents who were younger than 13 when the wall fell
  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

3.2.2 Age 13 - 25 When Wall Fell (born between 1964 and 1976)

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
)
Table 14: Rare Events Logistic Regression for Elite Family Member Status in GDR on Right Party Vote (2017)
For respondents who were between 13 and 25 years old when the wall fell
  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

3.2.3 Age 25 When Wall Fell (born 1964)

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
)
Table 15: Rare Events Logistic Regression for Elite Family Member Status in GDR on Right Party Vote (2017)
For respondents who were of age 25 when the wall fell
  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

3.2.4 Older Than 25 When Wall Fell (born before 1964)

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
)
Table 16: Rare Events Logistic Regression for Elite Family Member Status in GDR on Right Party Vote (2017)
For respondents who were older than 25 when the wall fell
  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

2021 Election

3.3.1 Younger Than 13 When Wall Fell (born after 1976)

The estimation was hindered by a singular Fisher information matrix, likely caused by insufficient data variability (Determinant of Fisher information matrix was numerically 0).

3.3.2 Age 13 - 25 When Wall Fell (born between 1964 and 1976)

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
)
Table 17: Rare Events Logistic Regression for Elite Family Member Status in GDR on Right Party Vote (2021)
For respondents who were between 13 and 25 years old when the wall fell
  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

3.3.3 Age 25 When Wall Fell (born 1964)

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
)
Table 18: Rare Events Logistic Regression for Elite Family Member Status in GDR on Right Party Vote (2021)
For respondents who were of age 25 when the wall fell
  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

3.3.4 Older Than 25 When Wall Fell (born before 1964)

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
)
Table 19: Rare Events Logistic Regression for Elite Family Member Status in GDR on Right Party Vote (2021)
For respondents who were older than 25 when the wall fell
  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 Family Analyses for Different Age Cohorts - Socialization

4.1 2013 Election

4.1.1 Socialized in the GDR (born before 1976)

data_2014 <- used[used$year == 2014,]
data_2014_gdr <- data_2014[data_2014$gebjahr < 1976,]

M1 <- logistf(data = data_2014_gdr, right_vote ~ elite_fam, firth = TRUE, pl = TRUE) 
M2 <- logistf(data = data_2014_gdr, right_vote ~ elite_fam + age, firth = TRUE, pl = TRUE) 
M3 <- logistf(data = data_2014_gdr, right_vote ~ elite_fam + age + gender, firth = TRUE, pl = TRUE) 

tab_model(
  M1, M2, M3,
  title = "Table 20: Rare Events Logistic Regression for Elite Family Member Status in GDR on Right Party Vote (2013)<br>For respondents who were socialized in the GDR",
  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
)
Table 20: Rare Events Logistic Regression for Elite Family Member Status in GDR on Right Party Vote (2013)
For respondents who were socialized in the GDR
  Model 1 Model 2 Model 3
Log-Odds std.
Error
p Log-Odds std.
Error
p Log-Odds std.
Error
p
Intercept -3.53 0.11 <0.001 -1.85 0.51 <0.001 -1.51 0.52 0.004
Elite Family Member
(Ref.: No Elite Family Member)
0.56 0.37 0.158 0.68 0.37 0.092 0.62 0.37 0.119
Age -0.03 0.01 0.001 -0.03 0.01 0.001
Gender: male
(Ref.: female)
-0.75 0.21 <0.001
Observations 3302 3302 3302

4.1.2 Socialized in the 1990s/Transformation (born between 1976 and 1987)

data_2014_trans <- data_2014[data_2014$gebjahr >= 1976 & data_2014$gebjahr <= 1987,]

M1 <- logistf(data = data_2014_trans, right_vote ~ elite_fam, firth = TRUE, pl = TRUE) 
M2 <- logistf(data = data_2014_trans, right_vote ~ elite_fam + age, firth = TRUE, pl = TRUE) 
M3 <- logistf(data = data_2014_trans, right_vote ~ elite_fam + age + gender, firth = TRUE, pl = TRUE) 

tab_model(
  M1, M2, M3,
  title = "Table 21: Rare Events Logistic Regression for Elite Family Member Status in GDR on Right Party Vote (2013)<br>For respondents who were socialized in the 1990s/Transformation",
  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
)
Table 21: Rare Events Logistic Regression for Elite Family Member Status in GDR on Right Party Vote (2013)
For respondents who were socialized in the 1990s/Transformation
  Model 1 Model 2 Model 3
Log-Odds std.
Error
p Log-Odds std.
Error
p Log-Odds std.
Error
p
Intercept -2.93 0.44 <0.001 -7.12 5.33 0.152 -6.57 5.22 0.193
Elite Family Member
(Ref.: No Elite Family Member)
2.15 0.88 0.028 2.04 0.87 0.035 2.03 0.86 0.034
Age 0.12 0.15 0.411 0.11 0.15 0.441
Gender: male
(Ref.: female)
-0.49 0.73 0.517
Observations 115 115 115

4.1.3 Socialized after the Transformation (born after 1987)

The model could not be estimated because of a lack of sufficient observations in the relevant subgroups.

4.2 2017 Election

4.2.1 Socialized in the GDR (born before 1976)

data_2018 <- used[used$year == 2018,]
data_2018_gdr <- data_2018[data_2018$gebjahr < 1976,]

M1 <- logistf(data = data_2018_gdr, right_vote ~ elite_fam, firth = TRUE, pl = TRUE) 
M2 <- logistf(data = data_2018_gdr, right_vote ~ elite_fam + age, firth = TRUE, pl = TRUE) 
M3 <- logistf(data = data_2018_gdr, right_vote ~ elite_fam + age + gender, firth = TRUE, pl = TRUE) 

tab_model(
  M1, M2, M3,
  title = "Table 22: Rare Events Logistic Regression for Elite Family Member Status in GDR on Right Party Vote (2017)<br>For respondents who were socialized in the GDR",
  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
)
Table 22: Rare Events Logistic Regression for Elite Family Member Status in GDR on Right Party Vote (2017)
For respondents who were socialized in the GDR
  Model 1 Model 2 Model 3
Log-Odds std.
Error
p Log-Odds std.
Error
p Log-Odds std.
Error
p
Intercept -2.05 0.06 <0.001 -0.56 0.32 0.075 -0.23 0.32 0.476
Elite Family Member
(Ref.: No Elite Family Member)
-0.39 0.33 0.214 -0.27 0.33 0.391 -0.32 0.33 0.313
Age -0.02 0.01 <0.001 -0.02 0.01 <0.001
Gender: male
(Ref.: female)
-0.75 0.12 <0.001
Observations 3205 3205 3205

4.2.2 Socialized in the 1990s/Transformation (born between 1976 and 1987)

data_2018 <- used[used$year == 2018,]
data_2018_trans <- data_2018[data_2018$gebjahr >= 1976 & data_2018$gebjahr <= 1987,]

M1 <- logistf(data = data_2018_trans, right_vote ~ elite_fam, firth = TRUE, pl = TRUE) 
M2 <- logistf(data = data_2018_trans, right_vote ~ elite_fam + age, firth = TRUE, pl = TRUE) 
M3 <- logistf(data = data_2018_trans, right_vote ~ elite_fam + age + gender, firth = TRUE, pl = TRUE) 

tab_model(
  M1, M2, M3,
  title = "Table 23: Rare Events Logistic Regression for Elite Family Member Status in GDR on Right Party Vote (2017)<br>For respondents who were socialized in the 1990s/Transformation",
  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
)
Table 23: Rare Events Logistic Regression for Elite Family Member Status in GDR on Right Party Vote (2017)
For respondents who were socialized in the 1990s/Transformation
  Model 1 Model 2 Model 3
Log-Odds std.
Error
p Log-Odds std.
Error
p Log-Odds std.
Error
p
Intercept -1.88 0.29 <0.001 -7.22 4.25 0.068 -7.12 4.19 0.072
Elite Family Member
(Ref.: No Elite Family Member)
0.78 0.99 0.455 0.76 0.99 0.466 0.75 0.98 0.470
Age 0.14 0.11 0.183 0.14 0.11 0.185
Gender: male
(Ref.: female)
-0.04 0.55 0.942
Observations 106 106 106

4.2.3 Socialized after the Transformation (born after 1987)

The model could not be estimated because of a lack of sufficient observations in the relevant subgroups.

4.3 2021 Election

4.3.1 Socialized in the GDR (born before 1976)

data_2022 <- used[used$year == 2022,]
data__2022_gdr <- data_2022[data_2022$gebjahr < 1976,]

M1 <- logistf(data = data__2022_gdr, right_vote ~ elite_fam, firth = TRUE, pl = TRUE) 
M2 <- logistf(data = data__2022_gdr, right_vote ~ elite_fam + age, firth = TRUE, pl = TRUE) 
M3 <- logistf(data = data__2022_gdr, right_vote ~ elite_fam + age + gender, firth = TRUE, pl = TRUE) 

tab_model(
  M1, M2, M3,
  title = "Table 24: Rare Events Logistic Regression for Elite Family Member Status in GDR on Right Party Vote (2021)<br>For respondents who were socialized in the GDR",
  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
)
Table 24: Rare Events Logistic Regression for Elite Family Member Status in GDR on Right Party Vote (2021)
For respondents who were socialized in the GDR
  Model 1 Model 2 Model 3
Log-Odds std.
Error
p Log-Odds std.
Error
p Log-Odds std.
Error
p
Intercept -2.43 0.09 <0.001 -0.15 0.56 0.789 0.10 0.57 0.862
Elite Family Member
(Ref.: No Elite Family Member)
-1.30 0.83 0.053 -1.11 0.83 0.112 -1.13 0.83 0.103
Age -0.04 0.01 <0.001 -0.04 0.01 <0.001
Gender: male
(Ref.: female)
-0.61 0.18 0.001
Observations 1792 1792 1792

4.3.2 Socialized in the 1990s/Transformation (born between 1976 and 1987)

The estimation was hindered by a singular Fisher information matrix, likely caused by insufficient data variability (Determinant of Fisher information matrix was numerically 0).

4.3.3 Socialized after the Transformation (born after 1987)

The model could not be estimated because of a lack of sufficient observations in the relevant subgroups.

Sources

Hlavac, Marek. 2022. Stargazer: Well-Formatted Regression and Summary Statistics Tables. R Package Version 5.2.3. https://CRAN.R-project.org/package=stargazer.