TL;DR: I attempted to replicate the famous "Democracy Causes Growth" finding using updated data through 2023. My analysis using standard Fixed Effects and Polity V scores found no statistically significant impact, suggesting the "Democracy Dividend" is highly sensitive to how democracy is measured. Features: Stata automation, kountry cleaning, and dynamic event-study plots.

Why This Question Matters

You've probably heard it before:
"Democracy is good for economic development." But is it?

This isn't just an academic question. International organizations regularly condition aid on political reforms. Policymakers debate whether authoritarian regimes can "develop first, democratize later" (see: China, Singapore). And economists have been arguing about this for decades.

The Inspiration

This project was inspired by Acemoglu et al. (2019), whose influential paper "Democracy Does Cause Growth" argued that democratization significantly increases GDP per capita by roughly 20% in the long run. Their findings challenged earlier skeptical views and sparked renewed debate in development economics.

Motivated by the influential work, I attempted a simplified replication of their baseline results using updated data from the Penn World Table (11.0) and the Polity V project (1960–2023).

I replicated their dynamic panel model specification (Fixed Effects) to control for GDP dynamics. However, unlike the original authors who found a significant positive effect using a custom binary indicator, my analysis using the standard continuous Polity score yielded a null result. This project served as a practical exercise in panel data econometrics and demonstrates how methodological choices—specifically the measurement of institutions—can significantly alter empirical findings.

The Data: Building a 60-Year Global Panel

What I Used

I combined two powerhouse datasets:

1. Penn World Table 11.0 (Economic Data)

  • Real GDP, population, capital stock, and productivity

  • Covers 180+ countries from 1960-2023

  • The gold standard for cross-country growth comparisons

2. Polity V Project (Political Data)

  • Democracy scores ranging from -10 (full autocracy) to +10 (full democracy)

  • Tracks regime changes, transitions, and instability

  • Widely used in political economy research

The Challenge: Making Countries "Talk to Each Other"

Here's a problem every empirical researcher faces:

  • Penn World Table calls it "Korea, Rep."

  • Polity calls it "South Korea"

  • World Bank calls it "Korea (South)"

If you merge on country names directly, you lose data. The solution? ISO 3166 Country Codes — a universal standard that converts everything to three-letter codes (e.g., "KOR").

In Stata, I used the kountry command to standardize all country names:

* Convert messy country names to ISO codes
kountry country_raw, from(other) stuck
rename _ISO3N_ iso_num
kountry iso_num, from(iso3n) to(iso3c)
rename _ISO3C_ iso_code

Key Learning: Real-world data is messy. Data cleaning isn't glamorous, but it's where most research time goes — and where mistakes hide.

The Method: From Correlation to Causation

Step 1: Understanding the Data Structure

I wasn't working with a simple spreadsheet. This is panel data — multiple countries observed over multiple years. That structure matters because:

  • Between variation: Are democratic countries richer than autocracies? (Cross-country comparison)

  • Within variation: When a country democratizes, does it grow faster? (Time-series comparison)

Growth theory cares about the within variation. We want to know if changing institutions affects changes in GDP.

To tell Stata this is panel data, I used:

encode iso_code, gen(country_id)
xtset country_id year

This command is deceptively powerful. It tells Stata that "USA 2000" comes after "USA 1999" — enabling time-based operations such as lags and differences.

Step 2: Creating Lags (The "Time Machine")

A massive problem in economics: reverse causality. Maybe rich countries simply choose to become democratic, not the other way around.

To address this, I use lagged democracy scores:

gen lag_polity = L.polity2

Now I'm asking: Does democracy last year predict GDP this year? The timing helps establish causal direction.

Step 3: Controlling for Omitted Variables

Here's where econometrics gets interesting. If I just run a simple regression:

reg ln_gdp_pc lag_polity

...I'd find that democratic countries are richer. But is that because of democracy? Or because they're in Europe? Or have better geography? Or inherited strong legal systems?

The solution: Fixed Effects

xtreg ln_gdp_pc lag_polity ln_capital_pc i.year, fe vce(cluster country_id)

This command does something magical: it mathematically removes each country's average from the analysis. I'm no longer comparing the USA to Chad. I'm comparing the USA to itself at different points in time.

Fixed effects eliminate:

  • Geographic advantages (mountains, coastlines, natural resources)

  • Cultural factors (work ethic, trust, social norms)

  • Anything else that's constant within a country

The i.year term adds time fixed effects — controlling for global shocks like the 2008 financial crisis or COVID-19.

Table 1: Effect of Democracy on GDP per Capita

Dependent Variable: Log GDP per Capita

Variable (1) OLS (2) Fixed Effects
Democracy (t-1) -0.002 -0.004
(0.004) (0.003)
Capital Stock (t-1) 0.705*** 0.570***
(0.025) (0.045)
Observations 7,695 7,695
Adj. R-Squared 0.854 0.724

