Code
generate_mock_data <- function(n_dyads = 2000, n_leaders = 100) {
# Generate leaders
leaders <- tibble(
leader_id_a = 1:n_leaders,
COWcode_a = sample(2:999, n_leaders, replace = TRUE),
leader_name_a = paste0("Leader_", 1:n_leaders),
# Leader characteristics
base_ideology = runif(n_leaders, -2, 2), # Latent ideology trait
irregular_entry_a = rbinom(n_leaders, 1, 0.2),
entry_year = sample(1946:2010, n_leaders, replace = TRUE),
tenure_length = rnbinom(n_leaders, mu = 8, size = 1) + 1
) %>%
mutate(exit_year = entry_year + tenure_length)
# Expand to dyad-years
dyad_data <- list()
for(i in 1:nrow(leaders)) {
l <- leaders[i, ]
years <- l$entry_year:min(l$exit_year, 2020)
n_years <- length(years)
# Generate dyadic partners for each year
# Assume 5 partners per year for simplicity
n_partners <- 5
# Legitimation scores (autocorrelated)
ideol <- pnorm(l$base_ideology + rnorm(n_years, 0, 0.5)) # 0-1 scale like V-Dem index
perf <- runif(n_years, 0, 1)
pers <- runif(n_years, 0, 1)
for(j in seq_along(years)) {
yr <- years[j]
# Create dyad-year rows
rows <- tibble(
year = yr,
leader_id_a = l$leader_id_a,
COWcode_a = l$COWcode_a,
leader_name_a = l$leader_name_a,
leader_tenure_years_a = j,
leader_age_a = 40 + j,
irregular_entry_a = l$irregular_entry_a,
exit_type_a = if(yr == l$exit_year) sample(c("Regular", "Irregular", "Natural"), 1) else NA_character_,
# Legitimation (V-Dem indices)
v2exl_legitideol_a = ideol[j],
v2exl_legitperf_a = perf[j],
v2exl_legitlead_a = pers[j],
# Autocracy/Democracy levels
v2x_libdem_a = runif(1, 0, 0.4), # Autocracies only
v2x_libdem_b = c(runif(n_partners-2, 0, 0.4), runif(2, 0.5, 0.9)), # Mix of targets
# Partner ideology
v2exl_legitideol_b = runif(n_partners, 0, 1),
# Capabilities
unified_gdp_pc_a = exp(rnorm(1, 8, 1)),
unified_pop_a = exp(rnorm(1, 16, 1)),
# Controls
RED_export_importance = runif(1, 0, 1),
is_petro_state_a = rbinom(1, 1, 0.1)
)
# Conflict generation (dependent on ideology)
# Higher ideology -> higher conflict probability
prob_conflict <- plogis(-3 + 2 * rows$v2exl_legitideol_a +
0.5 * (rows$v2x_libdem_b > 0.5) + # Target democracy
-0.1 * rows$leader_tenure_years_a)
rows$hihosta <- rbinom(n_partners, 1, prob_conflict) * sample(3:5, n_partners, replace=TRUE)
# Set some to 0 (no conflict)
rows$hihosta[rows$hihosta == 0] <- 0 # Already 0
dyad_data[[length(dyad_data) + 1]] <- rows
}
}
bind_rows(dyad_data)
}
# Generate and prepare data
raw_data <- generate_mock_data(n_leaders = 200)
# Apply basic cleaning/prep
analysis_data <- raw_data %>%
filter(v2x_libdem_a < 0.5) %>%
mutate(
# DV: Conflict Initiation
conflict_initiation = as.integer(!is.na(hihosta) & hihosta >= 3),
use_of_force = as.integer(!is.na(hihosta) & hihosta >= 4),
# IVs
revisionist_ideology_a = v2exl_legitideol_a,
autocracy_level_a = 1 - v2x_libdem_a,
target_democracy = ifelse(v2x_libdem_b >= 0.5, 1, 0),
democracy_b = v2x_libdem_b,
log_gdp_a = log(unified_gdp_pc_a + 1),
log_pop_a = log(unified_pop_a + 1),
leader_personalism_a = v2exl_legitlead_a,
performance_legit_a = v2exl_legitperf_a,
leader_tenure_a = leader_tenure_years_a,
# Legitimation Mix
other_legit_a = (performance_legit_a + leader_personalism_a) / 2,
legit_mix_ratio_a = revisionist_ideology_a / (other_legit_a + 0.01),
total_legit_a = revisionist_ideology_a + performance_legit_a + leader_personalism_a,
ideological_share_a = revisionist_ideology_a / (total_legit_a + 0.01)
)
# Display data structure
glimpse(analysis_data)Rows: 9,920
Columns: 34
$ year <int> 2006, 2006, 2006, 2006, 2006, 2007, 2007, 2007,…
$ leader_id_a <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2,…
$ COWcode_a <int> 416, 416, 416, 416, 416, 416, 416, 416, 416, 41…
$ leader_name_a <chr> "Leader_1", "Leader_1", "Leader_1", "Leader_1",…
$ leader_tenure_years_a <int> 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2,…
$ leader_age_a <dbl> 41, 41, 41, 41, 41, 42, 42, 42, 42, 42, 41, 41,…
$ irregular_entry_a <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,…
$ exit_type_a <chr> NA, NA, NA, NA, NA, "Irregular", "Irregular", "…
$ v2exl_legitideol_a <dbl> 0.25776244, 0.25776244, 0.25776244, 0.25776244,…
$ v2exl_legitperf_a <dbl> 0.6752935, 0.6752935, 0.6752935, 0.6752935, 0.6…
$ v2exl_legitlead_a <dbl> 0.41554370, 0.41554370, 0.41554370, 0.41554370,…
$ v2x_libdem_a <dbl> 0.24917863, 0.24917863, 0.24917863, 0.24917863,…
$ v2x_libdem_b <dbl> 0.100469719, 0.185661385, 0.066203692, 0.843122…
$ v2exl_legitideol_b <dbl> 0.08833163, 0.89341777, 0.30062051, 0.75208667,…
$ unified_gdp_pc_a <dbl> 2619.3851, 2619.3851, 2619.3851, 2619.3851, 261…
$ unified_pop_a <dbl> 3077881, 3077881, 3077881, 3077881, 3077881, 16…
$ RED_export_importance <dbl> 0.5144343, 0.5144343, 0.5144343, 0.5144343, 0.5…
$ is_petro_state_a <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
$ hihosta <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 5, 0, 0, 0,…
$ conflict_initiation <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0,…
$ use_of_force <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,…
$ revisionist_ideology_a <dbl> 0.25776244, 0.25776244, 0.25776244, 0.25776244,…
$ autocracy_level_a <dbl> 0.7508214, 0.7508214, 0.7508214, 0.7508214, 0.7…
$ target_democracy <dbl> 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0,…
$ democracy_b <dbl> 0.100469719, 0.185661385, 0.066203692, 0.843122…
$ log_gdp_a <dbl> 7.871077, 7.871077, 7.871077, 7.871077, 7.87107…
$ log_pop_a <dbl> 14.93975, 14.93975, 14.93975, 14.93975, 14.9397…
$ leader_personalism_a <dbl> 0.41554370, 0.41554370, 0.41554370, 0.41554370,…
$ performance_legit_a <dbl> 0.6752935, 0.6752935, 0.6752935, 0.6752935, 0.6…
$ leader_tenure_a <int> 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2,…
$ other_legit_a <dbl> 0.5454186, 0.5454186, 0.5454186, 0.5454186, 0.5…
$ legit_mix_ratio_a <dbl> 0.46408680, 0.46408680, 0.46408680, 0.46408680,…
$ total_legit_a <dbl> 1.3485996, 1.3485996, 1.3485996, 1.3485996, 1.3…
$ ideological_share_a <dbl> 0.18972656, 0.18972656, 0.18972656, 0.18972656,…