This report presents descriptive analysis of the Global
Dynasties Dataset (GDD), a leader-level panel recording nominal
heads of state or government and their familial ties for 10,119
country-years spanning 1946–2020. A leader is coded as
dynastic (pred_bin = 1) if at least one family
member previously held political office at any level (national, state,
or local).
The analysis proceeds in two parts:
Data source: Global Dynasties Dataset (Verma &
Midha, 2026), sheet NEW Jan-Feb 2026. Variables prefixed
fln_ are harmonized from the TED dataset (Nooruddin et al.,
2022; Harvard Dataverse DOI: 10.7910/DVN/UXFY88).
The dataset classifies each country-year into one of six system categories. These are used throughout the analysis to contextualise dynastic patterns across regime types:
| Regime Type | Definition |
|---|---|
| Parliamentary Democracy | Competitive multi-party elections; executive accountable to legislature; prime minister or equivalent as effective head of government (e.g. India, Sri Lanka under democratic periods). |
| Presidential Democracy | Competitive elections; directly elected executive president with a fixed term who is not accountable to legislature for survival in office (e.g. Maldives post-2008). |
| Mixed Democratic | Hybrid systems combining features of both parliamentary and presidential models, or semi-competitive elections with meaningful opposition but institutional ambiguities (e.g. Bangladesh under early 1970s arrangements). |
| Civilian Dictatorship | Non-democratic single-party or personalised rule without free elections, led by a civilian ruler (e.g. early Bangladesh under Mujibur Rahman’s one-party BAKSAL period; Sheikh Hasina’s later tenure coded thus). |
| Military Dictatorship | Executive power exercised by military officers through a coup or direct military governance; legislative and electoral competition suspended or tightly controlled (e.g. Pakistan under Ayub Khan, Zia-ul-Haq, Musharraf; Bangladesh under Zia ur-Rahman, Ershad). |
| Royal Dictatorship | Hereditary monarchy with no or minimal competitive elections; executive power concentrated in a royal family (e.g. Bhutan under monarchy, certain Gulf states). |
Note: These categories are project-specific codings by the GDD team. They may differ from other datasets’ operationalisations (e.g. V-Dem, Polity). In particular, the Mixed Democratic category captures transitional or ambiguous cases that do not fit neatly into purely democratic or purely autocratic bins.
df <- read_excel(
"D:/Populism and Democrary/Global Dynasty/Global_Dynasties_Dataset.xlsx",
sheet = "NEW Jan-Feb 2026"
) %>%
# Recode labels
mutate(
dynasty = as.integer(pred_bin),
female_leader = as.integer(fln_gender),
decade = paste0(floor(year / 10) * 10, "s"),
relation_label = case_when(
relation_code_pred == 2 ~ "Father",
relation_code_pred == 3 ~ "Mother",
relation_code_pred == 4 ~ "Son",
relation_code_pred == 6 ~ "Husband",
relation_code_pred == 8 ~ "Brother",
relation_code_pred == 10 ~ "Grandfather",
relation_code_pred == 11 ~ "Grandmother",
relation_code_pred == 14 ~ "Uncle",
relation_code_pred == 18 ~ "Cousin",
relation_code_pred == 19 ~ "Other kin",
TRUE ~ NA_character_
),
pos_label = case_when(
pos_code_pred == 2 ~ "Head of Government",
pos_code_pred == 3 ~ "Cabinet Minister",
pos_code_pred == 4 ~ "Member of Parliament",
pos_code_pred == 5 ~ "Assembly / Chief Minister",
pos_code_pred == 6 ~ "Mayor",
pos_code_pred == 7 ~ "Councillor",
pos_code_pred == 1 ~ "Other",
TRUE ~ NA_character_
),
system_category = case_when(
system_category == "Civilian Dictatorship" ~ "Civilian Dictatorship",
system_category == "Military Dictatorship" ~ "Military Dictatorship",
system_category == "Royal Dictatorship" ~ "Royal Dictatorship",
system_category == "Parliamentary Democracy" ~ "Parliamentary Democracy",
system_category == "Presidential Democracy" ~ "Presidential Democracy",
system_category == "Mixed Democratic" ~ "Mixed Democratic",
TRUE ~ NA_character_
)
)
# Drop the 5 rows missing Region
df <- df %>% filter(!is.na(Region))
cat("Total country-years:", nrow(df), "\n")## Total country-years: 10114
## Dynastic leaders: 2658
## Non-dynastic: 7456
## Years covered: 1946 – 2020
overall <- df %>%
summarise(
Total = n(),
Dynastic = sum(dynasty == 1),
Non_dynastic = sum(dynasty == 0),
Rate = round(Dynastic / Total * 100, 1)
)
overall %>%
kbl(
col.names = c("Total country-years", "Dynastic leaders",
"Non-dynastic leaders", "Dynastic rate (%)"),
caption = "Table 1: Global dynastic leadership (1946–2020)"
) %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE)| Total country-years | Dynastic leaders | Non-dynastic leaders | Dynastic rate (%) |
|---|---|---|---|
| 10114 | 2658 | 7456 | 26.3 |
Across all 10114 country-years in the dataset, 2658 (26.3%) had a dynastic leader — a leader with at least one family member who previously held political office.
trend <- df %>%
group_by(year) %>%
summarise(
rate = mean(dynasty == 1) * 100,
n_total = n()
)
ggplot(trend, aes(x = year, y = rate)) +
geom_line(colour = "#2c7bb6", linewidth = 0.8) +
geom_smooth(method = "loess", span = 0.3, se = TRUE,
colour = "#d7191c", fill = "#f7b6b2", alpha = 0.3) +
scale_x_continuous(breaks = seq(1946, 2020, 10)) +
scale_y_continuous(limits = c(0, 60), labels = label_percent(scale = 1)) +
labs(
title = "Global Share of Dynastic Leaders, 1946–2020",
subtitle = "Red smoothed line shows LOESS trend; shaded band is 95% CI",
x = "Year",
y = "Share of dynastic leaders (%)"
) +
theme_minimal(base_size = 13) +
theme(panel.grid.minor = element_blank())Figure 1: Share of dynastic leaders globally by year (1946–2020)
decade_df <- df %>%
group_by(decade) %>%
summarise(rate = mean(dynasty == 1) * 100, n = n()) %>%
arrange(decade)
ggplot(decade_df, aes(x = decade, y = rate, fill = rate)) +
geom_col(colour = "white", width = 0.7) +
geom_text(aes(label = paste0(round(rate, 1), "%")),
vjust = -0.5, size = 4, fontface = "bold") +
scale_fill_gradient(low = "#c6dbef", high = "#2171b5", guide = "none") +
scale_y_continuous(limits = c(0, 40), labels = label_percent(scale = 1)) +
labs(
title = "Dynastic Leadership Rate by Decade",
x = "Decade",
y = "Dynastic rate (%)"
) +
theme_minimal(base_size = 13) +
theme(panel.grid.major.x = element_blank())Figure 2: Dynastic rate by decade
region_df <- df %>%
group_by(Region) %>%
summarise(
Total = n(),
Dynastic = sum(dynasty == 1),
Rate = Dynastic / Total * 100
) %>%
arrange(desc(Rate))
ggplot(region_df, aes(x = reorder(Region, Rate), y = Rate, fill = Rate)) +
geom_col(colour = "white", width = 0.7) +
geom_text(aes(label = paste0(round(Rate, 1), "%")),
hjust = -0.1, size = 4, fontface = "bold") +
coord_flip() +
scale_fill_gradient(low = "#fee8c8", high = "#b30000", guide = "none") +
scale_y_continuous(limits = c(0, 75), labels = label_percent(scale = 1)) +
labs(
title = "Dynastic Leadership Rate by Region (1946–2020)",
subtitle = "Percentage of country-years with a dynastic leader",
x = NULL,
y = "Dynastic rate (%)"
) +
theme_minimal(base_size = 13) +
theme(panel.grid.major.y = element_blank())Figure 3: Dynastic leadership rate by region
region_df %>%
mutate(Rate = paste0(round(Rate, 1), "%")) %>%
rename(Region = Region, `Country-years` = Total,
`Dynastic leaders` = Dynastic, `Dynastic rate` = Rate) %>%
kbl(caption = "Table 2: Dynastic rates by region") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE)| Region | Country-years | Dynastic leaders | Dynastic rate |
|---|---|---|---|
| South Asia | 552 | 324 | 58.7% |
| Middle East | 1169 | 584 | 50% |
| East Asia | 1038 | 309 | 29.8% |
| North America | 1161 | 341 | 29.4% |
| Australia and Oceania | 309 | 74 | 23.9% |
| South America | 776 | 168 | 21.6% |
| Africa | 2735 | 568 | 20.8% |
| Western Europe | 1363 | 196 | 14.4% |
| Eastern Europe | 1011 | 94 | 9.3% |
region_trend <- df %>%
mutate(period = floor(year / 5) * 5) %>%
group_by(Region, period) %>%
summarise(rate = mean(dynasty == 1) * 100, .groups = "drop")
ggplot(region_trend, aes(x = period, y = rate, colour = Region)) +
geom_line(linewidth = 0.8) +
geom_smooth(method = "loess", span = 0.5, se = FALSE, linetype = "dashed",
linewidth = 0.4) +
facet_wrap(~Region, ncol = 3, scales = "free_y") +
scale_x_continuous(breaks = c(1950, 1980, 2010)) +
scale_y_continuous(labels = label_percent(scale = 1)) +
scale_colour_brewer(palette = "Set1", guide = "none") +
labs(
title = "Dynastic Leadership Rate by Region Over Time",
subtitle = "5-year averages; dashed line = LOESS trend",
x = "Year",
y = "Dynastic rate (%)"
) +
theme_minimal(base_size = 12) +
theme(strip.text = element_text(face = "bold"),
panel.grid.minor = element_blank())Figure 4: Dynastic leadership trends by region (1946–2020)
regime_df <- df %>%
filter(!is.na(system_category)) %>%
group_by(system_category) %>%
summarise(
Total = n(),
Dynastic = sum(dynasty == 1),
Rate = Dynastic / Total * 100
) %>%
arrange(desc(Rate))
regime_colours <- c(
"Royal Dictatorship" = "#7b2d8b",
"Civilian Dictatorship" = "#d73027",
"Military Dictatorship" = "#fc8d59",
"Mixed Democratic" = "#fee090",
"Parliamentary Democracy" = "#91bfdb",
"Presidential Democracy" = "#4575b4"
)
ggplot(regime_df,
aes(x = reorder(system_category, Rate), y = Rate,
fill = system_category)) +
geom_col(colour = "white", width = 0.7) +
geom_text(aes(label = paste0(round(Rate, 1), "%")),
hjust = -0.1, size = 4, fontface = "bold") +
coord_flip() +
scale_fill_manual(values = regime_colours, guide = "none") +
scale_y_continuous(limits = c(0, 80), labels = label_percent(scale = 1)) +
labs(
title = "Dynastic Leadership Rate by Regime Type (1946–2020)",
subtitle = "Percentage of country-years with a dynastic leader",
x = NULL,
y = "Dynastic rate (%)"
) +
theme_minimal(base_size = 13) +
theme(panel.grid.major.y = element_blank())Figure 5: Dynastic rate by regime type
heat_df <- df %>%
filter(!is.na(system_category)) %>%
group_by(Region, system_category) %>%
summarise(n = n(), rate = mean(dynasty == 1) * 100, .groups = "drop") %>%
filter(n >= 20) # suppress cells with very few observations
ggplot(heat_df, aes(x = system_category, y = Region, fill = rate)) +
geom_tile(colour = "white", linewidth = 0.5) +
geom_text(aes(label = ifelse(n >= 20, paste0(round(rate, 0), "%"), "")),
size = 3.5, colour = "black") +
scale_fill_gradient2(
low = "#f7fbff",
mid = "#6baed6",
high = "#08306b",
midpoint = 30,
name = "Dynastic\nrate (%)"
) +
scale_x_discrete(labels = function(x) str_wrap(x, width = 12)) +
labs(
title = "Dynastic Rate by Regime Type and Region",
subtitle = "Cells with fewer than 20 country-years suppressed",
x = NULL,
y = NULL
) +
theme_minimal(base_size = 12) +
theme(axis.text.x = element_text(angle = 30, hjust = 1, size = 10),
panel.grid = element_blank())Figure 6: Dynastic rate — regime type × region heatmap
kin_df <- df %>%
filter(dynasty == 1, !is.na(relation_label)) %>%
count(relation_label) %>%
mutate(pct = n / sum(n) * 100) %>%
arrange(desc(pct))
ggplot(kin_df, aes(x = reorder(relation_label, pct), y = pct,
fill = relation_label)) +
geom_col(colour = "white", width = 0.7) +
geom_text(aes(label = paste0(round(pct, 1), "%")),
hjust = -0.1, size = 4, fontface = "bold") +
coord_flip() +
scale_fill_brewer(palette = "Paired", guide = "none") +
scale_y_continuous(limits = c(0, 80), labels = label_percent(scale = 1)) +
labs(
title = "Type of Dynastic Kin Relationship (Global, 1946–2020)",
subtitle = "Among dynastic leaders (pred_bin = 1) with identified kin type",
x = NULL,
y = "Share of dynastic leaders (%)"
) +
theme_minimal(base_size = 13) +
theme(panel.grid.major.y = element_blank())Figure 7: Type of kin relationship — dynastic predecessors (global)
pos_df <- df %>%
filter(dynasty == 1, !is.na(pos_label)) %>%
count(pos_label) %>%
mutate(pct = n / sum(n) * 100) %>%
arrange(desc(pct))
ggplot(pos_df, aes(x = reorder(pos_label, pct), y = pct, fill = pos_label)) +
geom_col(colour = "white", width = 0.7) +
geom_text(aes(label = paste0(round(pct, 1), "%")),
hjust = -0.1, size = 4, fontface = "bold") +
coord_flip() +
scale_fill_brewer(palette = "Set2", guide = "none") +
scale_y_continuous(limits = c(0, 75), labels = label_percent(scale = 1)) +
labs(
title = "Office Level of Dynastic Predecessor (Global, 1946–2020)",
subtitle = "Among dynastic leaders with identified predecessor position",
x = NULL,
y = "Share of dynastic leaders (%)"
) +
theme_minimal(base_size = 13) +
theme(panel.grid.major.y = element_blank())Figure 8: Office level held by dynastic predecessor
gender_df <- df %>%
mutate(gender_label = if_else(female_leader == 1, "Female leaders", "Male leaders")) %>%
group_by(gender_label) %>%
summarise(
Total = n(),
Dynastic = sum(dynasty == 1),
Rate = Dynastic / Total * 100
)
ggplot(gender_df, aes(x = gender_label, y = Rate, fill = gender_label)) +
geom_col(colour = "white", width = 0.5) +
geom_text(aes(label = paste0(round(Rate, 1), "%\n(n=", Dynastic, ")")),
vjust = -0.4, size = 5, fontface = "bold") +
scale_fill_manual(values = c("Female leaders" = "#d95f02",
"Male leaders" = "#1f78b4"),
guide = "none") +
scale_y_continuous(limits = c(0, 80), labels = label_percent(scale = 1)) +
labs(
title = "Dynastic Rate by Leader Gender (Global, 1946–2020)",
subtitle = paste0("Female leaders n=", sum(df$female_leader==1),
"; Male leaders n=", sum(df$female_leader==0)),
x = NULL,
y = "Dynastic rate (%)"
) +
theme_minimal(base_size = 14) +
theme(panel.grid.major.x = element_blank())Figure 9: Dynastic rates by gender
gender_decade <- df %>%
mutate(gender_label = if_else(female_leader == 1, "Female", "Male")) %>%
group_by(decade, gender_label) %>%
summarise(rate = mean(dynasty == 1) * 100, n = n(), .groups = "drop") %>%
filter(n >= 5)
ggplot(gender_decade, aes(x = decade, y = rate, colour = gender_label,
group = gender_label)) +
geom_line(linewidth = 1.1) +
geom_point(size = 3) +
scale_colour_manual(values = c("Female" = "#d95f02", "Male" = "#1f78b4"),
name = "Leader gender") +
scale_y_continuous(limits = c(0, 100), labels = label_percent(scale = 1)) +
labs(
title = "Dynastic Rate by Gender Over Decades",
subtitle = "Cells with fewer than 5 observations suppressed",
x = "Decade",
y = "Dynastic rate (%)"
) +
theme_minimal(base_size = 13) +
theme(panel.grid.minor = element_blank(),
legend.position = "bottom")Figure 10: Dynastic rate for female leaders by decade
## South Asia country-years: 552
cat("Dynastic leaders:", sum(sa$dynasty == 1),
paste0("(", round(mean(sa$dynasty==1)*100, 1), "%)"), "\n")## Dynastic leaders: 324 (58.7%)
South Asia stands out as the most dynastically concentrated region in the dataset. With a dynastic rate of 58.7% — compared to a global average of 26.3% — the eight countries in the region offer a rich case for understanding how familial political succession operates across different regime types and historical periods.
A note on how counts work in this dataset. The GDD is a country-year panel: each row represents one country in one year. When we say “India has 20 dynastic country-years,” this means India was governed by a dynastic leader in 20 separate calendar years — not that India had 20 different dynastic individuals. In fact, India had only 2 unique dynastic leaders (Indira Gandhi and Rajiv Gandhi) who together account for all 20 dynastic years. Likewise, Bangladesh’s figures begin only from 1971 (its year of independence), so all pre-1971 history is excluded. This distinction between country-years and unique leaders matters whenever interpreting counts — the tables in the next section make both explicit.
india_leaders <- df %>%
filter(Country == "India") %>%
arrange(year) %>%
group_by(nominal_leader) %>%
summarise(
`Years in power` = paste0(min(year), "–", max(year)),
`No. of years` = n(),
Dynastic = if_else(max(dynasty) == 1, "✔ Yes", "✘ No"),
`Regime type` = paste(unique(system_category), collapse = " / "),
`Dynastic lineage` = first(na.omit(dynasty_desc)),
.groups = "drop"
) %>%
mutate(
`Dynastic lineage` = str_replace_all(`Dynastic lineage`, "\r\n", "; "),
`Dynastic lineage` = str_trunc(`Dynastic lineage`, 120)
) %>%
rename(Leader = nominal_leader)
india_leaders %>%
kbl(caption = "Table 5: All leaders of India (1947–2020) — dynastic status") %>%
kable_styling(bootstrap_options = c("striped","hover","condensed"),
full_width = TRUE, font_size = 12) %>%
column_spec(3, bold = TRUE) %>%
column_spec(4, color = if_else(india_leaders$Dynastic == "✔ Yes",
"#bd0026", "grey40"), bold = TRUE) %>%
row_spec(which(india_leaders$Dynastic == "✔ Yes"), background = "#fff0f0")| Leader | Years in power | No. of years | Dynastic | Regime type | Dynastic lineage |
|---|---|---|---|---|---|
| Atal Bihari Vajpayee | 1998–2003 | 6 | ✘ No | Parliamentary Democracy | Father: Krishna Bihari Vajpayee, school teacher; Mother: Krishna Devi |
| Chandra Shekhar | 1990–1990 | 1 | ✘ No | Parliamentary Democracy | Son: Pankaj Shekhar Singh, Politician; Son: Neeraj Shekhar, Politician-Member of Parliament |
| Charan Singh | 1979–1979 | 1 | ✘ No | Parliamentary Democracy | Son: Ajit Singh, Politician-Minister; Grandson: Jayant Chaudhary, Politician-Minister |
| H.D. Deve Gowda | 1996–1996 | 1 | ✘ No | Parliamentary Democracy | Father: Dodde Gowda, Farmer; Mother: Devamma, home maker ; Son: HD Revanna, Politician-Member of Asseambly; Grands… |
| Inder Kumar Gujral | 1997–1997 | 1 | ✘ No | Parliamentary Democracy | Father: Avtar Narain ; Mother: Pushpa Gujral ; Son: Naresh Gujral, Politician-Member of Parliament |
| Indira Gandhi | 1966–1983 | 15 | ✔ Yes | Parliamentary Democracy | Father: Jawaharlal Nehru, Politician-Prime Minister; Son: Rajiv Gandhi, Politician-Prime Minister; Son: Sanjay Gandh… |
| Jawaharlal Nehru | 1947–1963 | 17 | ✘ No | Parliamentary Democracy | Father: Motilal Nehru, Barrister ; Mother: Swarup Rani Thussu ; Daughter: Indira Gandhi, Politician-Prime Minister |
| Lal Bahadur Shastri | 1964–1965 | 2 | ✘ No | Parliamentary Democracy | Father: Sharada Prasad Srivastava, Teacher; Mother: Ramdulari Devi; Son: Anil Shastri, Politician-Minister; Son: Su… |
| Manmohan Singh | 2004–2013 | 10 | ✘ No | Parliamentary Democracy | Father: Gurmukh Singh ; Mother: Amrit Kaur |
| Morarji Desai | 1977–1978 | 2 | ✘ No | Parliamentary Democracy | father: Ranchhodji Nagarji Desai, school teacher ; Mother: Vajiaben Desai |
| Narendra Modi | 2014–2020 | 7 | ✘ No | Parliamentary Democracy | Father: Damodardas Mulchand Modi, Grocer; Mother: Hiraben Modi |
| P.V. Narasimha Rao | 1991–1995 | 5 | ✘ No | Parliamentary Democracy | Father: Sitarama Rao ; Mother: Rukma Baiagrarian ; Son: PV Ranga Rao, Politician-Member of Assembly; Son : P.V. Raje… |
| Rajiv Gandhi | 1984–1988 | 5 | ✔ Yes | Parliamentary Democracy | Father: Feroze Gandhi, Politician-Member of Parliament; Mother: Indira Gandhi, Politician-Prime Minister; Brother: Sa… |
| Vishwanath Pratap Singh | 1989–1989 | 1 | ✘ No | Parliamentary Democracy | Son: Ajeya Singh, Politician |
India: Only 2 out of 14 leaders were dynastic: Indira Gandhi (daughter of Jawaharlal Nehru; served 1966–1984 across two stints) and Rajiv Gandhi (son of Indira Gandhi; served 1984–1989). Together they account for 20 dynastic country-years out of India’s 74 total. Narendra Modi is coded non-dynastic — his father was a grocer with no political office.
pak_leaders <- df %>%
filter(Country == "Pakistan") %>%
arrange(year) %>%
group_by(nominal_leader) %>%
summarise(
`Years in power` = paste0(min(year), "–", max(year)),
`No. of years` = n(),
Dynastic = if_else(max(dynasty) == 1, "✔ Yes", "✘ No"),
`Regime type` = paste(unique(system_category), collapse = " / "),
`Dynastic lineage` = first(na.omit(dynasty_desc)),
.groups = "drop"
) %>%
mutate(
`Dynastic lineage` = str_replace_all(`Dynastic lineage`, "\r\n", "; "),
`Dynastic lineage` = str_trunc(`Dynastic lineage`, 120)
) %>%
rename(Leader = nominal_leader)
pak_leaders %>%
kbl(caption = "Table 6: All leaders of Pakistan (1947–2020) — dynastic status") %>%
kable_styling(bootstrap_options = c("striped","hover","condensed"),
full_width = TRUE, font_size = 12) %>%
column_spec(3, bold = TRUE) %>%
column_spec(4, color = if_else(pak_leaders$Dynastic == "✔ Yes",
"#bd0026", "grey40"), bold = TRUE) %>%
row_spec(which(pak_leaders$Dynastic == "✔ Yes"), background = "#fff0f0")| Leader | Years in power | No. of years | Dynastic | Regime type | Dynastic lineage |
|---|---|---|---|---|---|
| Agha Mohammad Yahya Khan | 1969–1970 | 2 | ✘ No | Military Dictatorship | Father : Saadat Ali Khan, Police Officer |
| Benazir Bhutto | 1988–1995 | 5 | ✔ Yes | Military Dictatorship / Parliamentary Democracy | Father: Zulfikar Ali Bhutto, Politician-Prime Minister; Mother : Nusrat Bhutto; Son: Bilawal Zardari, Politician-Mini… |
| Chauhdry Mohammad Ali | 1955–1955 | 1 | ✘ No | Parliamentary Democracy | Son: Chaudhry Ahmed Mukhtar, Politician-Minister; Grandson: Chaudhry Moonis Elahi, Politician-Member of Parliament |
| Hwaja Nazim ad-Din | 1951–1952 | 2 | ✔ Yes | Parliamentary Democracy | Father: Khwaja Nizamuddin; Mother: Nawabzadi Bilqis Banu; Grandfather: Khwaja Ahsanullah, Politician-Nawab of Dacca; … |
| Imran Khan | 2018–2020 | 3 | ✘ No | Parliamentary Democracy | Father: Ikramullah Khan Niazi, Civil engineer; Mother: Shaukat Khanum |
| Iskander Ali Mirza | 1956–1957 | 2 | ✘ No | Parliamentary Democracy | Father: Sahibzada Sayyid Muhammad Fateh Ali Mirza, Landowner; Mother: Dilshad Begum |
| Liaquat Ali Khan | 1947–1950 | 4 | ✘ No | Parliamentary Democracy | Wife : Ra’ana Liaquat Ali Khan, Politician-Governor |
| Miraj Khalid | 1996–1996 | 1 | ✘ No | Parliamentary Democracy | NA |
| Mohammad Ali Bogra | 1953–1954 | 2 | ✔ Yes | Parliamentary Democracy | Father: Nawabzada Altaf Ali Chowdhury, Politician; Grandfather : Syed Nawab Ali Chowdhury, Politican-Minister; Uncle:… |
| Mohammad Ayub Khan | 1958–1968 | 11 | ✘ No | Military Dictatorship | Father: Mir Dad Khan, Army Officer; Brother: Sardar Bahadur Khan, Politician-Minister; Son: Gohar Khan, Politician-Mi… |
| Mohammad Zia-ul-Haq | 1977–1987 | 11 | ✘ No | Military Dictatorship | Father : Muhammad Akbar Ali, Civil Servant; Son : Muhammad Ijaz-ul-Haq, Politician-Minister |
| Nawaz Sharif | 1990–2016 | 9 | ✘ No | Parliamentary Democracy | Father: Muhammed Sharif, Businessman; Mother: Begum Shamim Akhta; Brothers: Shehbaz Sharif, Politician-Prime Ministe… |
| Pervez Musharraf | 1999–2007 | 9 | ✘ No | Parliamentary Democracy / Military Dictatorship | Father : Syed Musharrafuddin, Accountant; Mother : Zarin |
| Shahid Khaqan Abbasi | 2017–2017 | 1 | ✔ Yes | Parliamentary Democracy | Father: Khaqan Abbasi, Politician-Minister; Sister: Sadia Abbasi, Politician-Member of Parliament |
| Yousaf Raza Gilani | 2008–2012 | 5 | ✔ Yes | Military Dictatorship / Parliamentary Democracy | Father: Makhdoom Syed Alamdar Hussain Gilani, Politician-Minister; Son: Abdul Qadir Gillani, Politician-Member of Par… |
| Zulfikar Ali Bhutto | 1971–1976 | 6 | ✔ Yes | Military Dictatorship / Mixed Democratic | Father: Shah Nawaz Bhutto, Politician-Member of Assembly; Mother: Khursheed Begum; Daughter: Benazir Bhutto, Politici… |
Pakistan: Dynastic leaders include the Bhutto family (Zulfikar Ali Bhutto and his daughter Benazir Bhutto), Hwaja Nazim ad-Din (grandfather was Nawab of Dacca), Mohammad Ali Bogra (father and grandfather were politicians), Yousaf Raza Gilani (father was a minister), and Shahid Khaqan Abbasi (father was also a minister). Nawaz Sharif appears in multiple terms but is coded non-dynastic as his father was a businessman rather than a politician.
bd_leaders <- df %>%
filter(Country == "Bangladesh") %>%
arrange(year) %>%
group_by(nominal_leader) %>%
summarise(
`Years in power` = paste0(min(year), "–", max(year)),
`No. of years` = n(),
Dynastic = if_else(max(dynasty) == 1, "✔ Yes", "✘ No"),
`Regime type` = paste(unique(system_category), collapse = " / "),
`Dynastic lineage` = first(na.omit(dynasty_desc)),
.groups = "drop"
) %>%
mutate(
`Dynastic lineage` = str_replace_all(`Dynastic lineage`, "\r\n", "; "),
`Dynastic lineage` = str_trunc(`Dynastic lineage`, 120)
) %>%
rename(Leader = nominal_leader)
bd_leaders %>%
kbl(caption = "Table 7: All leaders of Bangladesh (1971–2020) — dynastic status") %>%
kable_styling(bootstrap_options = c("striped","hover","condensed"),
full_width = TRUE, font_size = 12) %>%
column_spec(3, bold = TRUE) %>%
column_spec(4, color = if_else(bd_leaders$Dynastic == "✔ Yes",
"#bd0026", "grey40"), bold = TRUE) %>%
row_spec(which(bd_leaders$Dynastic == "✔ Yes"), background = "#fff0f0")| Leader | Years in power | No. of years | Dynastic | Regime type | Dynastic lineage |
|---|---|---|---|---|---|
| Abdus Sattar | 1981–1981 | 1 | ✘ No | Civilian Dictatorship | NA |
| Abu Sadat Mohammad Sayem | 1975–1976 | 2 | ✘ No | Civilian Dictatorship / Military Dictatorship | NA |
| Abul Fazal Mohammad Chowdhury | 1982–1982 | 1 | ✘ No | Military Dictatorship | NA |
| Hasina Wazed | 2009–2015 | 7 | ✔ Yes | Civilian Dictatorship | Father : Mujibur Rahman, Politician; Mother : Sheikh Fazilatunnesa Mujib; Son : Sajeeb Ahmed Wajed, Politician; Fathe… |
| Hossain Mohammad Ershad | 1983–1989 | 7 | ✔ Yes | Military Dictatorship / Mixed Democratic | Father : Mokbul Hossain, Politician-Minister; Mother : Mazida Khatun; Brother: GM Quader, Politician-Member of Parlia… |
| Iajuddin Ahmed | 2006–2008 | 3 | ✘ No | Parliamentary Democracy / Military Dictatorship | NA |
| Khaleda Zia | 1991–2005 | 10 | ✔ Yes | Parliamentary Democracy | Father : Iskandar Ali Majumder, Businessman; Mother : Taiyaba Majumder; Husband : Ziaur Rahman, Politician-President… |
| Mujibur Rahman | 1972–1974 | 3 | ✘ No | Civilian Dictatorship | Father : Sheikh Lutfur Rahman, Law Clerk; Mother : Sayera Khatun, housewife; Daughter : Sheikh Hasina, Politician-Pr… |
| Shahabuddin Ahmed | 1990–1990 | 1 | ✘ No | Mixed Democratic | Father: Talukdar Resat Ahmed Bhuiyan, Philanthropist; |
| Sheikh Hasina Wajed | 1996–2020 | 10 | ✔ Yes | Parliamentary Democracy / Civilian Dictatorship | Father : Mujibur Rahman, Politician; Mother : Sheikh Fazilatunnesa Mujib; Son : Sajeeb Ahmed Wajed, Politician; Fathe… |
| Tajuddin Ahmed | 1971–1971 | 1 | ✘ No | Civilian Dictatorship | Father : Maulavi Muhammad Yasin Khan ; Mother : Meherunnesa Khanam; Brother : Afsaruddin Ahmad, Politician-Member of… |
| Zia ur-Rahman | 1977–1980 | 4 | ✘ No | Military Dictatorship | Father : Mansur Rahman, Chemist; Mother : Jahanara Khatun; Wife : Khaleda Zia, Politician-Prime Minister; Son : Tariq… |
Bangladesh (data from 1971 onwards): The country enters the dataset only at independence in 1971, so there is no pre-1971 data. Sheikh Mujibur Rahman (the founding leader, 1972–1974) is coded non-dynastic (
pred_bin = 0) because he had no dynastic predecessor — he was the first of his family in national politics. His daughter Sheikh Hasina (multiple terms from 1996) is dynastic as Mujib’s successor. Khaleda Zia is dynastic as the widow of President Zia ur-Rahman. Hossain Mohammad Ershad (military ruler, 1983–1989) is dynastic through his father, who was a minister.
sa_country <- sa %>%
group_by(Country) %>%
summarise(
Total = n(),
Dynastic = sum(dynasty == 1),
Rate = Dynastic / Total * 100
) %>%
arrange(desc(Rate))
# Add global average line value
global_rate <- mean(df$dynasty == 1) * 100
ggplot(sa_country, aes(x = reorder(Country, Rate), y = Rate, fill = Rate)) +
geom_col(colour = "white", width = 0.7) +
geom_hline(yintercept = global_rate, linetype = "dashed",
colour = "grey40", linewidth = 0.8) +
annotate("text", x = 0.6, y = global_rate + 2,
label = paste0("Global avg: ", round(global_rate, 1), "%"),
hjust = 0, size = 3.5, colour = "grey30") +
geom_text(aes(label = paste0(round(Rate, 1), "%")),
hjust = -0.1, size = 4, fontface = "bold") +
coord_flip() +
scale_fill_gradient(low = "#ffffb2", high = "#bd0026", guide = "none") +
scale_y_continuous(limits = c(0, 90), labels = label_percent(scale = 1)) +
labs(
title = "Dynastic Leadership Rate by South Asian Country (1946–2020)",
subtitle = "Dashed line = global average",
x = NULL,
y = "Dynastic rate (%)"
) +
theme_minimal(base_size = 13) +
theme(panel.grid.major.y = element_blank())Figure 11: Dynastic rate by South Asian country
sa_country %>%
mutate(
Rate = paste0(round(Rate, 1), "%"),
vs_global = paste0(round(Dynastic/Total*100 - global_rate, 1), " pp")
) %>%
rename(Country = Country, `Country-years` = Total,
`Dynastic leaders` = Dynastic, `Dynastic rate` = Rate,
`vs. Global avg` = vs_global) %>%
kbl(caption = "Table 3: South Asian dynastic rates vs. global average") %>%
kable_styling(bootstrap_options = c("striped","hover","condensed"),
full_width = FALSE) %>%
column_spec(5, bold = TRUE, color = "#bd0026")| Country | Country-years | Dynastic leaders | Dynastic rate | vs. Global avg |
|---|---|---|---|---|
| Bhutan | 75 | 61 | 81.3% | 55.1 pp |
| Nepal | 75 | 59 | 78.7% | 52.4 pp |
| Afghanistan | 75 | 52 | 69.3% | 43.1 pp |
| Maldives | 56 | 37 | 66.1% | 39.8 pp |
| Sri Lanka | 73 | 44 | 60.3% | 34 pp |
| Bangladesh | 50 | 30 | 60% | 33.7 pp |
| Pakistan | 74 | 21 | 28.4% | 2.1 pp |
| India | 74 | 20 | 27% | 0.7 pp |
sa_trend <- sa %>%
group_by(Country, year) %>%
summarise(dynasty = mean(dynasty == 1), .groups = "drop")
ggplot(sa_trend, aes(x = year, y = dynasty * 100, colour = Country)) +
geom_line(linewidth = 0.9, alpha = 0.85) +
scale_colour_brewer(palette = "Dark2", name = "Country") +
scale_x_continuous(breaks = seq(1950, 2020, 10)) +
scale_y_continuous(limits = c(-5, 110), labels = label_percent(scale = 1)) +
labs(
title = "Dynastic Leadership Over Time in South Asia",
subtitle = "Each line = 1 if dynastic leader in power that year, 0 otherwise",
x = "Year",
y = "Dynastic leader (0/1)"
) +
theme_minimal(base_size = 12) +
theme(legend.position = "bottom",
panel.grid.minor = element_blank())Figure 12: Dynastic leadership rate over time — South Asian countries
sa_period <- sa %>%
mutate(period = floor(year / 5) * 5) %>%
group_by(period) %>%
summarise(rate = mean(dynasty == 1) * 100, .groups = "drop") %>%
mutate(group = "South Asia")
global_period <- df %>%
mutate(period = floor(year / 5) * 5) %>%
group_by(period) %>%
summarise(rate = mean(dynasty == 1) * 100, .groups = "drop") %>%
mutate(group = "Global")
bind_rows(sa_period, global_period) %>%
ggplot(aes(x = period, y = rate, colour = group, group = group)) +
geom_line(linewidth = 1.2) +
geom_point(size = 2.5) +
scale_colour_manual(values = c("South Asia" = "#bd0026", "Global" = "#2166ac"),
name = NULL) +
scale_x_continuous(breaks = seq(1946, 2020, 10)) +
scale_y_continuous(limits = c(0, 80), labels = label_percent(scale = 1)) +
labs(
title = "5-Year Dynastic Rate: South Asia vs. Global (1946–2020)",
x = "Year",
y = "Dynastic rate (%)"
) +
theme_minimal(base_size = 13) +
theme(legend.position = "bottom",
panel.grid.minor = element_blank())Figure 13: 5-year rolling dynastic rate — South Asia vs global
kin_compare <- bind_rows(
df %>% filter(dynasty == 1, !is.na(relation_label)) %>%
count(relation_label) %>% mutate(pct = n/sum(n)*100, group = "Global"),
sa %>% filter(dynasty == 1, !is.na(relation_label)) %>%
count(relation_label) %>% mutate(pct = n/sum(n)*100, group = "South Asia")
)
ggplot(kin_compare, aes(x = reorder(relation_label, pct), y = pct,
fill = group)) +
geom_col(position = "dodge", colour = "white", width = 0.7) +
coord_flip() +
scale_fill_manual(values = c("Global" = "#2166ac", "South Asia" = "#bd0026"),
name = NULL) +
scale_y_continuous(labels = label_percent(scale = 1)) +
labs(
title = "Kin-Type Distribution: South Asia vs. Global",
subtitle = "Among dynastic leaders with identified kin type",
x = NULL,
y = "Share of dynastic leaders (%)"
) +
theme_minimal(base_size = 13) +
theme(legend.position = "bottom",
panel.grid.major.y = element_blank())Figure 14: Kin-type distribution — South Asia vs global
sa_kin_ctry <- sa %>%
filter(dynasty == 1, !is.na(relation_label)) %>%
count(Country, relation_label) %>%
group_by(Country) %>%
mutate(pct = n / sum(n) * 100) %>%
ungroup()
ggplot(sa_kin_ctry, aes(x = Country, y = pct, fill = relation_label)) +
geom_col(colour = "white", width = 0.8) +
scale_fill_brewer(palette = "Paired", name = "Kin type") +
scale_y_continuous(labels = label_percent(scale = 1)) +
labs(
title = "Kin-Type Composition by South Asian Country",
subtitle = "Among dynastic leaders only",
x = NULL,
y = "Share (%)"
) +
theme_minimal(base_size = 12) +
theme(axis.text.x = element_text(angle = 30, hjust = 1),
legend.position = "bottom")Figure 15: Kin-type by South Asian country
sa_gender <- sa %>%
mutate(gender_label = if_else(female_leader == 1, "Female", "Male")) %>%
group_by(Country, gender_label) %>%
summarise(rate = mean(dynasty == 1) * 100, n = n(), .groups = "drop") %>%
filter(n >= 3)
ggplot(sa_gender, aes(x = Country, y = rate, fill = gender_label)) +
geom_col(position = "dodge", colour = "white", width = 0.7) +
scale_fill_manual(values = c("Female" = "#d95f02", "Male" = "#1f78b4"),
name = "Leader gender") +
scale_y_continuous(limits = c(0, 100), labels = label_percent(scale = 1)) +
labs(
title = "Dynastic Rate by Gender and Country — South Asia",
subtitle = "Cells with fewer than 3 observations suppressed",
x = NULL,
y = "Dynastic rate (%)"
) +
theme_minimal(base_size = 13) +
theme(legend.position = "bottom",
panel.grid.major.x = element_blank())Figure 16: Dynastic rate by gender — South Asia
sa_regime <- sa %>%
filter(!is.na(system_category)) %>%
group_by(system_category) %>%
summarise(
Total = n(),
Dynastic = sum(dynasty == 1),
Rate = Dynastic / Total * 100
) %>%
filter(Total >= 10) %>%
arrange(desc(Rate))
ggplot(sa_regime, aes(x = reorder(system_category, Rate), y = Rate,
fill = Rate)) +
geom_col(colour = "white", width = 0.7) +
geom_text(aes(label = paste0(round(Rate, 1), "%\n(n=", Total, ")")),
hjust = -0.1, size = 3.8, fontface = "bold") +
coord_flip() +
scale_fill_gradient(low = "#fdcc8a", high = "#b30000", guide = "none") +
scale_y_continuous(limits = c(0, 90), labels = label_percent(scale = 1)) +
labs(
title = "Dynastic Rate by Regime Type — South Asia",
subtitle = "Regime types with fewer than 10 country-years suppressed",
x = NULL,
y = "Dynastic rate (%)"
) +
theme_minimal(base_size = 13) +
theme(panel.grid.major.y = element_blank())Figure 17: Dynastic rate by regime type — South Asia
sa_ctry_reg <- sa %>%
filter(!is.na(system_category)) %>%
group_by(Country, system_category) %>%
summarise(n = n(), rate = mean(dynasty == 1) * 100, .groups = "drop") %>%
filter(n >= 5)
ggplot(sa_ctry_reg, aes(x = system_category, y = rate, fill = system_category)) +
geom_col(colour = "white", width = 0.7) +
geom_text(aes(label = paste0(round(rate, 0), "%")),
vjust = -0.4, size = 3) +
facet_wrap(~Country, ncol = 4, scales = "free_x") +
scale_fill_brewer(palette = "Set1", guide = "none") +
scale_y_continuous(limits = c(0, 110), labels = label_percent(scale = 1)) +
scale_x_discrete(labels = function(x) str_wrap(x, width = 10)) +
labs(
title = "Dynastic Rate by Regime Type — Each South Asian Country",
subtitle = "Cells with fewer than 5 country-years suppressed",
x = NULL,
y = "Dynastic rate (%)"
) +
theme_minimal(base_size = 11) +
theme(axis.text.x = element_text(angle = 40, hjust = 1, size = 8),
strip.text = element_text(face = "bold"))Figure 18: Dynastic rate by country and regime type — South Asia
findings <- tibble(
`#` = 1:8,
Finding = c(
paste0("Globally, ", round(mean(df$dynasty==1)*100,1),
"% of country-years had a dynastic leader (1946–2020)."),
"South Asia has the highest regional dynastic rate, far exceeding the global average.",
"Royal dictatorships show the highest dynastic rates across regime types; parliamentary democracies the lowest among democratic systems.",
"Paternal inheritance (father as predecessor) dominates globally — over two-thirds of dynastic leaders had a father in politics.",
"Female leaders are substantially more likely to be dynastic than male leaders, consistent with the 'dynastic gateway' hypothesis.",
"The gender gap in dynastic rates has narrowed over time but remains pronounced in South Asia.",
"In South Asia, father-to-child transmission accounts for the majority of dynastic ties, with spousal ties (husband as predecessor) prominent in several countries.",
"Dynastic rates in South Asia remain persistently high even under democratic regimes, distinguishing it from most other regions."
)
)
findings %>%
kbl(caption = "Table 4: Key descriptive findings") %>%
kable_styling(bootstrap_options = c("striped","hover"), full_width = TRUE) %>%
column_spec(1, bold = TRUE, width = "3em") %>%
column_spec(2, width = "90%")| # | Finding |
|---|---|
| 1 | Globally, 26.3% of country-years had a dynastic leader (1946–2020). |
| 2 | South Asia has the highest regional dynastic rate, far exceeding the global average. |
| 3 | Royal dictatorships show the highest dynastic rates across regime types; parliamentary democracies the lowest among democratic systems. |
| 4 | Paternal inheritance (father as predecessor) dominates globally — over two-thirds of dynastic leaders had a father in politics. |
| 5 | Female leaders are substantially more likely to be dynastic than male leaders, consistent with the ‘dynastic gateway’ hypothesis. |
| 6 | The gender gap in dynastic rates has narrowed over time but remains pronounced in South Asia. |
| 7 | In South Asia, father-to-child transmission accounts for the majority of dynastic ties, with spousal ties (husband as predecessor) prominent in several countries. |
| 8 | Dynastic rates in South Asia remain persistently high even under democratic regimes, distinguishing it from most other regions. |
Dataset: Global Dynasties Dataset (GDD), sheet NEW Jan-Feb 2026 Variables derived from TED/FLN: Nooruddin et al. (2022), Harvard Dataverse doi:10.7910/DVN/UXFY88 Analysis software: R R version 4.3.0 (2023-04-21 ucrt); packages: tidyverse, readxl, kableExtra, RColorBrewer, scales Author: Arslan Niyazi · RPubs
## R version 4.3.0 (2023-04-21 ucrt)
## Platform: x86_64-w64-mingw32/x64 (64-bit)
## Running under: Windows 11 x64 (build 26200)
##
## Matrix products: default
##
##
## locale:
## [1] LC_COLLATE=English_India.utf8 LC_CTYPE=English_India.utf8
## [3] LC_MONETARY=English_India.utf8 LC_NUMERIC=C
## [5] LC_TIME=English_India.utf8
##
## time zone: Asia/Calcutta
## tzcode source: internal
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] RColorBrewer_1.1-3 kableExtra_1.4.0 scales_1.4.0 lubridate_1.9.4
## [5] forcats_1.0.1 stringr_1.6.0 dplyr_1.1.4 purrr_1.0.4
## [9] readr_2.1.5 tidyr_1.3.1 tibble_3.2.1 ggplot2_4.0.1
## [13] tidyverse_2.0.0 readxl_1.4.5
##
## loaded via a namespace (and not attached):
## [1] sass_0.4.9 utf8_1.2.3 generics_0.1.4 xml2_1.3.8
## [5] lattice_0.21-8 stringi_1.8.7 hms_1.1.3 digest_0.6.37
## [9] magrittr_2.0.3 evaluate_1.0.5 grid_4.3.0 timechange_0.3.0
## [13] fastmap_1.2.0 Matrix_1.5-4 cellranger_1.1.0 jsonlite_2.0.0
## [17] mgcv_1.8-42 fansi_1.0.4 viridisLite_0.4.2 jquerylib_0.1.4
## [21] cli_3.6.1 rlang_1.1.1 splines_4.3.0 withr_3.0.2
## [25] cachem_1.1.0 yaml_2.3.10 tools_4.3.0 tzdb_0.5.0
## [29] vctrs_0.6.5 R6_2.6.1 lifecycle_1.0.5 pkgconfig_2.0.3
## [33] pillar_1.9.0 bslib_0.9.0 gtable_0.3.6 glue_1.6.2
## [37] systemfonts_1.2.2 xfun_0.52 tidyselect_1.2.1 rstudioapi_0.17.1
## [41] knitr_1.50 farver_2.1.2 nlme_3.1-162 htmltools_0.5.8.1
## [45] labeling_0.4.3 rmarkdown_2.30 svglite_2.1.3 compiler_4.3.0
## [49] S7_0.2.0