Note: Standard errors clustered by country are in parentheses. *** p<0.01.

The Results: What the Data Actually Says

Finding #1: No Immediate Effect

Here's what I found when looking at the one-year lag:

Coefficient on Democracy (t-1): -0.004

Standard Error: (0.003)

Statistical Significance: None (p > 0.10)

Translation: When a country's democracy score improves by 1 point, GDP per capita changes by -0.4% the next year — but this estimate is so noisy that it's statistically indistinguishable from zero.

In other words: declaring a democracy doesn't magically boost GDP overnight.

Finding #2: Does the Effect Emerge Over Time?

Maybe democracy takes time to work? Perhaps institutions need years to stabilize, courts need to gain credibility, and property rights need to solidify.

I tested this using dynamic lags — checking the effect 1, 3, 5, and 10 years after a regime change:

forvalues k = 1/10 {
    gen lag_polity_`k' = L`k'.polity2
}

xtreg ln_gdp_pc lag_polity_1 lag_polity_3 lag_polity_5 lag_polity_10 
      ln_capital_pc i.year, fe vce(cluster country_id)

Then I visualized the results using a coefficient plot:

The verdict? Even 10 years out, the confidence intervals cross zero. I cannot statistically claim that democracy boosts growth in the long run — at least not in this specification.

Why Null Results Matter

This might seem disappointing, but it's actually an important finding. It aligns with academic research showing that:

  • Measurement Matters: The "Democracy Dividend" is highly sensitive to how we define democracy. While Acemoglu et al. (2019) found positive effects using a custom-built binary indicator, my analysis used the standard continuous Polity V score. My null result supports the hypothesis that standard democracy indices may be too "noisy" to capture economic impacts without more advanced filtering.

  • The "Skeptical View" Exists: My findings align with prominent economists like Robert Barro and Gerring et al., who have historically argued that democracy’s net effect on growth is often null or even slightly negative due to the costs of redistribution and instability.

  • The "J-Curve" Effect: Transitions to democracy are often chaotic. My Fixed Effects model captures the immediate and medium-term volatility (the "dip") that often cancels out growth gains in the first decade.

  • The Post-2010 Era: By extending the dataset to 2023, this project includes the recent period of "democratic stagnation" and global instability, suggesting that the economic advantage of democratic institutions may be evolving in the modern era.

The Code (For the Technically Curious)

Want to replicate this analysis? Here's the core workflow:

1. Data Cleaning (01_clean_[data.do])

* Set working directory
global path "path/to/project"
cd "$path"

* Clean Polity data
import excel "data/raw/p5v2018.xls", firstrow clear
keep country year polity2
replace polity2 = . if polity2 < -10
kountry country, from(other) to(iso3c)
save "data/clean/polity_clean.dta", replace

* Clean Penn World Table
use "data/raw/pwt110.dta", clear
gen gdp_pc = rgdpe / pop
gen ln_gdp_pc = log(gdp_pc)
gen ln_capital_pc = log(cn / pop)
save "data/clean/pwt_clean.dta", replace

2. Merging (02_[merge.do])

use "data/clean/pwt_clean.dta", clear
merge 1:1 iso_code year using "data/clean/polity_clean.dta"
keep if _merge == 3

encode iso_code, gen(country_id)
xtset country_id year

gen lag_polity = L.polity2
save "data/clean/growth_panel.dta", replace

3. Analysis (03_[analysis.do])

use "data/clean/growth_panel.dta", clear

* Naive OLS
reg ln_gdp_pc lag_polity ln_capital_pc, vce(cluster country_id)

* Fixed Effects (the model we trust)
xtreg ln_gdp_pc lag_polity ln_capital_pc i.year, fe vce(cluster country_id)

4. Visualization (04_[causal.do](<http://causal.do>))

forvalues k = 1/10 {
    gen lag_polity_`k' = L`k'.polity2
}

xtreg ln_gdp_pc lag_polity_1 lag_polity_3 lag_polity_5 lag_polity_10 
      ln_capital_pc i.year, fe vce(cluster country_id)

coefplot, keep(lag_polity_*) vertical yline(0)

Next Steps & Extensions

This project could be extended in several directions:

  • Heterogeneous effects: Does democracy matter more for low-income vs. high-income countries?

  • Alternative measures: Use Freedom House scores or World Bank governance indicators

  • Mechanisms: Test specific channels (property rights, corruption, trade openness)

  • Event studies: Focus on specific democratic transitions (e.g., post-Soviet states, Arab Spring)

Technical Appendix

Data Sources:

Software:

  • Stata 17

  • Key packages: kountry, estout, coefplot

Replication:

Full code and data available on my GitHub: https://github.com/junseoul0163/institutions_growth.git

Questions or feedback? I'd love to hear your thoughts — especially if you've worked on similar projects or have suggestions for improving the analysis. Feel free to reach out!

Keep Reading