-------------------------------------------------------------------------------
      name:  <unnamed>
       log:  /Users/carlosmendez/Documents/GitHub/starter-academic-v501/content
> /post/stata_convergence2/analysis.log
  log type:  text
 opened on:  30 Apr 2026, 12:37:52

. 
. display as text ""


. display as text "============================================================
> ===="
================================================================

. display as text "  Converging to Convergence"
  Converging to Convergence

. display as text "  Kremer, Willis, and You (2021) -- Key Ideas Tutorial"
  Kremer, Willis, and You (2021) -- Key Ideas Tutorial

. display as text "============================================================
> ===="
================================================================

. display as text ""


. 
. 
. *============================================================================
> ===
. * SECTION 0: SETUP AND DATA PREPARATION
. *
. *   We load the Kremer et al. (2021) replication dataset, which contains
. *   GDP per capita and 50+ growth correlates for ~170 countries, 1960-2018.
. *   The dataset already excludes very small countries (pop < 200,000) and
. *   those heavily reliant on natural resource rents (> 75% of GDP).
. *============================================================================
> ===
. 
. display as text ""


. display as text "------------------------------------------------------------
> ----"
----------------------------------------------------------------

. display as text "  SECTION 0: SETUP AND DATA PREPARATION"
  SECTION 0: SETUP AND DATA PREPARATION

. display as text "------------------------------------------------------------
> ----"
----------------------------------------------------------------

. 
. * ── Load the main dataset ──
. use "main_data.dta", clear

. 
. * ── Describe the panel structure ──
. display as text ""


. display as text "Panel structure:"
Panel structure:

. codebook country_id, compact

Variable      Obs Unique      Mean  Min  Max  Label
-------------------------------------------------------------------------------
country_id  10092    174  108.2241    2  218  group(code)
-------------------------------------------------------------------------------

. tab year if loggdp != ., missing

       year |      Freq.     Percent        Cum.
------------+-----------------------------------
       1960 |        109        1.31        1.31
       1961 |        110        1.32        2.63
       1962 |        111        1.33        3.96
       1963 |        111        1.33        5.30
       1964 |        111        1.33        6.63
       1965 |        111        1.33        7.96
       1966 |        111        1.33        9.29
       1967 |        111        1.33       10.63
       1968 |        111        1.33       11.96
       1969 |        111        1.33       13.29
       1970 |        137        1.65       14.94
       1971 |        137        1.65       16.58
       1972 |        137        1.65       18.23
       1973 |        137        1.65       19.87
       1974 |        137        1.65       21.52
       1975 |        137        1.65       23.16
       1976 |        137        1.65       24.81
       1977 |        137        1.65       26.45
       1978 |        137        1.65       28.10
       1979 |        137        1.65       29.74
       1980 |        137        1.65       31.39
       1981 |        137        1.65       33.03
       1982 |        137        1.65       34.68
       1983 |        137        1.65       36.32
       1984 |        137        1.65       37.97
       1985 |        137        1.65       39.61
       1986 |        137        1.65       41.26
       1987 |        137        1.65       42.90
       1988 |        137        1.65       44.55
       1989 |        138        1.66       46.21
       1990 |        160        1.92       48.13
       1991 |        160        1.92       50.05
       1992 |        160        1.92       51.97
       1993 |        160        1.92       53.89
       1994 |        160        1.92       55.81
       1995 |        160        1.92       57.73
       1996 |        160        1.92       59.65
       1997 |        160        1.92       61.58
       1998 |        160        1.92       63.50
       1999 |        160        1.92       65.42
       2000 |        160        1.92       67.34
       2001 |        160        1.92       69.26
       2002 |        160        1.92       71.18
       2003 |        160        1.92       73.10
       2004 |        160        1.92       75.02
       2005 |        160        1.92       76.95
       2006 |        160        1.92       78.87
       2007 |        160        1.92       80.79
       2008 |        160        1.92       82.71
       2009 |        160        1.92       84.63
       2010 |        160        1.92       86.55
       2011 |        160        1.92       88.47
       2012 |        160        1.92       90.39
       2013 |        160        1.92       92.32
       2014 |        160        1.92       94.24
       2015 |        160        1.92       96.16
       2016 |        160        1.92       98.08
       2017 |        160        1.92      100.00
------------+-----------------------------------
      Total |      8,328      100.00

. summarize year

    Variable |        Obs        Mean    Std. dev.       Min        Max
-------------+---------------------------------------------------------
        year |     10,092      1988.5     16.7415       1960       2017

. display as text "Years covered: " r(min) " to " r(max)
Years covered: 1960 to 2017

. 
. * Count unique countries with GDP data
. preserve

. keep if loggdp != .
(1,764 observations deleted)

. duplicates drop country_id, force

Duplicates in terms of country_id

(8,168 observations deleted)

. count
  160

. local n_countries = r(N)

. display as text "Countries with GDP data: `n_countries'"
Countries with GDP data: 160

. restore

. 
. * ── Display key variables ──
. display as text ""


. display as text "Key income variables:"
Key income variables:

. summarize loggdp loggdp_growth loggdp_growth_10

    Variable |        Obs        Mean    Std. dev.       Min        Max
-------------+---------------------------------------------------------
      loggdp |      8,328    8.712741    1.186573   5.368557   12.61823
loggdp_gr~10 |      6,888    1.962031     2.78512  -12.33628   22.12787
loggdp_gr~10 |      6,888    1.962031     2.78512  -12.33628   22.12787

. 
. * ── Define variable groups (following the paper's classification) ──
. *   A: Solow determinants -- fundamental steady-state determinants
. *   B: Short-run correlates -- policies/institutions that can change quickly
. *   C: Long-run correlates -- geography and historical institutions (time-inv
> ariant)
. *   D: Culture -- Hofstede cultural dimensions (time-invariant)
. 
. local solow investment population_growth barrolee2060

. 
. local short_run edugap laborparti polity2 FH_political_rights FH_civil_libert
> ies ///
>         totalscore WGI_pol_stability WGI_gov_effectiveness WGI_regulatory_qua
> lity ///
>         WGI_rule_law WGI_control_corruption overallscore governmentintegrity 
> ///
>         propertyrights businessfreedom tariff_all_ew tariff_all_vw inc_tax //
> /
>         sev_tax gov_spending taxburden pri_inv miliexp inflation lvaw_garriga
>  ///
>         WDI_credit credit financialfreedom investmentfreedom

. 
. local long_run population_1900 legor_uk legor_fr legor_ge legor_sc legor_so /
> //
>         logem4 meantemp lt100km avelf landlock lat_abst tropics

. 
. local culture VSM_power_dist VSM_individualism VSM_masculinity ///
>         VSM_uncertain_avoid VSM_indulgence VSM_longterm

. 
. local total `solow' `short_run'

. local total_plus_long_run `total' `long_run' `culture'

. 
. display as text ""


. display as text "Variable groups defined:"
Variable groups defined:

. display as text "  Solow fundamentals: `solow'"
  Solow fundamentals: investment population_growth barrolee2060

. display as text "  Short-run correlates: " wordcount("`short_run'") " variabl
> es"
  Short-run correlates: 29 variables

. display as text "  Long-run correlates: " wordcount("`long_run'") " variables
> "
  Long-run correlates: 13 variables

. display as text "  Culture: " wordcount("`culture'") " variables"
  Culture: 6 variables

. 
. * ── Merge regional classification from WDI ──
. preserve

. import delimited "WDICountry.csv", clear varnames(1)
(encoding automatically selected: UTF-8)
Note: Unmatched quote while processing row 74; this can be due to a
    formatting problem in the file or because a quoted data element spans
    multiple lines. You should carefully inspect your data after importing.
    Consider using option bindquote(strict) if quoted data spans multiple
    lines or option bindquote(nobind) if quotes are not used for binding
    data.
Note: Unmatched quote while processing row 80; this can be due to a
    formatting problem in the file or because a quoted data element spans
    multiple lines. You should carefully inspect your data after importing.
    Consider using option bindquote(strict) if quoted data spans multiple
    lines or option bindquote(nobind) if quotes are not used for binding
    data.
(31 vars, 267 obs)

. * The first column may have a BOM character
. capture rename ïcountrycode code

. capture rename countrycode code

. drop if tablename == ""
(4 observations deleted)

. * Fix string type
. gen str code_str = code

. replace code = ""
(263 real changes made)

. compress code
  variable code was strL now str1
  (1,841 bytes saved)

. replace code = code_str
variable code was str1 now str3
(263 real changes made)

. drop code_str

. keep code region

. tempfile regions

. save `regions'
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.000003 saved
    as .dta format

. restore

. 
. merge m:1 code using `regions'

    Result                      Number of obs
    -----------------------------------------
    Not matched                            89
        from master                         0  (_merge==1)
        from using                         89  (_merge==2)

    Matched                            10,092  (_merge==3)
    -----------------------------------------

. keep if _merge == 3 | _merge == 1
(89 observations deleted)

. drop _merge

. 
. * Create region groups (following the reference code)
. gen region_group = 1 if region == "Europe & Central Asia" | region == "North 
> America"
(7,192 missing values generated)

. replace region_group = 2 if region == "Latin America & Caribbean"
(1,624 real changes made)

. replace region_group = 3 if region == "East Asia & Pacific" | region == "Sout
> h Asia"
(1,856 real changes made)

. replace region_group = 4 if region == "Sub-Saharan Africa"
(2,668 real changes made)

. label define reg_lbl 1 "Europe, C. Asia & N. America" 2 "Latin America & Cari
> bbean" ///
>     3 "South & East Asia" 4 "Sub-Saharan Africa"

. label values region_group reg_lbl

. 
. display as text ""


. display as text "Regional distribution:"
Regional distribution:

. tab region_group if loggdp != . & year == 2000

                region_group |      Freq.     Percent        Cum.
-----------------------------+-----------------------------------
Europe, C. Asia & N. America |         49       34.27       34.27
   Latin America & Caribbean |         26       18.18       52.45
           South & East Asia |         25       17.48       69.93
          Sub-Saharan Africa |         43       30.07      100.00
-----------------------------+-----------------------------------
                       Total |        143      100.00

. 
. * ── Export data summary ──
. preserve

. collapse (count) n_countries = loggdp (mean) mean_loggdp = loggdp ///
>     (sd) sd_loggdp = loggdp, by(year)

. export delimited using "convergence2_data_summary.csv", replace
(file convergence2_data_summary.csv not found)
file convergence2_data_summary.csv saved

. display as text ""


. display as text "Exported: convergence2_data_summary.csv"
Exported: convergence2_data_summary.csv

. restore

. 
. * ── Save working dataset with regions ──
. save "convergence2_working.dta", replace
(file convergence2_working.dta not found)
file convergence2_working.dta saved

. 
. 
. *============================================================================
> ===
. * SECTION 1: THE SIMPLEST TEST -- HAS THE WORLD BEEN CONVERGING?
. *
. *   We start with the most basic visual test: scatter plots of 10-year
. *   growth versus initial income, decade by decade. Convergence means a
. *   NEGATIVE slope -- poorer countries (lower log GDP) growing faster.
. *
. *   Key question: Does the relationship between income and growth change
. *   over time?
. *============================================================================
> ===
. 
. display as text ""


. display as text "------------------------------------------------------------
> ----"
----------------------------------------------------------------

. display as text "  SECTION 1: SCATTER PLOTS BY DECADE"
  SECTION 1: SCATTER PLOTS BY DECADE

. display as text "------------------------------------------------------------
> ----"
----------------------------------------------------------------

. 
. use "convergence2_working.dta", clear

. 
. * ── Restrict to decade starting years ──
. keep if inlist(year, 1960, 1970, 1980, 1990, 2000, 2007)
(9,048 observations deleted)

. 
. * ── Run regressions and create scatter plots for each decade ──
. local decade_list "1960 1970 1980 1990 2000 2007"

. local fig_num = 1

. 
. foreach yr of local decade_list {
  2.     * Run the regression
.     quietly reg loggdp_growth_10 loggdp if year == `yr', robust
  3.     local b_`yr' = _b[loggdp]
  4.     local se_`yr' = _se[loggdp]
  5.     local p_`yr' = 2 * ttail(e(df_r), abs(_b[loggdp] / _se[loggdp]))
  6.     local n_`yr' = e(N)
  7. 
.     * Determine the end year for the label
.     local end_yr = `yr' + 10
  8.     if `yr' == 2007 local end_yr = 2017
  9. 
.     * Create scatter plot with fitted line
.     twoway (scatter loggdp_growth_10 loggdp if year == `yr' & abs(loggdp_grow
> th_10) < 10, ///
>             msize(small) mcolor("106 155 204") msymbol(circle)) ///
>            (lfit loggdp_growth_10 loggdp if year == `yr', ///
>             lwidth(medthick) lcolor("20 20 19")), ///
>         xtitle("Log GDP per capita in `yr'") ///
>         ytitle("Avg annual growth (%)") ///
>         title("`yr'-`end_yr'", size(medium)) ///
>         legend(off) graphregion(color(white)) ///
>         name(G`fig_num', replace)
 10. 
.     display as text "  `yr'-`end_yr': beta = " %6.3f `b_`yr'' ///
>         " (SE = " %5.3f `se_`yr'' ", p = " %5.3f `p_`yr'' ", N = " `n_`yr'' "
> )"
 11. 
.     local fig_num = `fig_num' + 1
 12. }
  1960-1970: beta =  0.532 (SE = 0.191, p = 0.006, N = 109)
  1970-1980: beta = -0.075 (SE = 0.292, p = 0.799, N = 137)
  1980-1990: beta =  0.106 (SE = 0.246, p = 0.667, N = 137)
  1990-2000: beta = -0.127 (SE = 0.220, p = 0.564, N = 160)
  2000-2010: beta = -0.651 (SE = 0.168, p = 0.000, N = 160)
  2007-2017: beta = -0.764 (SE = 0.146, p = 0.000, N = 160)

. 
. * ── Combine into one figure ──
. graph combine G1 G2 G3 G4 G5 G6, rows(2) cols(3) ///
>     graphregion(color(white)) ///
>     title("Income Convergence by Decade", size(medium))

. graph export "stata_convergence2_scatter_by_decade.png", replace width(2400)
(file stata_convergence2_scatter_by_decade.png not found)
file stata_convergence2_scatter_by_decade.png written in PNG format

. graph drop G1 G2 G3 G4 G5 G6

. 
. display as text ""


. display as text "Exported: stata_convergence2_scatter_by_decade.png"
Exported: stata_convergence2_scatter_by_decade.png

. display as text ""


. display as text "INTERPRETATION: The slope shifts from flat/positive (1960s-1
> 980s)"
INTERPRETATION: The slope shifts from flat/positive (1960s-1980s)

. display as text "to clearly negative (2000s). Convergence emerged around 2000
> ."
to clearly negative (2000s). Convergence emerged around 2000.

. 
. * ── Export beta by decade ──
. preserve

. clear

. set obs 6
Number of observations (_N) was 0, now 6.

. gen decade = .
(6 missing values generated)

. gen beta = .
(6 missing values generated)

. gen se = .
(6 missing values generated)

. gen pval = .
(6 missing values generated)

. gen n_obs = .
(6 missing values generated)

. local i = 1

. foreach yr of local decade_list {
  2.     replace decade = `yr' in `i'
  3.     replace beta = `b_`yr'' in `i'
  4.     replace se = `se_`yr'' in `i'
  5.     replace pval = `p_`yr'' in `i'
  6.     replace n_obs = `n_`yr'' in `i'
  7.     local i = `i' + 1
  8. }
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)

. export delimited using "convergence2_beta_by_decade.csv", replace
(file convergence2_beta_by_decade.csv not found)
file convergence2_beta_by_decade.csv saved

. display as text "Exported: convergence2_beta_by_decade.csv"
Exported: convergence2_beta_by_decade.csv

. restore

. 
. 
. *============================================================================
> ===
. * SECTION 2: THE TREND IN BETA-CONVERGENCE
. *
. *   The scatter plots show snapshots. Now we track the convergence
. *   coefficient CONTINUOUSLY over time. This is the paper's key
. *   innovation: studying the TREND in convergence, not just testing
. *   whether convergence exists at one point in time.
. *
. *   Specification (Equation 1 in the paper):
. *     Growth_{i,t+10} = beta_t * log(GDPpc_{i,t}) + mu_t + epsilon_{i,t}
. *   where beta_t is allowed to vary by year.
. *============================================================================
> ===
. 
. display as text ""


. display as text "------------------------------------------------------------
> ----"
----------------------------------------------------------------

. display as text "  SECTION 2: THE TREND IN BETA-CONVERGENCE"
  SECTION 2: THE TREND IN BETA-CONVERGENCE

. display as text "------------------------------------------------------------
> ----"
----------------------------------------------------------------

. 
. use "convergence2_working.dta", clear

. 
. * ── Estimate year-by-year beta coefficients ──
. *   This regression interacts log GDP with year dummies, giving a
. *   separate convergence coefficient for each year.
. local y loggdp

. quietly areg `y'_growth_10 c.`y'#i.year, absorb(year) robust cluster(country_
> id)

. 
. * Extract coefficients and standard errors
. local b1960_`y' = _b[1960b.year#c.`y']

. local s1960_`y' = _se[1960b.year#c.`y']

. foreach i of numlist 1961(1)2018 {
  2.     capture local b`i'_`y' = _b[`i'.year#c.`y']
  3.     capture local s`i'_`y' = _se[`i'.year#c.`y']
  4. }

. 
. * ── Save to a dataset for plotting ──
. preserve

. clear

. set obs 50
Number of observations (_N) was 0, now 50.

. gen year = 1959 + _n

. gen beta = .
(50 missing values generated)

. gen se = .
(50 missing values generated)

. foreach i of numlist 1960(1)2009 {
  2.     capture replace beta = `b`i'_`y'' if year == `i'
  3.     capture replace se = `s`i'_`y'' if year == `i'
  4. }

. recode beta 0 = .
(1 changes made to beta)

. recode se 0 = .
(1 changes made to se)

. 
. gen ci_upper = beta + 1.96 * se
(1 missing value generated)

. gen ci_lower = beta - 1.96 * se
(1 missing value generated)

. 
. * ── Plot the beta trend ──
. twoway (rarea ci_upper ci_lower year if beta != ., ///
>         fcolor("106 155 204%30") lwidth(none)) ///
>        (line beta year if beta != ., lcolor("106 155 204") lwidth(medthick)) 
> ///
>        (function y = 0, range(1960 2009) lcolor("217 119 87") lpattern(dash) 
> lwidth(thin)), ///
>     xtitle("Year") ytitle("Beta-convergence coefficient") ///
>     title("Trend in Beta-Convergence, 1960-2007", size(medium)) ///
>     legend(off) graphregion(color(white)) ///
>     note("Negative beta = convergence (poorer countries grow faster)" ///
>          "Shaded area = 95% confidence interval", size(vsmall))

. graph export "stata_convergence2_beta_trend.png", replace width(2400)
(file stata_convergence2_beta_trend.png not found)
file stata_convergence2_beta_trend.png written in PNG format

. 
. display as text ""


. display as text "Exported: stata_convergence2_beta_trend.png"
Exported: stata_convergence2_beta_trend.png

. 
. * Export the trend data
. export delimited using "convergence2_beta_trend.csv", replace
(file convergence2_beta_trend.csv not found)
file convergence2_beta_trend.csv saved

. display as text "Exported: convergence2_beta_trend.csv"
Exported: convergence2_beta_trend.csv

. restore

. 
. * ── Table 1 replication: convergence regressions ──
. display as text ""


. display as text "TABLE 1: CONVERGING TO CONVERGENCE"
TABLE 1: CONVERGING TO CONVERGENCE

. display as text "─────────────────────────────────────"
─────────────────────────────────────

. 
. use "convergence2_working.dta", clear

. keep if inlist(year, 1960, 1970, 1980, 1990, 2000, 2007)
(9,048 observations deleted)

. 
. * (1) Pooled beta
. estimates clear

. quietly eststo pooled: areg loggdp_growth_10 loggdp, absorb(year) robust clus
> ter(country_id)

. estadd local year_FE "Y"

added macro:
            e(year_FE) : "Y"

. 
. * (2) Beta with linear trend
. gen loggdp_X_year = loggdp * (year - 1960)
(181 missing values generated)

. label var loggdp_X_year "log(GDPpc) x (Year-1960)"

. quietly eststo trend: areg loggdp_growth_10 loggdp loggdp_X_year, absorb(year
> ) robust cluster(country_id)

. estadd local year_FE "Y"

added macro:
            e(year_FE) : "Y"

. 
. * (3) Beta by decade
. foreach dec in 60 70 80 90 00 07 {
  2.     local yr_val = 1900 + `dec'
  3.     if `dec' == 0 | `dec' < 10 {
  4.         local yr_val = 2000 + `dec'
  5.     }
  6.     if `dec' == 100 local yr_val = 2000
  7.     if `dec' == 107 local yr_val = 2007
  8.     gen I`dec's = (year == `yr_val')
  9.     gen loggdp_I`dec's = loggdp * I`dec's
 10. }
(181 missing values generated)
(181 missing values generated)
(181 missing values generated)
(181 missing values generated)
(181 missing values generated)
(181 missing values generated)

. * Fix the year values
. capture drop I60s I70s I80s I90s I00s I07s loggdp_I60s loggdp_I70s loggdp_I80
> s loggdp_I90s loggdp_I00s loggdp_I07s

. gen I60s = (year == 1960)

. gen I70s = (year == 1970)

. gen I80s = (year == 1980)

. gen I90s = (year == 1990)

. gen I00s = (year == 2000)

. gen I07s = (year == 2007)

. gen loggdp_I60s = loggdp * I60s
(181 missing values generated)

. gen loggdp_I70s = loggdp * I70s
(181 missing values generated)

. gen loggdp_I80s = loggdp * I80s
(181 missing values generated)

. gen loggdp_I90s = loggdp * I90s
(181 missing values generated)

. gen loggdp_I00s = loggdp * I00s
(181 missing values generated)

. gen loggdp_I07s = loggdp * I07s
(181 missing values generated)

. label var loggdp_I60s "log(GDPpc) x 1960s"

. label var loggdp_I70s "log(GDPpc) x 1970s"

. label var loggdp_I80s "log(GDPpc) x 1980s"

. label var loggdp_I90s "log(GDPpc) x 1990s"

. label var loggdp_I00s "log(GDPpc) x 2000s"

. label var loggdp_I07s "log(GDPpc) x 2007s"

. 
. quietly eststo decades: areg loggdp_growth_10 loggdp_I60s loggdp_I70s loggdp_
> I80s ///
>     loggdp_I90s loggdp_I00s loggdp_I07s, absorb(year) robust cluster(country_
> id)

. estadd local year_FE "Y"

added macro:
            e(year_FE) : "Y"

. 
. esttab pooled trend decades, ///
>     keep(loggdp loggdp_X_year loggdp_I60s loggdp_I70s loggdp_I80s ///
>          loggdp_I90s loggdp_I00s loggdp_I07s) ///
>     se star(* 0.10 ** 0.05 *** 0.01) ///
>     title("Table 1: Converging to Convergence") ///
>     mtitles("Pooled" "Trend" "By Decade") ///
>     scalars("year_FE Year FE") ///
>     b(%9.3f) se(%9.3f) compress

Table 1: Converging to Convergence
-------------------------------------------------
                 (1)          (2)          (3)   
              Pooled        Trend    By Decade   
-------------------------------------------------
loggdp        -0.270**      0.449**              
             (0.118)      (0.224)                

loggdp_X~r                 -0.025***             
                          (0.006)                

loggdp~60s                               0.532***
                                       (0.191)   

loggdp~70s                              -0.075   
                                       (0.293)   

loggdp~80s                               0.106   
                                       (0.246)   

loggdp~90s                              -0.127   
                                       (0.221)   

loggdp~00s                              -0.651***
                                       (0.168)   

loggdp~07s                              -0.764***
                                       (0.146)   
-------------------------------------------------
N                863          863          863   
Year FE            Y            Y            Y   
-------------------------------------------------
Standard errors in parentheses
* p<0.10, ** p<0.05, *** p<0.01

. 
. display as text ""


. display as text "INTERPRETATION: The trend coefficient (-0.025***) means that
>  the"
INTERPRETATION: The trend coefficient (-0.025***) means that the

. display as text "convergence coefficient has decreased by 0.025 per year sinc
> e 1960."
convergence coefficient has decreased by 0.025 per year since 1960.

. display as text "By decade, beta shifts from +0.53 (1960s, divergence) to -0.
> 76 (2007+)."
By decade, beta shifts from +0.53 (1960s, divergence) to -0.76 (2007+).

. 
. 
. *============================================================================
> ===
. * SECTION 3: SIGMA-CONVERGENCE
. *
. *   Beta-convergence asks: do poor countries grow faster?
. *   Sigma-convergence asks: is the SPREAD of income narrowing?
. *
. *   The two concepts are related but not identical. Beta-convergence is
. *   NECESSARY but NOT SUFFICIENT for sigma-convergence, because random
. *   shocks can increase dispersion even if poor countries grow faster
. *   on average (Young, Higgins, and Levy 2008).
. *============================================================================
> ===
. 
. display as text ""


. display as text "------------------------------------------------------------
> ----"
----------------------------------------------------------------

. display as text "  SECTION 3: SIGMA-CONVERGENCE"
  SECTION 3: SIGMA-CONVERGENCE

. display as text "------------------------------------------------------------
> ----"
----------------------------------------------------------------

. 
. use "convergence2_working.dta", clear

. 
. * ── Compute cross-sectional standard deviation of log GDP by year ──
. bysort year: egen sigma = sd(loggdp)

. 
. * ── Plot sigma over time ──
. twoway (line sigma year, lcolor("106 155 204") lwidth(medthick)), ///
>     xtitle("Year") ytitle("Std. Dev. of Log GDP per Capita") ///
>     title("Sigma-Convergence: Cross-Country Income Dispersion", size(medium))
>  ///
>     legend(off) graphregion(color(white)) ///
>     note("Falling line = sigma-convergence (dispersion narrowing)", size(vsma
> ll))

. graph export "stata_convergence2_sigma.png", replace width(2400)
(file stata_convergence2_sigma.png not found)
file stata_convergence2_sigma.png written in PNG format

. 
. display as text ""


. display as text "Exported: stata_convergence2_sigma.png"
Exported: stata_convergence2_sigma.png

. 
. * ── Export sigma data ──
. preserve

. bysort year: keep if _n == 1
(10,034 observations deleted)

. keep year sigma

. export delimited using "convergence2_sigma.csv", replace
(file convergence2_sigma.csv not found)
file convergence2_sigma.csv saved

. display as text "Exported: convergence2_sigma.csv"
Exported: convergence2_sigma.csv

. restore

. 
. display as text ""


. display as text "INTERPRETATION: Sigma peaked in the early 2000s and has been
> "
INTERPRETATION: Sigma peaked in the early 2000s and has been

. display as text "declining since. This is consistent with beta-convergence le
> ading"
declining since. This is consistent with beta-convergence leading

. display as text "sigma-convergence by about a decade (beta-convergence emerge
> s in"
sigma-convergence by about a decade (beta-convergence emerges in

. display as text "the early 1990s; sigma-convergence follows in the early 2000
> s)."
the early 1990s; sigma-convergence follows in the early 2000s).

. 
. 
. *============================================================================
> ===
. * SECTION 4: WHO DRIVES CONVERGENCE?
. *
. *   Is the trend toward convergence driven by catch-up growth (poorer
. *   countries growing faster) or frontier stagnation (richer countries
. *   growing slower)? We answer by tracking growth rates by income
. *   quartile and by testing robustness to excluding different regions.
. *============================================================================
> ===
. 
. display as text ""


. display as text "------------------------------------------------------------
> ----"
----------------------------------------------------------------

. display as text "  SECTION 4: WHO DRIVES CONVERGENCE?"
  SECTION 4: WHO DRIVES CONVERGENCE?

. display as text "------------------------------------------------------------
> ----"
----------------------------------------------------------------

. 
. * ── 4A: Growth by income quartile ──
. use "convergence2_working.dta", clear

. 
. * Compute income quartiles (recalculated each year)
. foreach i of numlist 1/3 {
  2.     local t = 25 * `i'
  3.     bysort year: egen p_`i' = pctile(loggdp), p(`t')
  4. }

. gen qtile = 1 if loggdp < p_1
(8,022 missing values generated)

. replace qtile = 2 if loggdp >= p_1 & loggdp < p_2
(2,080 real changes made)

. replace qtile = 3 if loggdp >= p_2 & loggdp < p_3
(2,078 real changes made)

. replace qtile = 4 if loggdp >= p_3 & loggdp != .
(2,100 real changes made)

. 
. label define quart 1 "Q1 (Poorest)" 2 "Q2" 3 "Q3" 4 "Q4 (Richest)"

. label values qtile quart

. 
. * Compute mean growth by quartile and year
. bysort year qtile: egen mean_growth = mean(loggdp_growth_10)
(3,204 missing values generated)

. 
. * Plot
. twoway (line mean_growth year if qtile == 1, lcolor("255 141 61") lwidth(medt
> hick)) ///
>        (line mean_growth year if qtile == 2, lcolor("246 199 0") lwidth(medth
> ick)) ///
>        (line mean_growth year if qtile == 3, lcolor("146 195 51") lwidth(medt
> hick)) ///
>        (line mean_growth year if qtile == 4, lcolor("106 155 204") lwidth(med
> thick)), ///
>     graphregion(color(white)) ///
>     legend(label(1 "Q1 (Poorest)") label(2 "Q2") label(3 "Q3") label(4 "Q4 (R
> ichest)") ///
>         rows(2) position(6)) ///
>     xtitle("Year") ytitle("Mean 10-Year Growth Rate (%)") ///
>     title("Growth by Income Quartile", size(medium))

. graph export "stata_convergence2_growth_by_quartile.png", replace width(2400)
(file stata_convergence2_growth_by_quartile.png not found)
file stata_convergence2_growth_by_quartile.png written in PNG format

. 
. display as text ""


. display as text "Exported: stata_convergence2_growth_by_quartile.png"
Exported: stata_convergence2_growth_by_quartile.png

. 
. * Export
. preserve

. bysort year qtile: keep if _n == 1
(9,802 observations deleted)

. keep year qtile mean_growth

. export delimited using "convergence2_growth_by_quartile.csv", replace
(file convergence2_growth_by_quartile.csv not found)
file convergence2_growth_by_quartile.csv saved

. display as text "Exported: convergence2_growth_by_quartile.csv"
Exported: convergence2_growth_by_quartile.csv

. restore

. 
. display as text ""


. display as text "INTERPRETATION: The richest quartile (Q4) had the highest gr
> owth"
INTERPRETATION: The richest quartile (Q4) had the highest growth

. display as text "in the 1980s but the lowest since 2000. All other quartiles"
in the 1980s but the lowest since 2000. All other quartiles

. display as text "experienced accelerating growth through the 1990s and 2000s.
> "
experienced accelerating growth through the 1990s and 2000s.

. display as text "This shows BOTH catch-up growth AND frontier stagnation."
This shows BOTH catch-up growth AND frontier stagnation.

. 
. * ── 4B: Beta trend excluding regions ──
. use "convergence2_working.dta", clear

. 
. local y loggdp

. 
. foreach q in 1 2 3 4 {
  2.     quietly areg `y'_growth_10 c.`y'#i.year if region_group != `q', ///
>         absorb(year) robust cluster(country_id)
  3. 
.     local b1960_`y'_`q' = _b[1960b.year#c.`y']
  4.     local s1960_`y'_`q' = _se[1960b.year#c.`y']
  5.     foreach i of numlist 1961(1)2018 {
  6.         capture local b`i'_`y'_`q' = _b[`i'.year#c.`y']
  7.         capture local s`i'_`y'_`q' = _se[`i'.year#c.`y']
  8.     }
  9. }

. 
. * Save output
. preserve

. clear

. set obs 50
Number of observations (_N) was 0, now 50.

. gen year = 1959 + _n

. 
. foreach q in 1 2 3 4 {
  2.     gen beta_excl_`q' = .
  3.     gen se_excl_`q' = .
  4.     foreach i of numlist 1960(1)2009 {
  5.         capture replace beta_excl_`q' = `b`i'_`y'_`q'' if year == `i'
  6.         capture replace se_excl_`q' = `s`i'_`y'_`q'' if year == `i'
  7.     }
  8.     recode beta_excl_`q' 0 = .
  9.     recode se_excl_`q' 0 = .
 10. }
(50 missing values generated)
(50 missing values generated)
(1 changes made to beta_excl_1)
(1 changes made to se_excl_1)
(50 missing values generated)
(50 missing values generated)
(1 changes made to beta_excl_2)
(1 changes made to se_excl_2)
(50 missing values generated)
(50 missing values generated)
(1 changes made to beta_excl_3)
(1 changes made to se_excl_3)
(50 missing values generated)
(50 missing values generated)
(1 changes made to beta_excl_4)
(1 changes made to se_excl_4)

. 
. * Plot
. twoway (line beta_excl_1 year if beta_excl_1 != ., lcolor("255 141 61") lwidt
> h(medthick)) ///
>        (line beta_excl_2 year if beta_excl_2 != ., lcolor("246 199 0") lwidth
> (medthick)) ///
>        (line beta_excl_3 year if beta_excl_3 != ., lcolor("146 195 51") lwidt
> h(medthick)) ///
>        (line beta_excl_4 year if beta_excl_4 != ., lcolor("106 155 204") lwid
> th(medthick)), ///
>     graphregion(color(white)) ///
>     legend(label(1 "Excl. Europe/C.Asia/N.Am") label(2 "Excl. L.Am & Carib") 
> ///
>            label(3 "Excl. S. & E. Asia") label(4 "Excl. Sub-Saharan Africa") 
> ///
>            rows(2) position(6)) ///
>     xtitle("Year") ytitle("Beta-convergence coefficient") ///
>     title("Beta Trend: Robustness to Excluding Regions", size(medium))

. graph export "stata_convergence2_beta_excluding_regions.png", replace width(2
> 400)
(file stata_convergence2_beta_excluding_regions.png not found)
file stata_convergence2_beta_excluding_regions.png written in PNG format

. 
. display as text ""


. display as text "Exported: stata_convergence2_beta_excluding_regions.png"
Exported: stata_convergence2_beta_excluding_regions.png

. 
. * Export
. export delimited using "convergence2_beta_by_region.csv", replace
(file convergence2_beta_by_region.csv not found)
file convergence2_beta_by_region.csv saved

. display as text "Exported: convergence2_beta_by_region.csv"
Exported: convergence2_beta_by_region.csv

. restore

. 
. display as text ""


. display as text "INTERPRETATION: The trend toward convergence is robust to ex
> cluding"
INTERPRETATION: The trend toward convergence is robust to excluding

. display as text "any single region. Convergence becomes STRONGER when excludi
> ng"
any single region. Convergence becomes STRONGER when excluding

. display as text "Sub-Saharan Africa, and is not driven by any one region."
Sub-Saharan Africa, and is not driven by any one region.

. 
. 
. *============================================================================
> ===
. * SECTION 5: HAVE GROWTH CORRELATES CONVERGED?
. *
. *   The 1990s convergence literature found that convergence held
. *   CONDITIONAL on policies and institutions (Barro and Sala-i-Martin
. *   1992). This raises the question: have these policies and
. *   institutions themselves changed?
. *
. *   Kremer et al. find that most growth correlates have converged
. *   substantially -- poorer countries have moved toward the policy
. *   configurations of richer countries. We examine 6 representative
. *   correlates: population growth, investment, education, democracy,
. *   government spending, and financial credit.
. *============================================================================
> ===
. 
. display as text ""


. display as text "------------------------------------------------------------
> ----"
----------------------------------------------------------------

. display as text "  SECTION 5: CONVERGENCE IN GROWTH CORRELATES"
  SECTION 5: CONVERGENCE IN GROWTH CORRELATES

. display as text "------------------------------------------------------------
> ----"
----------------------------------------------------------------

. 
. use "convergence2_working.dta", clear

. 
. * ── 6 representative correlates ──
. * Population growth, Investment, Education, Polity2, Gov spending, Credit
. local rep_vars "population_growth investment barrolee2060 polity2 gov_spendin
> g credit"

. local rep_labels `" "Population Growth" "Investment (% GDP)" "Barro-Lee Educa
> tion" "Polity 2 Score" "Government Spending (% GDP)" "Credit by Financial Sec
> tor" "'

. 
. local fig_num = 1

. local csv_rows = 0

. 
. * Create a temporary dataset to accumulate results
. tempfile corr_results

. preserve

. clear

. gen str40 variable = ""

. gen beta_convergence = .

. gen se_beta = .

. gen n_obs = .

. gen mean_base = .

. gen mean_end = .

. save `corr_results'
(dataset contains 0 observations)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.00000a saved
    as .dta format

. restore

. 
. foreach var of local rep_vars {
  2.     * Determine base and end years
.     local base_yr = 1985
  3.     local end_yr = 2015
  4.     if "`var'" == "population_growth" | "`var'" == "investment" {
  5.         local end_yr = 2014
  6.     }
  7.     if "`var'" == "barrolee2060" {
  8.         local end_yr = 2010
  9.     }
 10.     if "`var'" == "credit" {
 11.         local base_yr = 1990
 12.     }
 13. 
.     preserve
 14.     * For Barro-Lee, impute nearby years if needed
.     if "`var'" == "barrolee2060" {
 15.         * Education data is quinquennial; keep closest available years
.         keep if (year >= `base_yr' - 1 & year <= `base_yr' + 1) | ///
>                 (year >= `end_yr' - 1 & year <= `end_yr' + 1)
 16.         drop if `var' == .
 17.         * Keep only one obs per country closest to base and end years
.         gen dist_base = abs(year - `base_yr')
 18.         gen dist_end = abs(year - `end_yr')
 19.         gen period = 1 if dist_base <= dist_end
 20.         replace period = 2 if period == .
 21.         bysort code period (year): keep if _n == 1
 22.         sort code period
 23.         bysort code: gen id = _n
 24.         bysort code: egen maxid = max(id)
 25.         keep if maxid == 2
 26.         by code: gen change = `var' - `var'[_n-1]
 27.         by code: gen lag = `var'[_n-1]
 28.         keep if id == 2
 29.     }
 30.     else {
 31.         keep if year == `base_yr' | year == `end_yr'
 32.         drop if `var' == .
 33.         sort code year
 34.         bysort code: gen id = _n
 35.         bysort code: egen maxid = max(id)
 36.         keep if maxid == 2
 37.         by code: gen change = `var' - `var'[_n-1]
 38.         by code: gen lag = `var'[_n-1]
 39.         keep if id == 2
 40.     }
 41. 
.     * Run convergence regression
.     reg change lag, robust
 42.     local b_`var' = _b[lag]
 43.     local se_`var' = _se[lag]
 44.     local n_`var' = e(N)
 45. 
.     * Get means
.     sum lag
 46.     local mean_base_`var' = r(mean)
 47.     sum `var'
 48.     local mean_end_`var' = r(mean)
 49. 
.     * Get nice label
.     local lab_num = `fig_num'
 50.     local lab: word `lab_num' of `rep_labels'
 51. 
.     * Scatter plot
.     twoway (scatter change lag, msize(small) mcolor("106 155 204") msymbol(ci
> rcle)) ///
>            (lfit change lag, lcolor("20 20 19") lwidth(medthick)), ///
>         xtitle("`lab' in `base_yr'") ///
>         ytitle("Change (`base_yr'-`end_yr')") ///
>         title("`lab'", size(medium)) ///
>         legend(off) graphregion(color(white)) ///
>         yline(0, lpattern(dot) lcolor("217 119 87")) ///
>         name(C`fig_num', replace)
 52. 
.     display as text "  `lab': beta = " %6.3f `b_`var'' ///
>         " (N = " `n_`var'' ")"
 53. 
.     restore
 54.     local fig_num = `fig_num' + 1
 55. }
(9,744 observations deleted)
(3 observations deleted)
(3 observations deleted)
(171 missing values generated)
(171 missing values generated)
(171 observations deleted)

Linear regression                               Number of obs     =        171
                                                F(1, 169)         =      21.78
                                                Prob > F          =     0.0000
                                                R-squared         =     0.2166
                                                Root MSE          =     1.1194

------------------------------------------------------------------------------
             |               Robust
      change | Coefficient  std. err.      t    P>|t|     [95% conf. interval]
-------------+----------------------------------------------------------------
         lag |  -.4407512   .0944361    -4.67   0.000    -.6271775   -.2543249
       _cons |   .3252957   .2113657     1.54   0.126    -.0919614    .7425528
------------------------------------------------------------------------------

    Variable |        Obs        Mean    Std. dev.       Min        Max
-------------+---------------------------------------------------------
         lag |        171    1.986473    1.331492  -2.216316   5.973235

    Variable |        Obs        Mean    Std. dev.       Min        Max
-------------+---------------------------------------------------------
population~h |        171    1.436228    1.341686  -3.107229    6.50466
  Population Growth: beta = -0.441 (N = 171)
(9,744 observations deleted)
(65 observations deleted)
(49 observations deleted)
(117 missing values generated)
(117 missing values generated)
(117 observations deleted)

Linear regression                               Number of obs     =        117
                                                F(1, 115)         =      48.75
                                                Prob > F          =     0.0000
                                                R-squared         =     0.4372
                                                Root MSE          =     9.0625

------------------------------------------------------------------------------
             |               Robust
      change | Coefficient  std. err.      t    P>|t|     [95% conf. interval]
-------------+----------------------------------------------------------------
         lag |  -.8499697   .1217373    -6.98   0.000    -1.091108   -.6088315
       _cons |   21.02694   2.818405     7.46   0.000     15.44422    26.60966
------------------------------------------------------------------------------

    Variable |        Obs        Mean    Std. dev.       Min        Max
-------------+---------------------------------------------------------
         lag |        117    22.13413     9.35591          0   62.79199

    Variable |        Obs        Mean    Std. dev.       Min        Max
-------------+---------------------------------------------------------
  investment |        117    24.34773    9.131874   7.611337   55.36271
  Investment (% GDP): beta = -0.850 (N = 117)
(9,048 observations deleted)
(228 observations deleted)
(408 missing values generated)
(408 real changes made)
(544 observations deleted)
(0 observations deleted)
(136 missing values generated)
(136 missing values generated)
(136 observations deleted)

Linear regression                               Number of obs     =        136
                                                F(1, 134)         =       0.93
                                                Prob > F          =     0.3359
                                                R-squared         =     0.0082
                                                Root MSE          =     1.1639

------------------------------------------------------------------------------
             |               Robust
      change | Coefficient  std. err.      t    P>|t|     [95% conf. interval]
-------------+----------------------------------------------------------------
         lag |  -.0348194   .0360561    -0.97   0.336    -.1061321    .0364933
       _cons |   2.958276   .2355789    12.56   0.000     2.492342     3.42421
------------------------------------------------------------------------------

    Variable |        Obs        Mean    Std. dev.       Min        Max
-------------+---------------------------------------------------------
         lag |        136    5.573765    3.035933   .1321449   12.57685

    Variable |        Obs        Mean    Std. dev.       Min        Max
-------------+---------------------------------------------------------
barrolee2060 |        136    8.337965    3.151307   1.339503   13.32858
  Barro-Lee Education: beta = -0.035 (N = 136)
(9,744 observations deleted)
(60 observations deleted)
(26 observations deleted)
(131 missing values generated)
(131 missing values generated)
(131 observations deleted)

Linear regression                               Number of obs     =        131
                                                F(1, 129)         =     145.61
                                                Prob > F          =     0.0000
                                                R-squared         =     0.4691
                                                Root MSE          =      4.952

------------------------------------------------------------------------------
             |               Robust
      change | Coefficient  std. err.      t    P>|t|     [95% conf. interval]
-------------+----------------------------------------------------------------
         lag |  -.6087232   .0504451   -12.07   0.000    -.7085301   -.5089163
       _cons |   5.027523   .4047933    12.42   0.000      4.22663    5.828417
------------------------------------------------------------------------------

    Variable |        Obs        Mean    Std. dev.       Min        Max
-------------+---------------------------------------------------------
         lag |        131    -.870229    7.617184        -10         10

    Variable |        Obs        Mean    Std. dev.       Min        Max
-------------+---------------------------------------------------------
     polity2 |        131    4.687023    5.763391        -10         10
  Polity 2 Score: beta = -0.609 (N = 131)
(9,744 observations deleted)
(73 observations deleted)
(53 observations deleted)
(111 missing values generated)
(111 missing values generated)
(111 observations deleted)

Linear regression                               Number of obs     =        111
                                                F(1, 109)         =      22.90
                                                Prob > F          =     0.0000
                                                R-squared         =     0.2821
                                                Root MSE          =     4.1494

------------------------------------------------------------------------------
             |               Robust
      change | Coefficient  std. err.      t    P>|t|     [95% conf. interval]
-------------+----------------------------------------------------------------
         lag |  -.4309897   .0900555    -4.79   0.000    -.6094767   -.2525026
       _cons |   7.069211   1.372363     5.15   0.000     4.349232     9.78919
------------------------------------------------------------------------------

    Variable |        Obs        Mean    Std. dev.       Min        Max
-------------+---------------------------------------------------------
         lag |        111    15.78766    6.007953   1.939839   35.73071

    Variable |        Obs        Mean    Std. dev.       Min        Max
-------------+---------------------------------------------------------
gov_spending |        111    16.05255    5.361684   4.579278   32.20594
  Government Spending (% GDP): beta = -0.431 (N = 111)
(9,744 observations deleted)
(76 observations deleted)
(58 observations deleted)
(107 missing values generated)
(107 missing values generated)
(107 observations deleted)

Linear regression                               Number of obs     =        107
                                                F(1, 105)         =       0.84
                                                Prob > F          =     0.3624
                                                R-squared         =     0.0372
                                                Root MSE          =      47.76

------------------------------------------------------------------------------
             |               Robust
      change | Coefficient  std. err.      t    P>|t|     [95% conf. interval]
-------------+----------------------------------------------------------------
         lag |  -.2027058   .2215946    -0.91   0.362     -.642087    .2366754
       _cons |   30.84312   9.184655     3.36   0.001     12.63165     49.0546
------------------------------------------------------------------------------

    Variable |        Obs        Mean    Std. dev.       Min        Max
-------------+---------------------------------------------------------
         lag |        107    49.87174    46.09082  -45.59048   265.8643

    Variable |        Obs        Mean    Std. dev.       Min        Max
-------------+---------------------------------------------------------
      credit |        107    70.60558    60.08285   2.319565   343.2345
  Credit by Financial Sector: beta = -0.203 (N = 107)

. 
. * ── Combine into one figure ──
. graph combine C1 C2 C3 C4 C5 C6, rows(2) cols(3) ///
>     graphregion(color(white)) ///
>     title("Convergence in Growth Correlates, 1985-2015", size(medium))

. graph export "stata_convergence2_correlate_convergence.png", replace width(24
> 00)
(file stata_convergence2_correlate_convergence.png not found)
file stata_convergence2_correlate_convergence.png written in PNG format

. graph drop C1 C2 C3 C4 C5 C6

. 
. display as text ""


. display as text "Exported: stata_convergence2_correlate_convergence.png"
Exported: stata_convergence2_correlate_convergence.png

. 
. * ── Compute beta-convergence for all available correlates ──
. display as text ""


. display as text "TABLE 3: CONVERGENCE IN CORRELATES (beta coefficients)"
TABLE 3: CONVERGENCE IN CORRELATES (beta coefficients)

. display as text "───────────────────────────────────────────────────────"
───────────────────────────────────────────────────────

. 
. use "convergence2_working.dta", clear

. 
. * Create locals for min/max years per variable
. foreach y in `total' {
  2.     preserve
  3.     collapse (count) `y', by(year)
  4.     keep if `y' > 40 & `y' != .
  5.     egen temp_min = min(year)
  6.     keep if year == temp_min
  7.     sort year
  8.     local min_year_`y' = year[1]
  9.     if `min_year_`y'' < 1985 local min_year_`y' = 1985
 10.     restore
 11. }
(0 observations deleted)
(57 observations deleted)
(0 observations deleted)
(57 observations deleted)
(3 observations deleted)
(54 observations deleted)
(3 observations deleted)
(54 observations deleted)
(30 observations deleted)
(27 observations deleted)
(0 observations deleted)
(57 observations deleted)
(13 observations deleted)
(44 observations deleted)
(13 observations deleted)
(44 observations deleted)
(34 observations deleted)
(23 observations deleted)
(36 observations deleted)
(21 observations deleted)
(36 observations deleted)
(21 observations deleted)
(36 observations deleted)
(21 observations deleted)
(36 observations deleted)
(21 observations deleted)
(36 observations deleted)
(21 observations deleted)
(35 observations deleted)
(22 observations deleted)
(35 observations deleted)
(22 observations deleted)
(35 observations deleted)
(22 observations deleted)
(35 observations deleted)
(22 observations deleted)
(32 observations deleted)
(25 observations deleted)
(32 observations deleted)
(25 observations deleted)
(13 observations deleted)
(44 observations deleted)
(13 observations deleted)
(44 observations deleted)
(0 observations deleted)
(57 observations deleted)
(35 observations deleted)
(22 observations deleted)
(2 observations deleted)
(55 observations deleted)
(0 observations deleted)
(57 observations deleted)
(1 observation deleted)
(56 observations deleted)
(15 observations deleted)
(42 observations deleted)
(0 observations deleted)
(57 observations deleted)
(0 observations deleted)
(57 observations deleted)
(35 observations deleted)
(22 observations deleted)
(35 observations deleted)
(22 observations deleted)

. 
. * Compute convergence betas
. preserve

. clear

. gen str40 variable = ""

. gen beta = .

. gen se = .

. gen n = .

. gen mean_start = .

. gen mean_end = .

. local row = 1

. save `corr_results', replace
(dataset contains 0 observations)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.00000a saved
    as .dta format

. restore

. 
. * Impute missing 2015 values with nearest available year (following reference
>  code)
. foreach y in `total' {
  2.     sort code year
  3.     forval k = 1/5 {
  4.         replace `y' = `y'[_n-`k'] if `y' == . & year == 2015
  5.     }
  6. }
(2 real changes made)
(0 real changes made)
(1 real change made)
(1 real change made)
(1 real change made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(1 real change made)
(0 real changes made)
(136 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(136 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(2 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(8 real changes made)
(10 real changes made)
(2 real changes made)
(1 real change made)
(0 real changes made)
(8 real changes made)
(10 real changes made)
(2 real changes made)
(1 real change made)
(0 real changes made)
(4 real changes made)
(8 real changes made)
(8 real changes made)
(3 real changes made)
(3 real changes made)
(4 real changes made)
(6 real changes made)
(8 real changes made)
(2 real changes made)
(4 real changes made)
(2 real changes made)
(0 real changes made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(6 real changes made)
(1 real change made)
(0 real changes made)
(0 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(0 real changes made)
(1 real change made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(162 real changes made)
(0 real changes made)
(0 real changes made)
(1 real change made)
(2 real changes made)
(0 real changes made)
(1 real change made)
(1 real change made)
(1 real change made)
(2 real changes made)
(0 real changes made)
(2 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)

. 
. foreach y in `total' {
  2.     preserve
  3.     drop if year < 1985 | year > 2015
  4.     drop if `y' == .
  5.     keep if year == `min_year_`y'' | year == 2015
  6.     sort code year
  7.     bysort code: gen id = _n
  8.     bysort code: egen maxid = max(id)
  9.     keep if maxid == 2
 10.     sort code year
 11.     by code: gen growth = 100 * ((`y' - `y'[_n-1]) / (2015 - `min_year_`y'
> '))
 12.     by code: gen z = `y'[_n-1]
 13.     keep if id == 2
 14.     quietly reg growth z, robust
 15.     local b_`y' = _b[z]
 16.     local se_`y' = _se[z]
 17.     local n_`y' = e(N)
 18.     local p_`y' = 2 * ttail(e(df_r), abs(_b[z] / _se[z]))
 19.     local stars_`y' = ""
 20.     if `p_`y'' < 0.01 local stars_`y' = "***"
 21.     else if `p_`y'' < 0.05 local stars_`y' = "**"
 22.     else if `p_`y'' < 0.10 local stars_`y' = "*"
 23.     display as text "  `y': beta = " %7.2f `b_`y'' "`stars_`y''" ///
>         " (N = " `n_`y'' ")"
 24.     restore
 25. }
(4,698 observations deleted)
(765 observations deleted)
(4,343 observations deleted)
(50 observations deleted)
(118 missing values generated)
(118 missing values generated)
(118 observations deleted)
  investment: beta =   -2.98*** (N = 118)
(4,698 observations deleted)
(20 observations deleted)
(5,028 observations deleted)
(2 observations deleted)
(172 missing values generated)
(172 missing values generated)
(172 observations deleted)
  population_growth: beta =   -1.53*** (N = 172)
(4,698 observations deleted)
(1,178 observations deleted)
(3,944 observations deleted)
(0 observations deleted)
(136 missing values generated)
(136 missing values generated)
(136 observations deleted)
  barrolee2060: beta =   -0.16 (N = 136)
(4,698 observations deleted)
(1,178 observations deleted)
(3,944 observations deleted)
(0 observations deleted)
(136 missing values generated)
(136 missing values generated)
(136 observations deleted)
  edugap: beta =   -0.81*** (N = 136)
(4,698 observations deleted)
(896 observations deleted)
(4,152 observations deleted)
(0 observations deleted)
(173 missing values generated)
(173 missing values generated)
(173 observations deleted)
  laborparti: beta =   -0.66*** (N = 173)
(4,698 observations deleted)
(761 observations deleted)
(4,345 observations deleted)
(26 observations deleted)
(131 missing values generated)
(131 missing values generated)
(131 observations deleted)
  polity2: beta =   -2.03*** (N = 131)
(4,698 observations deleted)
(411 observations deleted)
(4,676 observations deleted)
(29 observations deleted)
(139 missing values generated)
(139 missing values generated)
(139 observations deleted)
  FH_political_rights: beta =   -1.39*** (N = 139)
(4,698 observations deleted)
(411 observations deleted)
(4,676 observations deleted)
(29 observations deleted)
(139 missing values generated)
(139 missing values generated)
(139 observations deleted)
  FH_civil_liberties: beta =   -1.36*** (N = 139)
(4,698 observations deleted)
(1,648 observations deleted)
(3,422 observations deleted)
(8 observations deleted)
(158 missing values generated)
(158 missing values generated)
(158 observations deleted)
  totalscore: beta =   -0.88*** (N = 158)
(4,698 observations deleted)
(1,995 observations deleted)
(3,059 observations deleted)
(4 observations deleted)
(168 missing values generated)
(168 missing values generated)
(168 observations deleted)
  WGI_pol_stability: beta =   -1.31*** (N = 168)
(4,698 observations deleted)
(2,000 observations deleted)
(3,057 observations deleted)
(7 observations deleted)
(165 missing values generated)
(165 missing values generated)
(165 observations deleted)
  WGI_gov_effectiveness: beta =   -0.45*** (N = 165)
(4,698 observations deleted)
(1,999 observations deleted)
(3,057 observations deleted)
(6 observations deleted)
(166 missing values generated)
(166 missing values generated)
(166 observations deleted)
  WGI_regulatory_quality: beta =   -0.51*** (N = 166)
(4,698 observations deleted)
(1,975 observations deleted)
(3,078 observations deleted)
(3 observations deleted)
(169 missing values generated)
(169 missing values generated)
(169 observations deleted)
  WGI_rule_law: beta =   -0.51*** (N = 169)
(4,698 observations deleted)
(1,980 observations deleted)
(3,074 observations deleted)
(4 observations deleted)
(168 missing values generated)
(168 missing values generated)
(168 observations deleted)
  WGI_control_corruption: beta =   -0.43** (N = 168)
(4,698 observations deleted)
(2,237 observations deleted)
(2,897 observations deleted)
(66 observations deleted)
(97 missing values generated)
(97 missing values generated)
(97 observations deleted)
  overallscore: beta =   -1.78*** (N = 97)
(4,698 observations deleted)
(2,221 observations deleted)
(2,909 observations deleted)
(68 observations deleted)
(98 missing values generated)
(98 missing values generated)
(98 observations deleted)
  governmentintegrity: beta =   -2.52*** (N = 98)
(4,698 observations deleted)
(2,230 observations deleted)
(2,903 observations deleted)
(67 observations deleted)
(97 missing values generated)
(97 missing values generated)
(97 observations deleted)
  propertyrights: beta =   -0.34 (N = 97)
(4,698 observations deleted)
(2,225 observations deleted)
(2,906 observations deleted)
(67 observations deleted)
(98 missing values generated)
(98 missing values generated)
(98 observations deleted)
  businessfreedom: beta =   -1.94*** (N = 98)
(4,698 observations deleted)
(2,467 observations deleted)
(2,718 observations deleted)
(119 observations deleted)
(45 missing values generated)
(45 missing values generated)
(45 observations deleted)
  tariff_all_ew: beta =   -3.46*** (N = 45)
(4,698 observations deleted)
(2,467 observations deleted)
(2,718 observations deleted)
(119 observations deleted)
(45 missing values generated)
(45 missing values generated)
(45 observations deleted)
  tariff_all_vw: beta =   -3.38*** (N = 45)
(4,698 observations deleted)
(2,506 observations deleted)
(2,705 observations deleted)
(93 observations deleted)
(45 missing values generated)
(45 missing values generated)
(45 observations deleted)
  inc_tax: beta =   -1.61*** (N = 45)
(4,698 observations deleted)
(2,531 observations deleted)
(2,678 observations deleted)
(93 observations deleted)
(46 missing values generated)
(46 missing values generated)
(46 observations deleted)
  sev_tax: beta =   -2.51*** (N = 46)
(4,698 observations deleted)
(851 observations deleted)
(4,263 observations deleted)
(52 observations deleted)
(114 missing values generated)
(114 missing values generated)
(114 observations deleted)
  gov_spending: beta =   -1.61*** (N = 114)
(4,698 observations deleted)
(2,228 observations deleted)
(2,903 observations deleted)
(67 observations deleted)
(98 missing values generated)
(98 missing values generated)
(98 observations deleted)
  taxburden: beta =   -3.74*** (N = 98)
(4,698 observations deleted)
(558 observations deleted)
(4,524 observations deleted)
(0 observations deleted)
(156 missing values generated)
(156 missing values generated)
(156 observations deleted)
  pri_inv: beta =   -1.60*** (N = 156)
(4,698 observations deleted)
(1,159 observations deleted)
(3,968 observations deleted)
(45 observations deleted)
(111 missing values generated)
(111 missing values generated)
(111 observations deleted)
  miliexp: beta =   -2.10*** (N = 111)
(4,698 observations deleted)
(461 observations deleted)
(4,631 observations deleted)
(46 observations deleted)
(128 missing values generated)
(128 missing values generated)
(128 observations deleted)
  inflation: beta =   -3.07*** (N = 128)
(4,698 observations deleted)
(1,310 observations deleted)
(3,819 observations deleted)
(59 observations deleted)
(103 missing values generated)
(103 missing values generated)
(103 observations deleted)
  lvaw_garriga: beta =   -2.56*** (N = 103)
(4,698 observations deleted)
(994 observations deleted)
(4,129 observations deleted)
(67 observations deleted)
(102 missing values generated)
(102 missing values generated)
(102 observations deleted)
  WDI_credit: beta =    0.89** (N = 102)
(4,698 observations deleted)
(997 observations deleted)
(4,127 observations deleted)
(66 observations deleted)
(102 missing values generated)
(102 missing values generated)
(102 observations deleted)
  credit: beta =   -0.98 (N = 102)
(4,698 observations deleted)
(2,233 observations deleted)
(2,901 observations deleted)
(66 observations deleted)
(97 missing values generated)
(97 missing values generated)
(97 observations deleted)
  financialfreedom: beta =   -2.00*** (N = 97)
(4,698 observations deleted)
(2,224 observations deleted)
(2,907 observations deleted)
(67 observations deleted)
(98 missing values generated)
(98 missing values generated)
(98 observations deleted)
  investmentfreedom: beta =   -0.83 (N = 98)

. 
. * Export correlate convergence results
. preserve

. clear

. local n_vars: word count `total'

. set obs `n_vars'
Number of observations (_N) was 0, now 32.

. gen str40 variable = ""
(32 missing values generated)

. gen beta = .
(32 missing values generated)

. gen se = .
(32 missing values generated)

. gen n_obs = .
(32 missing values generated)

. gen pval = .
(32 missing values generated)

. local i = 1

. foreach y in `total' {
  2.     replace variable = "`y'" in `i'
  3.     replace beta = `b_`y'' in `i'
  4.     replace se = `se_`y'' in `i'
  5.     replace n_obs = `n_`y'' in `i'
  6.     replace pval = `p_`y'' in `i'
  7.     local i = `i' + 1
  8. }
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)

. export delimited using "convergence2_correlate_convergence.csv", replace
(file convergence2_correlate_convergence.csv not found)
file convergence2_correlate_convergence.csv saved

. display as text ""


. display as text "Exported: convergence2_correlate_convergence.csv"
Exported: convergence2_correlate_convergence.csv

. restore

. 
. display as text ""


. display as text "INTERPRETATION: Most correlates show significant beta-conver
> gence."
INTERPRETATION: Most correlates show significant beta-convergence.

. display as text "This means countries with initially worse institutions exper
> ienced"
This means countries with initially worse institutions experienced

. display as text "the largest improvements -- they are catching up."
the largest improvements -- they are catching up.

. 
. 
. *============================================================================
> ===
. * SECTION 6: THE OVB FRAMEWORK -- BUILDING THE INTUITION
. *
. *   This is the paper's central contribution. The omitted variable bias
. *   (OVB) formula provides an exact decomposition of the gap between
. *   UNCONDITIONAL convergence (beta) and CONDITIONAL convergence (beta*):
. *
. *     beta - beta* = delta x lambda
. *
. *   where:
. *     delta = correlate-income slope (Inst on GDP)
. *     lambda = growth-correlate slope (Growth on Inst, controlling for GDP)
. *
. *   We first build intuition with a single correlate (Polity 2), then
. *   generalize to all correlates.
. *============================================================================
> ===
. 
. display as text ""


. display as text "------------------------------------------------------------
> ----"
----------------------------------------------------------------

. display as text "  SECTION 6: THE OVB FRAMEWORK"
  SECTION 6: THE OVB FRAMEWORK

. display as text "------------------------------------------------------------
> ----"
----------------------------------------------------------------

. 
. * ── 6A: Worked example with Polity 2 (democracy) ──
. display as text ""


. display as text "6A: WORKED EXAMPLE -- POLITY 2 SCORE (DEMOCRACY)"
6A: WORKED EXAMPLE -- POLITY 2 SCORE (DEMOCRACY)

. display as text "================================================="
=================================================

. 
. use "convergence2_working.dta", clear

. 
. * Normalize polity2 by its 1985 SD
. preserve

. drop if year < 1985
(4,350 observations deleted)

. drop if polity2 == .
(791 observations deleted)

. collapse (sd) sd = polity2, by(year)

. sort year

. local sd_polity2 = sd[1]

. restore

. 
. gen polity2_norm = polity2 / `sd_polity2'
(2,105 missing values generated)

. 
. foreach yr in 1985 2005 {
  2.     display as text ""
  3.     display as text "---- Period: `yr' ----"
  4. 
.     * Determine growth variable period
.     local growth_var = "loggdp_growth_10"
  5. 
.     * Regression 1: Unconditional convergence (beta)
.     quietly reg `growth_var' loggdp if year == `yr' & polity2_norm != ., robu
> st
  6.     local beta_`yr' = _b[loggdp]
  7.     local beta_se_`yr' = _se[loggdp]
  8.     local beta_n_`yr' = e(N)
  9.     display as text "  Regression 1 (Unconditional): beta = " %7.3f `beta_
> `yr'' ///
>         " (SE = " %5.3f `beta_se_`yr'' ", N = " `beta_n_`yr'' ")"
 10. 
.     * Regression 2: Conditional convergence (beta*)
.     quietly reg `growth_var' loggdp polity2_norm if year == `yr', robust
 11.     local betastar_`yr' = _b[loggdp]
 12.     local lambda_`yr' = _b[polity2_norm]
 13.     local lambda_se_`yr' = _se[polity2_norm]
 14.     display as text "  Regression 2 (Conditional):   beta* = " %7.3f `beta
> star_`yr'' ///
>         ", lambda = " %7.3f `lambda_`yr''
 15. 
.     * Regression 3: Correlate-income slope (delta)
.     quietly reg polity2_norm loggdp if year == `yr' & `growth_var' != ., robu
> st
 16.     local delta_`yr' = _b[loggdp]
 17.     local delta_se_`yr' = _se[loggdp]
 18.     display as text "  Regression 3 (Income-Inst):   delta = " %7.3f `delt
> a_`yr''
 19. 
.     * Verify OVB formula: beta - beta* should equal delta * lambda
.     local gap_`yr' = `beta_`yr'' - `betastar_`yr''
 20.     local product_`yr' = `delta_`yr'' * `lambda_`yr''
 21.     display as text ""
 22.     display as text "  OVB DECOMPOSITION:"
 23.     display as text "    beta - beta*   = " %7.3f `gap_`yr'' "  (actual ga
> p)"
 24.     display as text "    delta x lambda = " %7.3f `product_`yr'' "  (predi
> cted by OVB formula)"
 25.     display as text "    delta          = " %7.3f `delta_`yr'' "  (richer 
> countries more democratic?)"
 26.     display as text "    lambda         = " %7.3f `lambda_`yr'' "  (democr
> acy predicts growth?)"
 27. }

---- Period: 1985 ----
  Regression 1 (Unconditional): beta =   0.328 (SE = 0.199, N = 124)
  Regression 2 (Conditional):   beta* =  -0.111, lambda =   0.891
  Regression 3 (Income-Inst):   delta =   0.494

  OVB DECOMPOSITION:
    beta - beta*   =   0.440  (actual gap)
    delta x lambda =   0.440  (predicted by OVB formula)
    delta          =   0.494  (richer countries more democratic?)
    lambda         =   0.891  (democracy predicts growth?)

---- Period: 2005 ----
  Regression 1 (Unconditional): beta =  -0.767 (SE = 0.149, N = 147)
  Regression 2 (Conditional):   beta* =  -0.807, lambda =   0.183
  Regression 3 (Income-Inst):   delta =   0.216

  OVB DECOMPOSITION:
    beta - beta*   =   0.040  (actual gap)
    delta x lambda =   0.040  (predicted by OVB formula)
    delta          =   0.216  (richer countries more democratic?)
    lambda         =   0.183  (democracy predicts growth?)

. 
. display as text ""


. display as text "COMPARISON ACROSS TIME:"
COMPARISON ACROSS TIME:

. display as text "  delta (1985) = " %7.3f `delta_1985' " --> delta (2005) = "
>  %7.3f `delta_2005' "  [STABLE]"
  delta (1985) =   0.494 --> delta (2005) =   0.216  [STABLE]

. display as text "  lambda (1985) = " %7.3f `lambda_1985' " --> lambda (2005) 
> = " %7.3f `lambda_2005' "  [SHRANK]"
  lambda (1985) =   0.891 --> lambda (2005) =   0.183  [SHRANK]

. display as text "  gap (1985) = " %7.3f `product_1985' " --> gap (2005) = " %
> 7.3f `product_2005' "  [CLOSED]"
  gap (1985) =   0.440 --> gap (2005) =   0.040  [CLOSED]

. display as text ""


. display as text "INTERPRETATION: The correlate-income slope (delta) stayed si
> milar --"
INTERPRETATION: The correlate-income slope (delta) stayed similar --

. display as text "richer countries are still more democratic in the same propo
> rtion."
richer countries are still more democratic in the same proportion.

. display as text "But the growth-correlate slope (lambda) shrank -- democracy 
> predicts"
But the growth-correlate slope (lambda) shrank -- democracy predicts

. display as text "growth much less in 2005 than in 1985. The explanatory gap c
> losed."
growth much less in 2005 than in 1985. The explanatory gap closed.

. 
. * ── 6B: Generalize -- Compute delta for ALL correlates ──
. display as text ""


. display as text "6B: CORRELATE-INCOME SLOPES (DELTA) FOR ALL CORRELATES"
6B: CORRELATE-INCOME SLOPES (DELTA) FOR ALL CORRELATES

. display as text "======================================================="
=======================================================

. 
. use "convergence2_working.dta", clear

. 
. * Normalize all correlates by their 1985 SD
. local base_year = 1985

. foreach y in `total_plus_long_run' {
  2.     preserve
  3.     drop if year < `base_year'
  4.     drop if `y' == .
  5.     collapse (count) `y' (sd) sd = `y', by(year)
  6.     keep if `y' >= 40
  7.     sort year
  8.     local sd_`y' = sd[1]
  9.     restore
 10. }
(4,350 observations deleted)
(815 observations deleted)
(0 observations deleted)
(4,350 observations deleted)
(23 observations deleted)
(0 observations deleted)
(4,350 observations deleted)
(1,662 observations deleted)
(0 observations deleted)
(4,350 observations deleted)
(1,662 observations deleted)
(0 observations deleted)
(4,350 observations deleted)
(898 observations deleted)
(0 observations deleted)
(4,350 observations deleted)
(791 observations deleted)
(0 observations deleted)
(4,350 observations deleted)
(591 observations deleted)
(0 observations deleted)
(4,350 observations deleted)
(591 observations deleted)
(0 observations deleted)
(4,350 observations deleted)
(1,830 observations deleted)
(0 observations deleted)
(4,350 observations deleted)
(1,999 observations deleted)
(0 observations deleted)
(4,350 observations deleted)
(2,004 observations deleted)
(0 observations deleted)
(4,350 observations deleted)
(2,003 observations deleted)
(0 observations deleted)
(4,350 observations deleted)
(1,979 observations deleted)
(0 observations deleted)
(4,350 observations deleted)
(1,984 observations deleted)
(0 observations deleted)
(4,350 observations deleted)
(2,265 observations deleted)
(0 observations deleted)
(4,350 observations deleted)
(2,237 observations deleted)
(0 observations deleted)
(4,350 observations deleted)
(2,249 observations deleted)
(0 observations deleted)
(4,350 observations deleted)
(2,242 observations deleted)
(0 observations deleted)
(4,350 observations deleted)
(2,593 observations deleted)
(3 observations deleted)
(4,350 observations deleted)
(2,593 observations deleted)
(3 observations deleted)
(4,350 observations deleted)
(2,734 observations deleted)
(0 observations deleted)
(4,350 observations deleted)
(2,754 observations deleted)
(0 observations deleted)
(4,350 observations deleted)
(901 observations deleted)
(0 observations deleted)
(4,350 observations deleted)
(2,251 observations deleted)
(0 observations deleted)
(4,350 observations deleted)
(906 observations deleted)
(0 observations deleted)
(4,350 observations deleted)
(1,227 observations deleted)
(0 observations deleted)
(4,350 observations deleted)
(476 observations deleted)
(0 observations deleted)
(4,350 observations deleted)
(1,820 observations deleted)
(0 observations deleted)
(4,350 observations deleted)
(1,049 observations deleted)
(0 observations deleted)
(4,350 observations deleted)
(1,059 observations deleted)
(0 observations deleted)
(4,350 observations deleted)
(2,258 observations deleted)
(0 observations deleted)
(4,350 observations deleted)
(2,246 observations deleted)
(0 observations deleted)
(4,350 observations deleted)
(3,762 observations deleted)
(0 observations deleted)
(4,350 observations deleted)
(330 observations deleted)
(0 observations deleted)
(4,350 observations deleted)
(330 observations deleted)
(0 observations deleted)
(4,350 observations deleted)
(330 observations deleted)
(0 observations deleted)
(4,350 observations deleted)
(330 observations deleted)
(0 observations deleted)
(4,350 observations deleted)
(330 observations deleted)
(0 observations deleted)
(4,350 observations deleted)
(2,904 observations deleted)
(0 observations deleted)
(4,350 observations deleted)
(3,762 observations deleted)
(0 observations deleted)
(4,350 observations deleted)
(3,729 observations deleted)
(0 observations deleted)
(4,350 observations deleted)
(1,485 observations deleted)
(0 observations deleted)
(4,350 observations deleted)
(627 observations deleted)
(0 observations deleted)
(4,350 observations deleted)
(627 observations deleted)
(0 observations deleted)
(4,350 observations deleted)
(2,772 observations deleted)
(0 observations deleted)
(4,350 observations deleted)
(3,465 observations deleted)
(0 observations deleted)
(4,350 observations deleted)
(3,465 observations deleted)
(0 observations deleted)
(4,350 observations deleted)
(3,465 observations deleted)
(0 observations deleted)
(4,350 observations deleted)
(3,465 observations deleted)
(0 observations deleted)
(4,350 observations deleted)
(2,838 observations deleted)
(0 observations deleted)
(4,350 observations deleted)
(2,838 observations deleted)
(0 observations deleted)

. 
. * Apply normalization and impute missing final year
. sort code year

. foreach y in `total_plus_long_run' {
  2.     * Impute final year if missing (use nearest prior value within same co
> untry)
.     forval k = 1/5 {
  3.         replace `y' = `y'[_n-`k'] if `y' == . & year == 2015
  4.     }
  5.     replace `y' = `y' / `sd_`y''
  6. }
(2 real changes made)
(0 real changes made)
(1 real change made)
(1 real change made)
(1 real change made)
(7,247 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(1 real change made)
(0 real changes made)
(10,018 real changes made)
(136 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(7,616 real changes made)
(136 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(7,616 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(4,844 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
variable polity2 was byte now float
(7,788 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
variable FH_political_rights was byte now float
(6,904 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
variable FH_civil_liberties was byte now float
(6,904 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
variable totalscore was byte now float
(3,907 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(3,743 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(3,738 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(3,739 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(3,763 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(3,758 real changes made)
(0 real changes made)
(0 real changes made)
(2 real changes made)
(0 real changes made)
(0 real changes made)
(3,479 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(3,504 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(3,492 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(3,500 real changes made)
(8 real changes made)
(10 real changes made)
(2 real changes made)
(1 real change made)
(0 real changes made)
(3,122 real changes made)
(8 real changes made)
(10 real changes made)
(2 real changes made)
(1 real change made)
(0 real changes made)
(3,122 real changes made)
(4 real changes made)
(8 real changes made)
(8 real changes made)
(3 real changes made)
(3 real changes made)
(3,614 real changes made)
(4 real changes made)
(6 real changes made)
(8 real changes made)
(2 real changes made)
(4 real changes made)
(3,605 real changes made)
(2 real changes made)
(0 real changes made)
(1 real change made)
(1 real change made)
(1 real change made)
(7,319 real changes made)
(1 real change made)
(1 real change made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(3,493 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(8,736 real changes made)
(6 real changes made)
(1 real change made)
(0 real changes made)
(0 real changes made)
(1 real change made)
(6,591 real changes made)
(1 real change made)
(0 real changes made)
(0 real changes made)
(1 real change made)
(0 real changes made)
(7,888 real changes made)
(0 real changes made)
(0 real changes made)
(162 real changes made)
(0 real changes made)
(0 real changes made)
(5,484 real changes made)
(1 real change made)
(2 real changes made)
(0 real changes made)
(1 real change made)
(1 real change made)
(6,882 real changes made)
(1 real change made)
(2 real changes made)
(0 real changes made)
(2 real changes made)
(1 real change made)
(6,849 real changes made)
(1 real change made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
variable financialfreedom was byte now float
(3,484 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
variable investmentfreedom was byte now float
(3,451 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(3,480 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
variable legor_uk was byte now float
(2,726 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
variable legor_fr was byte now float
(5,336 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
variable legor_ge was byte now float
(1,102 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
variable legor_sc was byte now float
(290 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
variable legor_so was byte now float
(58 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(4,988 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(3,480 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(3,190 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(7,192 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(1,798 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(8,932 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(3,364 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
variable VSM_power_dist was int now float
(4,002 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
variable VSM_individualism was byte now float
(4,002 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
variable VSM_masculinity was int now float
(4,002 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
variable VSM_uncertain_avoid was int now float
(4,002 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(5,046 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(5,046 real changes made)

. save "convergence2_normalized.dta", replace
(file convergence2_normalized.dta not found)
file convergence2_normalized.dta saved

. 
. * Create min year locals
. foreach y in `total_plus_long_run' {
  2.     preserve
  3.     use "convergence2_working.dta", clear
  4.     collapse (count) `y', by(year)
  5.     keep if `y' > 40 & `y' != .
  6.     egen temp_min = min(year)
  7.     keep if year == temp_min
  8.     sort year
  9.     local rmn_year_`y' = year[1]
 10.     replace year = 1985 if year < 1985
 11.     sort year
 12.     local min_year_`y' = year[1]
 13.     restore
 14. }
(0 observations deleted)
(57 observations deleted)
(1 real change made)
(0 observations deleted)
(57 observations deleted)
(1 real change made)
(3 observations deleted)
(54 observations deleted)
(1 real change made)
(3 observations deleted)
(54 observations deleted)
(1 real change made)
(30 observations deleted)
(27 observations deleted)
(0 real changes made)
(0 observations deleted)
(57 observations deleted)
(1 real change made)
(13 observations deleted)
(44 observations deleted)
(1 real change made)
(13 observations deleted)
(44 observations deleted)
(1 real change made)
(34 observations deleted)
(23 observations deleted)
(0 real changes made)
(36 observations deleted)
(21 observations deleted)
(0 real changes made)
(36 observations deleted)
(21 observations deleted)
(0 real changes made)
(36 observations deleted)
(21 observations deleted)
(0 real changes made)
(36 observations deleted)
(21 observations deleted)
(0 real changes made)
(36 observations deleted)
(21 observations deleted)
(0 real changes made)
(35 observations deleted)
(22 observations deleted)
(0 real changes made)
(35 observations deleted)
(22 observations deleted)
(0 real changes made)
(35 observations deleted)
(22 observations deleted)
(0 real changes made)
(35 observations deleted)
(22 observations deleted)
(0 real changes made)
(32 observations deleted)
(25 observations deleted)
(0 real changes made)
(32 observations deleted)
(25 observations deleted)
(0 real changes made)
(13 observations deleted)
(44 observations deleted)
(1 real change made)
(13 observations deleted)
(44 observations deleted)
(1 real change made)
(0 observations deleted)
(57 observations deleted)
(1 real change made)
(35 observations deleted)
(22 observations deleted)
(0 real changes made)
(2 observations deleted)
(55 observations deleted)
(1 real change made)
(0 observations deleted)
(57 observations deleted)
(1 real change made)
(1 observation deleted)
(56 observations deleted)
(1 real change made)
(15 observations deleted)
(42 observations deleted)
(1 real change made)
(0 observations deleted)
(57 observations deleted)
(1 real change made)
(0 observations deleted)
(57 observations deleted)
(1 real change made)
(35 observations deleted)
(22 observations deleted)
(0 real changes made)
(35 observations deleted)
(22 observations deleted)
(0 real changes made)
(0 observations deleted)
(57 observations deleted)
(1 real change made)
(0 observations deleted)
(57 observations deleted)
(1 real change made)
(0 observations deleted)
(57 observations deleted)
(1 real change made)
(0 observations deleted)
(57 observations deleted)
(1 real change made)
(0 observations deleted)
(57 observations deleted)
(1 real change made)
(0 observations deleted)
(57 observations deleted)
(1 real change made)
(0 observations deleted)
(57 observations deleted)
(1 real change made)
(0 observations deleted)
(57 observations deleted)
(1 real change made)
(0 observations deleted)
(57 observations deleted)
(1 real change made)
(0 observations deleted)
(57 observations deleted)
(1 real change made)
(0 observations deleted)
(57 observations deleted)
(1 real change made)
(0 observations deleted)
(57 observations deleted)
(1 real change made)
(0 observations deleted)
(57 observations deleted)
(1 real change made)
(0 observations deleted)
(57 observations deleted)
(1 real change made)
(0 observations deleted)
(57 observations deleted)
(1 real change made)
(0 observations deleted)
(57 observations deleted)
(1 real change made)
(0 observations deleted)
(57 observations deleted)
(1 real change made)
(0 observations deleted)
(57 observations deleted)
(1 real change made)
(0 observations deleted)
(57 observations deleted)
(1 real change made)

. 
. * Compute delta for each correlate in base year and 2015
. use "convergence2_normalized.dta", clear

. 
. local p = 1

. foreach x in `total_plus_long_run' {
  2.     preserve
  3.     drop if `x' == . | loggdp == .
  4.     keep if year == `min_year_`x'' | year == 2015
  5.     sort code year
  6.     by code: gen count = _n
  7.     by code: egen total_count = max(count)
  8.     drop if total_count == 1
  9. 
.     * Winsorize at 5%
.     winsor `x', gen(w) p(0.05)
 10. 
.     * Delta in base year
.     quietly reg w loggdp if year == `min_year_`x'', robust
 11.     local delta_base_`p' = _b[loggdp]
 12.     local delta_base_t_`p' = _b[loggdp] / _se[loggdp]
 13. 
.     * Delta in 2015
.     quietly reg w loggdp if year == 2015, robust
 14.     local delta_end_`p' = _b[loggdp]
 15.     local delta_end_t_`p' = _b[loggdp] / _se[loggdp]
 16. 
.     local obs_`p' = r(N)
 17.     local var_`p' = "`x'"
 18. 
.     restore
 19.     local p = `p' + 1
 20. }
(3,216 observations deleted)
(6,606 observations deleted)
(42 observations deleted)
(1,791 observations deleted)
(8,005 observations deleted)
(24 observations deleted)
(3,292 observations deleted)
(6,550 observations deleted)
(14 observations deleted)
(3,292 observations deleted)
(6,550 observations deleted)
(14 observations deleted)
(5,612 observations deleted)
(4,160 observations deleted)
(0 observations deleted)
(2,629 observations deleted)
(7,191 observations deleted)
(24 observations deleted)
(3,546 observations deleted)
(6,257 observations deleted)
(25 observations deleted)
(3,546 observations deleted)
(6,257 observations deleted)
(25 observations deleted)
(6,400 observations deleted)
(3,385 observations deleted)
(3 observations deleted)
(6,582 observations deleted)
(3,191 observations deleted)
(1 observation deleted)
(6,583 observations deleted)
(3,191 observations deleted)
(2 observations deleted)
(6,581 observations deleted)
(3,192 observations deleted)
(1 observation deleted)
(6,574 observations deleted)
(3,199 observations deleted)
(1 observation deleted)
(6,574 observations deleted)
(3,199 observations deleted)
(1 observation deleted)
(6,708 observations deleted)
(3,132 observations deleted)
(60 observations deleted)
(6,698 observations deleted)
(3,141 observations deleted)
(59 observations deleted)
(6,702 observations deleted)
(3,138 observations deleted)
(60 observations deleted)
(6,698 observations deleted)
(3,141 observations deleted)
(59 observations deleted)
(7,017 observations deleted)
(2,873 observations deleted)
(112 observations deleted)
(7,017 observations deleted)
(2,873 observations deleted)
(112 observations deleted)
(6,519 observations deleted)
(3,394 observations deleted)
(89 observations deleted)
(6,541 observations deleted)
(3,371 observations deleted)
(88 observations deleted)
(3,167 observations deleted)
(6,660 observations deleted)
(45 observations deleted)
(6,704 observations deleted)
(3,135 observations deleted)
(59 observations deleted)
(2,278 observations deleted)
(7,525 observations deleted)
(23 observations deleted)
(3,561 observations deleted)
(6,273 observations deleted)
(38 observations deleted)
(2,709 observations deleted)
(7,100 observations deleted)
(37 observations deleted)
(4,794 observations deleted)
(5,044 observations deleted)
(54 observations deleted)
(3,514 observations deleted)
(6,320 observations deleted)
(60 observations deleted)
(3,542 observations deleted)
(6,293 observations deleted)
(59 observations deleted)
(6,704 observations deleted)
(3,136 observations deleted)
(60 observations deleted)
(6,701 observations deleted)
(3,138 observations deleted)
(59 observations deleted)
(6,770 observations deleted)
(3,206 observations deleted)
(0 observations deleted)
(1,868 observations deleted)
(7,931 observations deleted)
(21 observations deleted)
(1,868 observations deleted)
(7,931 observations deleted)
(21 observations deleted)
(1,868 observations deleted)
(7,931 observations deleted)
(21 observations deleted)
(1,868 observations deleted)
(7,931 observations deleted)
(21 observations deleted)
(1,868 observations deleted)
(7,931 observations deleted)
(21 observations deleted)
(5,313 observations deleted)
(4,611 observations deleted)
(0 observations deleted)
(6,643 observations deleted)
(3,329 observations deleted)
(0 observations deleted)
(6,585 observations deleted)
(3,385 observations deleted)
(0 observations deleted)
(3,034 observations deleted)
(6,809 observations deleted)
(1 observation deleted)
(2,224 observations deleted)
(7,589 observations deleted)
(21 observations deleted)
(2,224 observations deleted)
(7,589 observations deleted)
(21 observations deleted)
(4,941 observations deleted)
(4,973 observations deleted)
(0 observations deleted)
(6,410 observations deleted)
(3,553 observations deleted)
(9 observations deleted)
(6,410 observations deleted)
(3,553 observations deleted)
(9 observations deleted)
(6,410 observations deleted)
(3,553 observations deleted)
(9 observations deleted)
(6,410 observations deleted)
(3,553 observations deleted)
(9 observations deleted)
(5,646 observations deleted)
(4,290 observations deleted)
(18 observations deleted)
(5,616 observations deleted)
(4,319 observations deleted)
(17 observations deleted)

. 
. * Create dataset for the delta scatter plot
. local n_total = `p' - 1

. preserve

. clear

. set obs `n_total'
Number of observations (_N) was 0, now 51.

. gen str40 var = ""
(51 missing values generated)

. gen delta_1985 = .
(51 missing values generated)

. gen delta_2015 = .
(51 missing values generated)

. gen delta_1985_t = .
(51 missing values generated)

. gen delta_2015_t = .
(51 missing values generated)

. gen id = _n

. 
. forval i = 1/`n_total' {
  2.     replace var = "`var_`i''" if id == `i'
  3.     replace delta_1985 = `delta_base_`i'' if id == `i'
  4.     replace delta_2015 = `delta_end_`i'' if id == `i'
  5.     replace delta_1985_t = `delta_base_t_`i'' if id == `i'
  6.     replace delta_2015_t = `delta_end_t_`i'' if id == `i'
  7. }
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(0 real changes made)
(0 real changes made)
(1 real change made)
(1 real change made)
(1 real change made)
(0 real changes made)
(0 real changes made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)

. 
. * Flag variable groups
. gen flag_solow = 0

. foreach v in `solow' {
  2.     replace flag_solow = 1 if var == "`v'"
  3. }
(1 real change made)
(1 real change made)
(1 real change made)

. gen flag_long_run = 0

. foreach v in `long_run' `culture' {
  2.     replace flag_long_run = 1 if var == "`v'"
  3. }
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)

. 
. * Drop variables that are standardized each year (not comparable over time)
. drop if inlist(var, "WGI_pol_stability", "WGI_gov_effectiveness", "WGI_regula
> tory_quality") | ///
>     inlist(var, "WGI_rule_law", "WGI_control_corruption", "overallscore") | /
> //
>     inlist(var, "governmentintegrity", "propertyrights", "businessfreedom", "
> taxburden", "financialfreedom")
(11 observations deleted)

. 
. * ── Figure 5 Panel A: Solow + Short-run correlates ──
. reg delta_2015 delta_1985 if flag_solow == 0 & flag_long_run == 0

      Source |       SS           df       MS      Number of obs   =        18
-------------+----------------------------------   F(1, 16)        =     37.71
       Model |  1.76046351         1  1.76046351   Prob > F        =    0.0000
    Residual |  .746853269        16  .046678329   R-squared       =    0.7021
-------------+----------------------------------   Adj R-squared   =    0.6835
       Total |  2.50731678        17  .147489222   Root MSE        =    .21605

------------------------------------------------------------------------------
  delta_2015 | Coefficient  Std. err.      t    P>|t|     [95% conf. interval]
-------------+----------------------------------------------------------------
  delta_1985 |   .8861748   .1442991     6.14   0.000     .5802745    1.192075
       _cons |   .0594779   .0542811     1.10   0.289    -.0555929    .1745488
------------------------------------------------------------------------------

. local slope_sr: display %5.3f _b[delta_1985]

. local r2_sr: display %5.3f e(r2)

. reg delta_2015 delta_1985 if flag_solow == 1, nocon

      Source |       SS           df       MS      Number of obs   =         3
-------------+----------------------------------   F(1, 2)         =     12.21
       Model |  .492547601         1  .492547601   Prob > F        =    0.0730
    Residual |  .080663279         2   .04033164   R-squared       =    0.8593
-------------+----------------------------------   Adj R-squared   =    0.7889
       Total |  .573210881         3  .191070294   Root MSE        =    .20083

------------------------------------------------------------------------------
  delta_2015 | Coefficient  Std. err.      t    P>|t|     [95% conf. interval]
-------------+----------------------------------------------------------------
  delta_1985 |   .8777595   .2511738     3.49   0.073    -.2029542    1.958473
------------------------------------------------------------------------------

. local slope_solow: display %5.3f _b[delta_1985]

. 
. twoway (scatter delta_2015 delta_1985 if flag_solow == 0 & flag_long_run == 0
> , ///
>         mcolor("106 155 204") msymbol(square) msize(small)) ///
>        (scatter delta_2015 delta_1985 if flag_solow == 1 & flag_long_run == 0
> , ///
>         mcolor("20 20 19") msymbol(circle) msize(small)) ///
>        (lfit delta_2015 delta_1985 if flag_solow == 0 & flag_long_run == 0, /
> //
>         lcolor("106 155 204") lpattern(dash) range(-0.8 1)) ///
>        (lfit delta_2015 delta_1985 if flag_solow == 1 & flag_long_run == 0, /
> //
>         lcolor("20 20 19") lpattern(solid) range(-0.8 1)) ///
>        (function y = x, range(-0.8 1) lcolor("185 185 185") lpattern(dot)), /
> //
>     xtitle("Correlate-Income Slope in 1985 ({&delta}{sub:1985})") ///
>     ytitle("Correlate-Income Slope in 2015 ({&delta}{sub:2015})") ///
>     title("Panel A: Solow Fundamentals and Short-Run Correlates", size(medium
> )) ///
>     legend(label(1 "Short-Run Correlates") label(2 "Solow Fundamentals") ///
>            label(3 "Fitted (Short-Run)") label(4 "Fitted (Solow)") ///
>            label(5 "45-degree line") rows(2) position(6) size(small)) ///
>     graphregion(color(white)) ///
>     note("Slopes: Solow = `slope_solow'; Short-Run = `slope_sr'", size(vsmall
> )) ///
>     xlabel(-0.5(0.5)1) ylabel(-0.5(0.5)1) ///
>     name(delta_A, replace)

. 
. * ── Figure 5 Panel B: Long-run + Culture ──
. gen flag_culture = 0

. foreach v in `culture' {
  2.     replace flag_culture = 1 if var == "`v'"
  3. }
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)

. gen flag_longrun = 0

. foreach v in `long_run' {
  2.     replace flag_longrun = 1 if var == "`v'"
  3. }
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)

. 
. capture reg delta_2015 delta_1985 if flag_culture == 1

. local slope_culture: display %5.3f _b[delta_1985]

. capture reg delta_2015 delta_1985 if flag_longrun == 1

. local slope_lr: display %5.3f _b[delta_1985]

. 
. twoway (scatter delta_2015 delta_1985 if flag_culture == 1, ///
>         mcolor("106 155 204") msymbol(square) msize(small)) ///
>        (scatter delta_2015 delta_1985 if flag_longrun == 1, ///
>         mcolor("20 20 19") msymbol(circle) msize(small)) ///
>        (lfit delta_2015 delta_1985 if flag_culture == 1, ///
>         lcolor("106 155 204") lpattern(dash) range(-0.8 1)) ///
>        (lfit delta_2015 delta_1985 if flag_longrun == 1, ///
>         lcolor("20 20 19") lpattern(solid) range(-0.8 1)) ///
>        (function y = x, range(-0.8 1) lcolor("185 185 185") lpattern(dot)), /
> //
>     xtitle("Correlate-Income Slope in 1985 ({&delta}{sub:1985})") ///
>     ytitle("Correlate-Income Slope in 2015 ({&delta}{sub:2015})") ///
>     title("Panel B: Long-Run Correlates and Culture", size(medium)) ///
>     legend(label(1 "Culture") label(2 "Long-Run Correlates") ///
>            label(3 "Fitted (Culture)") label(4 "Fitted (Long-Run)") ///
>            label(5 "45-degree line") rows(2) position(6) size(small)) ///
>     graphregion(color(white)) ///
>     note("Slopes: Long-Run = `slope_lr'; Culture = `slope_culture'", size(vsm
> all)) ///
>     xlabel(-0.5(0.5)1) ylabel(-0.5(0.5)1) ///
>     name(delta_B, replace)

. 
. graph combine delta_A delta_B, rows(1) cols(2) ///
>     graphregion(color(white)) ///
>     title("Stability of Correlate-Income Slopes", size(medium))

. graph export "stata_convergence2_delta_stability.png", replace width(2400)
(file stata_convergence2_delta_stability.png not found)
file stata_convergence2_delta_stability.png written in PNG format

. graph drop delta_A delta_B

. 
. display as text ""


. display as text "Exported: stata_convergence2_delta_stability.png"
Exported: stata_convergence2_delta_stability.png

. display as text ""


. display as text "INTERPRETATION: The correlate-income relationships are remar
> kably"
INTERPRETATION: The correlate-income relationships are remarkably

. display as text "STABLE. Points cluster near the 45-degree line, meaning rich
> er"
STABLE. Points cluster near the 45-degree line, meaning richer

. display as text "countries still have better institutions in the same proport
> ion as"
countries still have better institutions in the same proportion as

. display as text "30 years ago. Modernization theory passes its out-of-sample 
> test."
30 years ago. Modernization theory passes its out-of-sample test.

. 
. * Export delta slopes
. export delimited using "convergence2_delta_slopes.csv", replace
(file convergence2_delta_slopes.csv not found)
file convergence2_delta_slopes.csv saved

. display as text "Exported: convergence2_delta_slopes.csv"
Exported: convergence2_delta_slopes.csv

. restore

. 
. 
. *============================================================================
> ===
. * SECTION 7: GROWTH REGRESSIONS THEN VS NOW -- THE LAMBDA FLATTENING
. *
. *   In the 1990s, a massive literature ran growth regressions:
. *     Growth = alpha + beta* x Income + lambda x Correlate + epsilon
. *   These regressions identified which policies/institutions predict
. *   growth. They were the empirical backbone of the Washington Consensus.
. *
. *   Key question: Do these regressions hold up as an OUT-OF-SAMPLE test
. *   with 25 years of new data? The answer: Solow fundamentals (investment,
. *   population growth, education) remain somewhat stable, but short-run
. *   correlates (democracy, fiscal policy, financial institutions) have
. *   COLLAPSED as growth predictors.
. *============================================================================
> ===
. 
. display as text ""


. display as text "------------------------------------------------------------
> ----"
----------------------------------------------------------------

. display as text "  SECTION 7: GROWTH REGRESSIONS THEN VS NOW"
  SECTION 7: GROWTH REGRESSIONS THEN VS NOW

. display as text "------------------------------------------------------------
> ----"
----------------------------------------------------------------

. 
. use "convergence2_normalized.dta", clear

. 
. * ── Compute lambda for each correlate in base year and 2005 ──
. local p = 1

. foreach x in `total_plus_long_run' {
  2.     * Fix country sample by base year
.     preserve
  3.     drop if year < 1985
  4.     drop if `x' == .
  5.     keep if year == `min_year_`x'' & loggdp != . & `x' != .
  6.     keep code
  7.     tempfile temp_`x'
  8.     save `temp_`x''
  9.     restore
 10. 
.     preserve
 11.     merge m:1 code using `temp_`x'', keep(3) nogen
 12.     sort country_id year
 13.     gen gdp_growth = loggdp_growth_10
 14. 
.     foreach yr in `min_year_`x'' 2005 {
 15.         * Unconditional (beta)
.         quietly reg gdp_growth loggdp if year == `yr' & `x' != ., robust
 16.         local short_`yr'_`p' = _b[loggdp]
 17.         local shortse_`yr'_`p' = _se[loggdp]
 18. 
.         * Conditional (beta* and lambda)
.         quietly reg gdp_growth loggdp `x' if year == `yr' & `x' != ., robust
 19.         local long_`yr'_`p' = _b[loggdp]
 20.         local lambda_`yr'_`p' = _b[`x']
 21.         local lambdase_`yr'_`p' = _se[`x']
 22.         local obs_`yr'_`p' = e(N)
 23. 
.         * Delta
.         quietly reg `x' loggdp if year == `yr' & gdp_growth != ., robust
 24.         local delta_`yr'_`p' = _b[loggdp]
 25.         local deltase_`yr'_`p' = _se[loggdp]
 26.     }
 27.     local var_`p' = "`x'"
 28.     local minyr_`p' = `min_year_`x''
 29.     restore
 30.     local p = `p' + 1
 31. }
(4,350 observations deleted)
(810 observations deleted)
(4,817 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.000072 saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             6,670  
    -----------------------------------------
(1,186 missing values generated)
(4,350 observations deleted)
(22 observations deleted)
(5,584 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.000075 saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             7,888  
    -----------------------------------------
(1,477 missing values generated)
(4,350 observations deleted)
(1,526 observations deleted)
(4,098 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.000078 saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             6,844  
    -----------------------------------------
(1,235 missing values generated)
(4,350 observations deleted)
(1,526 observations deleted)
(4,098 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.00007b saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             6,844  
    -----------------------------------------
(1,235 missing values generated)
(4,350 observations deleted)
(898 observations deleted)
(4,684 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.00007e saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             9,280  
    -----------------------------------------
(2,392 missing values generated)
(4,350 observations deleted)
(791 observations deleted)
(4,827 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.00007h saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             7,192  
    -----------------------------------------
(1,309 missing values generated)
(4,350 observations deleted)
(591 observations deleted)
(5,019 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.00007k saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             7,656  
    -----------------------------------------
(1,431 missing values generated)
(4,350 observations deleted)
(591 observations deleted)
(5,019 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.00007n saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             7,656  
    -----------------------------------------
(1,431 missing values generated)
(4,350 observations deleted)
(1,830 observations deleted)
(3,760 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.00007q saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             8,816  
    -----------------------------------------
(2,200 missing values generated)
(4,350 observations deleted)
(1,999 observations deleted)
(3,584 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.00007t saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             9,222  
    -----------------------------------------
(2,353 missing values generated)
(4,350 observations deleted)
(2,004 observations deleted)
(3,580 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.00007w saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             9,164  
    -----------------------------------------
(2,344 missing values generated)
(4,350 observations deleted)
(2,003 observations deleted)
(3,580 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.000081 saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             9,222  
    -----------------------------------------
(2,353 missing values generated)
(4,350 observations deleted)
(1,979 observations deleted)
(3,604 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.000084 saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             9,222  
    -----------------------------------------
(2,353 missing values generated)
(4,350 observations deleted)
(1,984 observations deleted)
(3,599 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.000087 saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             9,222  
    -----------------------------------------
(2,353 missing values generated)
(4,350 observations deleted)
(2,263 observations deleted)
(3,382 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.00008a saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             5,626  
    -----------------------------------------
(1,253 missing values generated)
(4,350 observations deleted)
(2,237 observations deleted)
(3,408 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.00008d saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             5,626  
    -----------------------------------------
(1,253 missing values generated)
(4,350 observations deleted)
(2,249 observations deleted)
(3,396 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.00008g saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             5,626  
    -----------------------------------------
(1,253 missing values generated)
(4,350 observations deleted)
(2,242 observations deleted)
(3,403 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.00008j saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             5,626  
    -----------------------------------------
(1,253 missing values generated)
(4,350 observations deleted)
(2,572 observations deleted)
(3,125 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.00008m saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             2,610  
    -----------------------------------------
(655 missing values generated)
(4,350 observations deleted)
(2,572 observations deleted)
(3,125 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.00008p saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             2,610  
    -----------------------------------------
(655 missing values generated)
(4,350 observations deleted)
(2,708 observations deleted)
(2,986 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.00008s saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             2,784  
    -----------------------------------------
(484 missing values generated)
(4,350 observations deleted)
(2,730 observations deleted)
(2,963 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.00008v saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             2,842  
    -----------------------------------------
(503 missing values generated)
(4,350 observations deleted)
(896 observations deleted)
(4,735 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.000090 saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             6,438  
    -----------------------------------------
(1,140 missing values generated)
(4,350 observations deleted)
(2,249 observations deleted)
(3,396 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.000093 saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             5,626  
    -----------------------------------------
(1,253 missing values generated)
(4,350 observations deleted)
(906 observations deleted)
(4,703 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.000096 saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             7,714  
    -----------------------------------------
(1,430 missing values generated)
(4,350 observations deleted)
(1,219 observations deleted)
(4,413 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.000099 saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             6,380  
    -----------------------------------------
(1,113 missing values generated)
(4,350 observations deleted)
(474 observations deleted)
(5,144 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.00009c saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             7,192  
    -----------------------------------------
(1,289 missing values generated)
(4,350 observations deleted)
(1,658 observations deleted)
(3,984 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.00009f saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             5,800  
    -----------------------------------------
(1,020 missing values generated)
(4,350 observations deleted)
(1,044 observations deleted)
(4,594 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.00009i saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             6,032  
    -----------------------------------------
(1,079 missing values generated)
(4,350 observations deleted)
(1,053 observations deleted)
(4,585 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.00009l saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             6,032  
    -----------------------------------------
(1,079 missing values generated)
(4,350 observations deleted)
(2,257 observations deleted)
(3,388 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.00009o saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             5,626  
    -----------------------------------------
(1,253 missing values generated)
(4,350 observations deleted)
(2,246 observations deleted)
(3,399 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.00009r saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             5,626  
    -----------------------------------------
(1,253 missing values generated)
(4,350 observations deleted)
(3,762 observations deleted)
(1,922 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.00009u saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             3,364  
    -----------------------------------------
(564 missing values generated)
(4,350 observations deleted)
(330 observations deleted)
(5,276 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.00009x saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             7,888  
    -----------------------------------------
(1,477 missing values generated)
(4,350 observations deleted)
(330 observations deleted)
(5,276 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.0000a2 saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             7,888  
    -----------------------------------------
(1,477 missing values generated)
(4,350 observations deleted)
(330 observations deleted)
(5,276 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.0000a5 saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             7,888  
    -----------------------------------------
(1,477 missing values generated)
(4,350 observations deleted)
(330 observations deleted)
(5,276 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.0000a8 saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             7,888  
    -----------------------------------------
(1,477 missing values generated)
(4,350 observations deleted)
(330 observations deleted)
(5,276 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.0000ab saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             7,888  
    -----------------------------------------
(1,477 missing values generated)
(4,350 observations deleted)
(2,904 observations deleted)
(2,754 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.0000ae saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             4,872  
    -----------------------------------------
(849 missing values generated)
(4,350 observations deleted)
(3,762 observations deleted)
(1,920 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.0000ah saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             3,480  
    -----------------------------------------
(571 missing values generated)
(4,350 observations deleted)
(3,729 observations deleted)
(1,952 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.0000ak saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             3,538  
    -----------------------------------------
(580 missing values generated)
(4,350 observations deleted)
(1,485 observations deleted)
(4,133 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.0000an saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             7,192  
    -----------------------------------------
(1,279 missing values generated)
(4,350 observations deleted)
(627 observations deleted)
(4,986 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.0000aq saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             7,482  
    -----------------------------------------
(1,364 missing values generated)
(4,350 observations deleted)
(627 observations deleted)
(4,986 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.0000at saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             7,482  
    -----------------------------------------
(1,364 missing values generated)
(4,350 observations deleted)
(2,772 observations deleted)
(2,881 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.0000aw saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             5,162  
    -----------------------------------------
(812 missing values generated)
(4,350 observations deleted)
(3,465 observations deleted)
(2,217 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.0000b1 saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             3,480  
    -----------------------------------------
(590 missing values generated)
(4,350 observations deleted)
(3,465 observations deleted)
(2,217 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.0000b4 saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             3,480  
    -----------------------------------------
(590 missing values generated)
(4,350 observations deleted)
(3,465 observations deleted)
(2,217 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.0000b7 saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             3,480  
    -----------------------------------------
(590 missing values generated)
(4,350 observations deleted)
(3,465 observations deleted)
(2,217 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.0000ba saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             3,480  
    -----------------------------------------
(590 missing values generated)
(4,350 observations deleted)
(2,838 observations deleted)
(2,835 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.0000bd saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             4,002  
    -----------------------------------------
(681 missing values generated)
(4,350 observations deleted)
(2,838 observations deleted)
(2,834 observations deleted)
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.0000bg saved
    as .dta format

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             4,060  
    -----------------------------------------
(690 missing values generated)

. 
. * Create dataset for plotting
. local n_total = `p' - 1

. preserve

. clear

. set obs `n_total'
Number of observations (_N) was 0, now 51.

. gen str40 var = ""
(51 missing values generated)

. gen lambda_1985 = .
(51 missing values generated)

. gen lambda_2005 = .
(51 missing values generated)

. gen delta_1985 = .
(51 missing values generated)

. gen delta_2005 = .
(51 missing values generated)

. gen obs_1985 = .
(51 missing values generated)

. gen obs_2005 = .
(51 missing values generated)

. gen id = _n

. 
. forval i = 1/`n_total' {
  2.     replace var = "`var_`i''" if id == `i'
  3.     local myr = `minyr_`i''
  4.     capture replace lambda_1985 = `lambda_`myr'_`i'' if id == `i'
  5.     capture replace lambda_2005 = `lambda_2005_`i'' if id == `i'
  6.     capture replace delta_1985 = `delta_`myr'_`i'' if id == `i'
  7.     capture replace delta_2005 = `delta_2005_`i'' if id == `i'
  8.     capture replace obs_1985 = `obs_`myr'_`i'' if id == `i'
  9.     capture replace obs_2005 = `obs_2005_`i'' if id == `i'
 10. }
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)

. 
. * Flag variable groups
. gen flag_solow = 0

. foreach v in `solow' {
  2.     replace flag_solow = 1 if var == "`v'"
  3. }
(1 real change made)
(1 real change made)
(1 real change made)

. gen flag_long_run = 0

. foreach v in `long_run' `culture' {
  2.     replace flag_long_run = 1 if var == "`v'"
  3. }
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)

. gen flag_culture = 0

. foreach v in `culture' {
  2.     replace flag_culture = 1 if var == "`v'"
  3. }
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)

. gen flag_longrun = 0

. foreach v in `long_run' {
  2.     replace flag_longrun = 1 if var == "`v'"
  3. }
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)
(1 real change made)

. 
. * Drop standardized variables
. drop if inlist(var, "WGI_pol_stability", "WGI_gov_effectiveness", "WGI_regula
> tory_quality") | ///
>     inlist(var, "WGI_rule_law", "WGI_control_corruption", "overallscore") | /
> //
>     inlist(var, "governmentintegrity", "propertyrights", "businessfreedom", "
> taxburden", "financialfreedom")
(11 observations deleted)

. 
. * ── Figure 6 Panel A: Solow + Short-run ──
. reg lambda_2005 lambda_1985 if flag_solow == 0 & flag_long_run == 0

      Source |       SS           df       MS      Number of obs   =        18
-------------+----------------------------------   F(1, 16)        =      1.08
       Model |  .170637698         1  .170637698   Prob > F        =    0.3145
    Residual |  2.53125454        16  .158203408   R-squared       =    0.0632
-------------+----------------------------------   Adj R-squared   =    0.0046
       Total |  2.70189223        17  .158934837   Root MSE        =    .39775

------------------------------------------------------------------------------
 lambda_2005 | Coefficient  Std. err.      t    P>|t|     [95% conf. interval]
-------------+----------------------------------------------------------------
 lambda_1985 |   .1886416   .1816385     1.04   0.314    -.1964148     .573698
       _cons |     -.1064   .0969526    -1.10   0.289    -.3119304    .0991304
------------------------------------------------------------------------------

. local slope_sr: display %5.3f _b[lambda_1985]

. local r2_sr: display %5.3f e(r2)

. reg lambda_2005 lambda_1985 if flag_solow == 1 & flag_long_run == 0

      Source |       SS           df       MS      Number of obs   =         3
-------------+----------------------------------   F(1, 1)         =     17.82
       Model |  .951941298         1  .951941298   Prob > F        =    0.1481
    Residual |  .053430425         1  .053430425   R-squared       =    0.9469
-------------+----------------------------------   Adj R-squared   =    0.8937
       Total |  1.00537172         2  .502685861   Root MSE        =    .23115

------------------------------------------------------------------------------
 lambda_2005 | Coefficient  Std. err.      t    P>|t|     [95% conf. interval]
-------------+----------------------------------------------------------------
 lambda_1985 |   .8614424   .2040871     4.22   0.148     -1.73173    3.454614
       _cons |  -.0242646   .1391643    -0.17   0.890    -1.792515    1.743986
------------------------------------------------------------------------------

. local slope_solow: display %5.3f _b[lambda_1985]

. local r2_solow: display %5.3f e(r2)

. 
. twoway (scatter lambda_2005 lambda_1985 if flag_solow == 0 & flag_long_run ==
>  0, ///
>         mcolor("106 155 204") msymbol(square) msize(small)) ///
>        (scatter lambda_2005 lambda_1985 if flag_solow == 1, ///
>         mcolor("20 20 19") msymbol(circle) msize(small)) ///
>        (lfit lambda_2005 lambda_1985 if flag_solow == 0 & flag_long_run == 0,
>  ///
>         lcolor("106 155 204") lpattern(dash) range(-1.5 1.5)) ///
>        (lfit lambda_2005 lambda_1985 if flag_solow == 1 & flag_long_run == 0,
>  ///
>         lcolor("20 20 19") lpattern(solid) range(-1.5 1.5)) ///
>        (function y = x, range(-1.5 1.5) lcolor("185 185 185") lpattern(dot)),
>  ///
>     xtitle("Growth Regression Coefficient in 1985 ({&lambda}{sub:1985})") ///
>     ytitle("Growth Regression Coefficient in 2005 ({&lambda}{sub:2005})") ///
>     title("Panel A: Solow Fundamentals & Short-Run Correlates", size(medium))
>  ///
>     legend(label(1 "Short-Run Correlates") label(2 "Solow Fundamentals") ///
>            label(3 "Fitted (Short-Run)") label(4 "Fitted (Solow)") ///
>            label(5 "45-degree line") rows(2) position(6) size(small)) ///
>     graphregion(color(white)) yline(0, lpattern(dot) lcolor("217 119 87")) //
> /
>     note("Slopes: Solow = `slope_solow' (R{sup:2} = `r2_solow'); Short-Run = 
> `slope_sr' (R{sup:2} = `r2_sr')", size(vsmall)) ///
>     xlabel(-1.5(0.5)1.5) ylabel(-1.5(0.5)1.5) ///
>     name(lambda_A, replace)

. 
. display as text ""


. display as text "Lambda slopes:"
Lambda slopes:

. display as text "  Solow: slope = `slope_solow', R-sq = `r2_solow'"
  Solow: slope = 0.861, R-sq = 0.947

. display as text "  Short-run: slope = `slope_sr', R-sq = `r2_sr'"
  Short-run: slope = 0.189, R-sq = 0.063

. 
. * ── Figure 6 Panel B: Long-run + Culture ──
. capture reg lambda_2005 lambda_1985 if flag_culture == 1

. local slope_culture: display %5.3f _b[lambda_1985]

. capture reg lambda_2005 lambda_1985 if flag_longrun == 1

. local slope_lr: display %5.3f _b[lambda_1985]

. 
. twoway (scatter lambda_2005 lambda_1985 if flag_culture == 1, ///
>         mcolor("106 155 204") msymbol(square) msize(small)) ///
>        (scatter lambda_2005 lambda_1985 if flag_longrun == 1, ///
>         mcolor("20 20 19") msymbol(circle) msize(small)) ///
>        (lfit lambda_2005 lambda_1985 if flag_culture == 1, ///
>         lcolor("106 155 204") lpattern(dash) range(-1.5 1.5)) ///
>        (lfit lambda_2005 lambda_1985 if flag_longrun == 1, ///
>         lcolor("20 20 19") lpattern(solid) range(-1.5 1.5)) ///
>        (function y = x, range(-1.5 1.5) lcolor("185 185 185") lpattern(dot)),
>  ///
>     xtitle("Growth Regression Coefficient in 1985 ({&lambda}{sub:1985})") ///
>     ytitle("Growth Regression Coefficient in 2005 ({&lambda}{sub:2005})") ///
>     title("Panel B: Long-Run Correlates and Culture", size(medium)) ///
>     legend(label(1 "Culture") label(2 "Long-Run Correlates") ///
>            label(3 "Fitted (Culture)") label(4 "Fitted (Long-Run)") ///
>            label(5 "45-degree line") rows(2) position(6) size(small)) ///
>     graphregion(color(white)) yline(0, lpattern(dot) lcolor("217 119 87")) //
> /
>     note("Slopes: Long-Run = `slope_lr'; Culture = `slope_culture'", size(vsm
> all)) ///
>     xlabel(-1.5(0.5)1.5) ylabel(-1.5(0.5)1.5) ///
>     name(lambda_B, replace)

. 
. graph combine lambda_A lambda_B, rows(1) cols(2) ///
>     graphregion(color(white)) ///
>     title("Growth Regression Coefficients: 1985 vs 2005", size(medium))

. graph export "stata_convergence2_lambda_flattening.png", replace width(2400)
(file stata_convergence2_lambda_flattening.png not found)
file stata_convergence2_lambda_flattening.png written in PNG format

. graph drop lambda_A lambda_B

. 
. display as text ""


. display as text "Exported: stata_convergence2_lambda_flattening.png"
Exported: stata_convergence2_lambda_flattening.png

. display as text ""


. display as text "INTERPRETATION: This is the most striking result. Growth reg
> ression"
INTERPRETATION: This is the most striking result. Growth regression

. display as text "coefficients for SHORT-RUN correlates essentially collapsed 
> (slope 0.18,"
coefficients for SHORT-RUN correlates essentially collapsed (slope 0.18,

. display as text "R-sq 0.06). Variables that predicted growth in the 1990s no 
> longer do."
R-sq 0.06). Variables that predicted growth in the 1990s no longer do.

. display as text "Solow fundamentals are more stable (slope ~0.86, R-sq ~0.95)
> ."
Solow fundamentals are more stable (slope ~0.86, R-sq ~0.95).

. display as text "This is an OUT-OF-SAMPLE test: the 1990s growth literature f
> ails."
This is an OUT-OF-SAMPLE test: the 1990s growth literature fails.

. 
. * ── Compute delta*lambda products ──
. gen dl_1985 = delta_1985 * lambda_1985

. gen dl_2005 = delta_2005 * lambda_2005

. 
. * Export comprehensive Table 4
. export delimited using "convergence2_delta_lambda.csv", replace
(file convergence2_delta_lambda.csv not found)
file convergence2_delta_lambda.csv saved

. display as text "Exported: convergence2_delta_lambda.csv"
Exported: convergence2_delta_lambda.csv

. restore

. 
. 
. *============================================================================
> ===
. * SECTION 8: THE PUNCHLINE -- ABSOLUTE CONVERGES TO CONDITIONAL
. *
. *   Everything comes together here. The OVB formula tells us:
. *     beta - beta* = delta x lambda
. *
. *   We showed that delta (correlate-income slopes) stayed stable
. *   while lambda (growth regression coefficients) flattened.
. *   Therefore delta x lambda shrank toward zero, closing the gap
. *   between unconditional (beta) and conditional (beta*) convergence.
. *
. *   Result: The world "converged to convergence."
. *============================================================================
> ===
. 
. display as text ""


. display as text "------------------------------------------------------------
> ----"
----------------------------------------------------------------

. display as text "  SECTION 8: ABSOLUTE CONVERGENCE CONVERGES TO CONDITIONAL"
  SECTION 8: ABSOLUTE CONVERGENCE CONVERGES TO CONDITIONAL

. display as text "------------------------------------------------------------
> ----"
----------------------------------------------------------------

. 
. * ── 8A: Univariate OVB gap (Figure 7) ──
. display as text ""


. display as text "8A: THE OVB GAP -- delta x lambda"
8A: THE OVB GAP -- delta x lambda

. 
. import delimited "convergence2_delta_lambda.csv", clear
(encoding automatically selected: ISO-8859-1)
(14 vars, 40 obs)

. 
. * ── Figure 7 Panel A: Solow + Short-run ──
. reg dl_2005 dl_1985 if flag_solow == 0 & flag_long_run == 0

      Source |       SS           df       MS      Number of obs   =        18
-------------+----------------------------------   F(1, 16)        =      1.25
       Model |  .006932259         1  .006932259   Prob > F        =    0.2795
    Residual |   .08850039        16  .005531274   R-squared       =    0.0726
-------------+----------------------------------   Adj R-squared   =    0.0147
       Total |  .095432649        17  .005613685   Root MSE        =    .07437

------------------------------------------------------------------------------
     dl_2005 | Coefficient  Std. err.      t    P>|t|     [95% conf. interval]
-------------+----------------------------------------------------------------
     dl_1985 |   .0899846   .0803791     1.12   0.279    -.0804116    .2603808
       _cons |   .0290847   .0206226     1.41   0.178    -.0146333    .0728027
------------------------------------------------------------------------------

. local slope_sr: display %5.3f _b[dl_1985]

. reg dl_2005 dl_1985 if flag_solow == 1 & flag_long_run == 0

      Source |       SS           df       MS      Number of obs   =         3
-------------+----------------------------------   F(1, 1)         =     80.78
       Model |  .090667546         1  .090667546   Prob > F        =    0.0705
    Residual |  .001122452         1  .001122452   R-squared       =    0.9878
-------------+----------------------------------   Adj R-squared   =    0.9755
       Total |  .091789998         2  .045894999   Root MSE        =     .0335

------------------------------------------------------------------------------
     dl_2005 | Coefficient  Std. err.      t    P>|t|     [95% conf. interval]
-------------+----------------------------------------------------------------
     dl_1985 |   .7400633    .082343     8.99   0.071    -.3062041    1.786331
       _cons |  -.0285278   .0323855    -0.88   0.540    -.4400248    .3829692
------------------------------------------------------------------------------

. local slope_solow: display %5.3f _b[dl_1985]

. 
. twoway (scatter dl_2005 dl_1985 if flag_solow == 0 & flag_long_run == 0, ///
>         mcolor("106 155 204") msymbol(square) msize(small)) ///
>        (scatter dl_2005 dl_1985 if flag_solow == 1, ///
>         mcolor("20 20 19") msymbol(circle) msize(small)) ///
>        (lfit dl_2005 dl_1985 if flag_solow == 0 & flag_long_run == 0, ///
>         lcolor("106 155 204") lpattern(dash) range(-0.5 0.6)) ///
>        (lfit dl_2005 dl_1985 if flag_solow == 1 & flag_long_run == 0, ///
>         lcolor("20 20 19") lpattern(solid) range(-0.5 0.6)) ///
>        (function y = x, range(-0.5 0.6) lcolor("185 185 185") lpattern(dot)),
>  ///
>     xtitle("Effect of Conditioning in 1985 ({&delta}{sub:1985}{&lambda}{sub:1
> 985})") ///
>     ytitle("Effect of Conditioning in 2005 ({&delta}{sub:2005}{&lambda}{sub:2
> 005})") ///
>     title("Panel A: Solow & Short-Run", size(medium)) ///
>     legend(label(1 "Short-Run") label(2 "Solow") ///
>            label(3 "Fitted (Short-Run)") label(4 "Fitted (Solow)") ///
>            label(5 "45-degree line") rows(2) position(6) size(small)) ///
>     graphregion(color(white)) yline(0, lpattern(dot) lcolor("217 119 87")) //
> /
>     note("Slopes: Solow = `slope_solow'; Short-Run = `slope_sr'", size(vsmall
> )) ///
>     xlabel(-0.5(0.25)0.5) ylabel(-0.5(0.25)0.5) ///
>     name(ovb_A, replace)

. 
. * ── Figure 7 Panel B: Long-run + Culture ──
. capture reg dl_2005 dl_1985 if flag_culture == 1

. local slope_culture: display %5.3f _b[dl_1985]

. capture reg dl_2005 dl_1985 if flag_longrun == 1

. local slope_lr: display %5.3f _b[dl_1985]

. 
. twoway (scatter dl_2005 dl_1985 if flag_culture == 1, ///
>         mcolor("106 155 204") msymbol(square) msize(small)) ///
>        (scatter dl_2005 dl_1985 if flag_longrun == 1, ///
>         mcolor("20 20 19") msymbol(circle) msize(small)) ///
>        (lfit dl_2005 dl_1985 if flag_culture == 1, ///
>         lcolor("106 155 204") lpattern(dash) range(-0.5 0.6)) ///
>        (lfit dl_2005 dl_1985 if flag_longrun == 1, ///
>         lcolor("20 20 19") lpattern(solid) range(-0.5 0.6)) ///
>        (function y = x, range(-0.5 0.6) lcolor("185 185 185") lpattern(dot)),
>  ///
>     xtitle("Effect of Conditioning in 1985 ({&delta}{sub:1985}{&lambda}{sub:1
> 985})") ///
>     ytitle("Effect of Conditioning in 2005 ({&delta}{sub:2005}{&lambda}{sub:2
> 005})") ///
>     title("Panel B: Long-Run & Culture", size(medium)) ///
>     legend(label(1 "Culture") label(2 "Long-Run") ///
>            label(3 "Fitted (Culture)") label(4 "Fitted (Long-Run)") ///
>            label(5 "45-degree line") rows(2) position(6) size(small)) ///
>     graphregion(color(white)) yline(0, lpattern(dot) lcolor("217 119 87")) //
> /
>     note("Slopes: Long-Run = `slope_lr'; Culture = `slope_culture'", size(vsm
> all)) ///
>     xlabel(-0.5(0.25)0.5) ylabel(-0.5(0.25)0.5) ///
>     name(ovb_B, replace)

. 
. graph combine ovb_A ovb_B, rows(1) cols(2) ///
>     graphregion(color(white)) ///
>     title("Gap Between Unconditional and Conditional Convergence", size(mediu
> m))

. graph export "stata_convergence2_ovb_gap.png", replace width(2400)
(file stata_convergence2_ovb_gap.png not found)
file stata_convergence2_ovb_gap.png written in PNG format

. graph drop ovb_A ovb_B

. 
. display as text ""


. display as text "Exported: stata_convergence2_ovb_gap.png"
Exported: stata_convergence2_ovb_gap.png

. display as text ""


. display as text "INTERPRETATION: The product delta x lambda has shrunk toward
>  zero"
INTERPRETATION: The product delta x lambda has shrunk toward zero

. display as text "for most correlates. The 'omitted variable bias' that made"
for most correlates. The 'omitted variable bias' that made

. display as text "unconditional convergence look worse than conditional conver
> gence"
unconditional convergence look worse than conditional convergence

. display as text "has largely vanished. This happened because lambda flattened
> "
has largely vanished. This happened because lambda flattened

. display as text "(growth regressions lost predictive power), NOT because delt
> a"
(growth regressions lost predictive power), NOT because delta

. display as text "changed (income-institution relationships are stable)."
changed (income-institution relationships are stable).

. 
. * ── 8B: Multivariate -- The closing gap over time (Figure 8) ──
. display as text ""


. display as text "8B: THE CLOSING GAP -- UNCONDITIONAL VS CONDITIONAL CONVERGE
> NCE"
8B: THE CLOSING GAP -- UNCONDITIONAL VS CONDITIONAL CONVERGENCE

. 
. use "convergence2_normalized.dta", clear

. 
. * Fix the country sample: countries with ALL 10 correlates in 1985
. local base_year = 1985

. local var_all polity2 FH_political_rights FH_civil_liberties pri_inv ///
>     gov_spending inflation WDI_credit credit barrolee2060 edugap

. 
. keep if year == `base_year'
(9,918 observations deleted)

. foreach ins of local var_all {
  2.     keep if `ins' != .
  3. }
(43 observations deleted)
(3 observations deleted)
(0 observations deleted)
(7 observations deleted)
(22 observations deleted)
(0 observations deleted)
(18 observations deleted)
(1 observation deleted)
(7 observations deleted)
(0 observations deleted)

. keep if loggdp != .
(0 observations deleted)

. keep code

. count
  73

. local n_fixed = r(N)

. display as text "Fixed sample: `n_fixed' countries with complete data"
Fixed sample: 73 countries with complete data

. tempfile fixed_sample

. save `fixed_sample'
file /var/folders/tq/t98kb27n6djgrh085g476yhc0000gn/T//St05194.0000bj saved
    as .dta format

. 
. * Merge back and prepare
. use "convergence2_normalized.dta", clear

. merge m:1 code using `fixed_sample', keep(3) nogen

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             4,234  
    -----------------------------------------

. xtset country_id year

Panel variable: country_id (strongly balanced)
 Time variable: year, 1960 to 2017
         Delta: 1 unit

. gen gdp_growth = loggdp_growth_10
(698 missing values generated)

. 
. * Impute missing correlates with most recent value
. forval i = `base_year'/2007 {
  2.     foreach ins of local var_all {
  3.         by country_id: replace `ins' = L.`ins' if `ins' == .
  4.     }
  5. }
(4 real changes made)
(73 real changes made)
(73 real changes made)
(146 real changes made)
(50 real changes made)
(15 real changes made)
(83 real changes made)
(83 real changes made)
(146 real changes made)
(146 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)

. 
. * ── Run regressions for each year ──
. forval yr = `base_year'/2007 {
  2.     * Check data availability
.     quietly count if year == `yr' & gdp_growth != .
  3.     if r(N) < 20 continue
  4. 
.     * Unconditional convergence
.     quietly reg gdp_growth loggdp if year == `yr', robust cluster(country_id)
  5.     local coefshort_`yr' = _b[loggdp]
  6.     local seshort_`yr' = _se[loggdp]
  7. 
.     * Conditional convergence (with all 10 correlates)
.     quietly reg gdp_growth loggdp `var_all' if year == `yr', robust cluster(c
> ountry_id)
  8.     local coeflong_`yr' = _b[loggdp]
  9.     local selong_`yr' = _se[loggdp]
 10. }

. 
. * ── Create dataset and plot ──
. preserve

. clear

. local n_years = 2007 - `base_year' + 1

. set obs `n_years'
Number of observations (_N) was 0, now 23.

. gen year = _n + `base_year' - 1

. gen beta_unconditional = .
(23 missing values generated)

. gen beta_conditional = .
(23 missing values generated)

. gen se_unconditional = .
(23 missing values generated)

. gen se_conditional = .
(23 missing values generated)

. 
. forval yr = `base_year'/2007 {
  2.     capture replace beta_unconditional = `coefshort_`yr'' if year == `yr'
  3.     capture replace beta_conditional = `coeflong_`yr'' if year == `yr'
  4.     capture replace se_unconditional = `seshort_`yr'' if year == `yr'
  5.     capture replace se_conditional = `selong_`yr'' if year == `yr'
  6. }

. 
. drop if beta_unconditional == .
(0 observations deleted)

. 
. * Plot the closing gap
. gen zero = 0

. twoway (line beta_unconditional year, lcolor("20 20 19") lwidth(medthick) lpa
> ttern(solid)) ///
>        (line beta_conditional year, lcolor("106 155 204") lwidth(medthick) lp
> attern(solid)) ///
>        (line zero year, lcolor("217 119 87") lpattern(dot) lwidth(thin)), ///
>     graphregion(color(white)) ///
>     legend(label(1 "Absolute Convergence ({&beta})") ///
>            label(2 "Conditional Convergence ({&beta}*)") ///
>            order(1 2) position(6) rows(1)) ///
>     xtitle("Year") ytitle("Convergence Coefficient") ///
>     title("Absolute Convergence Converges to Conditional", size(medium)) ///
>     note("Conditional on: Polity 2, FH Rights, FH Civil Lib, Private Inv," //
> /
>          "Gov Spending, Inflation, Credit (Pvt), Credit (Fin), Education, Edu
>  Gap", ///
>          size(vsmall))

. graph export "stata_convergence2_absolute_vs_conditional.png", replace width(
> 2400)
(file stata_convergence2_absolute_vs_conditional.png not found)
file stata_convergence2_absolute_vs_conditional.png written in PNG format

. 
. display as text ""


. display as text "Exported: stata_convergence2_absolute_vs_conditional.png"
Exported: stata_convergence2_absolute_vs_conditional.png

. 
. * Export
. export delimited using "convergence2_conditional_convergence.csv", replace
(file convergence2_conditional_convergence.csv not found)
file convergence2_conditional_convergence.csv saved

. display as text "Exported: convergence2_conditional_convergence.csv"
Exported: convergence2_conditional_convergence.csv

. restore

. 
. * ── 8C: Table 5 -- Multivariate regressions ──
. display as text ""


. display as text "TABLE 5: ABSOLUTE AND CONDITIONAL CONVERGENCE"
TABLE 5: ABSOLUTE AND CONDITIONAL CONVERGENCE

. display as text "─────────────────────────────────────────────"
─────────────────────────────────────────────

. 
. use "convergence2_normalized.dta", clear

. merge m:1 code using `fixed_sample', keep(3) nogen

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                             4,234  
    -----------------------------------------

. xtset country_id year

Panel variable: country_id (strongly balanced)
 Time variable: year, 1960 to 2017
         Delta: 1 unit

. gen gdp_growth = loggdp_growth_10
(698 missing values generated)

. 
. * Impute missing values
. forval i = `base_year'/2007 {
  2.     foreach ins of local var_all {
  3.         by country_id: replace `ins' = L.`ins' if `ins' == .
  4.     }
  5. }
(4 real changes made)
(73 real changes made)
(73 real changes made)
(146 real changes made)
(50 real changes made)
(15 real changes made)
(83 real changes made)
(83 real changes made)
(146 real changes made)
(146 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)

. 
. * Keep only relevant observations
. keep if polity2 != . & FH_political_rights != . & pri_inv != . & ///
>     gov_spending != . & inflation != . & FH_civil_liberties != . & ///
>     WDI_credit != . & credit != . & investment != . & ///
>     population_growth != . & barrolee2060 != .
(1,005 observations deleted)

. 
. estimates clear

. 
. foreach yr in 1985 2005 {
  2.     * (1) Absolute convergence only
.     eststo abs_`yr': reg gdp_growth loggdp if year == `yr', robust cluster(co
> untry_id)
  3. 
.     * (2) + Solow fundamentals
.     eststo solow_`yr': reg gdp_growth loggdp investment population_growth bar
> rolee2060 ///
>         if year == `yr', robust cluster(country_id)
  4. 
.     * (3) + Short-run correlates
.     eststo short_`yr': reg gdp_growth loggdp polity2 FH_political_rights ///
>         pri_inv gov_spending inflation FH_civil_liberties WDI_credit credit /
> //
>         if year == `yr', robust cluster(country_id)
  5. 
.     * (4) + Both
.     eststo full_`yr': reg gdp_growth loggdp investment population_growth barr
> olee2060 ///
>         polity2 FH_political_rights pri_inv gov_spending inflation ///
>         FH_civil_liberties WDI_credit credit ///
>         if year == `yr', robust cluster(country_id)
  6. }

Linear regression                               Number of obs     =         73
                                                F(1, 72)          =       2.78
                                                Prob > F          =     0.0999
                                                R-squared         =     0.0283
                                                Root MSE          =     2.5675

                            (Std. err. adjusted for 73 clusters in country_id)
------------------------------------------------------------------------------
             |               Robust
  gdp_growth | Coefficient  std. err.      t    P>|t|     [95% conf. interval]
-------------+----------------------------------------------------------------
      loggdp |   .4201815   .2520588     1.67   0.100    -.0822886    .9226515
       _cons |  -2.171906   2.230131    -0.97   0.333    -6.617592    2.273779
------------------------------------------------------------------------------

Linear regression                               Number of obs     =         73
                                                F(4, 72)          =       3.00
                                                Prob > F          =     0.0238
                                                R-squared         =     0.1545
                                                Root MSE          =     2.4473

                            (Std. err. adjusted for 73 clusters in country_id)
------------------------------------------------------------------------------
             |               Robust
  gdp_growth | Coefficient  std. err.      t    P>|t|     [95% conf. interval]
-------------+----------------------------------------------------------------
      loggdp |  -.4465336   .6606123    -0.68   0.501     -1.76344     .870373
  investment |    .297557   .3774616     0.79   0.433    -.4548988    1.050013
population~h |  -1.034066   .6261898    -1.65   0.103    -2.282353    .2142203
barrolee2060 |   .4279263   .5245996     0.82   0.417    -.6178439    1.473697
       _cons |   5.545956   5.457876     1.02   0.313    -5.334122    16.42603
------------------------------------------------------------------------------

Linear regression                               Number of obs     =         73
                                                F(9, 72)          =       1.43
                                                Prob > F          =     0.1901
                                                R-squared         =     0.1522
                                                Root MSE          =      2.546

                            (Std. err. adjusted for 73 clusters in country_id)
------------------------------------------------------------------------------
             |               Robust
  gdp_growth | Coefficient  std. err.      t    P>|t|     [95% conf. interval]
-------------+----------------------------------------------------------------
      loggdp |  -.4352669   .4567783    -0.95   0.344    -1.345838    .4753041
     polity2 |  -.5577174   .7036726    -0.79   0.431    -1.960463    .8450283
FH_politic~s |   1.304372   .9891486     1.32   0.191    -.6674599    3.276203
     pri_inv |  -.1836291   .3323965    -0.55   0.582    -.8462494    .4789912
gov_spending |  -.0167872   .3859757    -0.04   0.965    -.7862156    .7526413
   inflation |  -.0993518   .2352102    -0.42   0.674    -.5682348    .3695312
FH_civil_l~s |   .0958068   .6465207     0.15   0.883    -1.193009    1.384622
  WDI_credit |   .9152502   .4671189     1.96   0.054    -.0159343    1.846435
      credit |  -.3935813   .5070149    -0.78   0.440    -1.404297    .6171343
       _cons |   1.212797   3.313306     0.37   0.715    -5.392158    7.817753
------------------------------------------------------------------------------

Linear regression                               Number of obs     =         73
                                                F(12, 72)         =       1.92
                                                Prob > F          =     0.0454
                                                R-squared         =     0.2285
                                                Root MSE          =     2.4888

                            (Std. err. adjusted for 73 clusters in country_id)
------------------------------------------------------------------------------
             |               Robust
  gdp_growth | Coefficient  std. err.      t    P>|t|     [95% conf. interval]
-------------+----------------------------------------------------------------
      loggdp |  -.8160794   .6192036    -1.32   0.192    -2.050439    .4182805
  investment |  -.0469099   .4778636    -0.10   0.922    -.9995136    .9056937
population~h |   -1.02402   .6614747    -1.55   0.126    -2.342646    .2946058
barrolee2060 |   .4919603    .619478     0.79   0.430    -.7429466    1.726867
     polity2 |  -.9160444    .728197    -1.26   0.212    -2.367679    .5355899
FH_politic~s |   1.566683   .9305315     1.68   0.097    -.2882972    3.421664
     pri_inv |  -.2666263   .3285112    -0.81   0.420    -.9215014    .3882487
gov_spending |   .0773386   .4146501     0.19   0.853    -.7492512    .9039285
   inflation |  -.0284048   .2427859    -0.12   0.907    -.5123896    .4555801
FH_civil_l~s |  -.4813038   .7492818    -0.64   0.523     -1.97497    1.012362
  WDI_credit |   .8748362    .531292     1.65   0.104    -.1842751    1.933947
      credit |  -.5457493   .5726971    -0.95   0.344      -1.6874    .5959016
       _cons |   6.643614   4.686821     1.42   0.161    -2.699393    15.98662
------------------------------------------------------------------------------

Linear regression                               Number of obs     =         73
                                                F(1, 72)          =       7.52
                                                Prob > F          =     0.0077
                                                R-squared         =     0.1005
                                                Root MSE          =      2.034

                            (Std. err. adjusted for 73 clusters in country_id)
------------------------------------------------------------------------------
             |               Robust
  gdp_growth | Coefficient  std. err.      t    P>|t|     [95% conf. interval]
-------------+----------------------------------------------------------------
      loggdp |  -.5557415   .2026305    -2.74   0.008    -.9596781   -.1518049
       _cons |   7.221468   1.903213     3.79   0.000     3.427482    11.01545
------------------------------------------------------------------------------

Linear regression                               Number of obs     =         73
                                                F(4, 72)          =       4.72
                                                Prob > F          =     0.0019
                                                R-squared         =     0.2468
                                                Root MSE          =     1.9019

                            (Std. err. adjusted for 73 clusters in country_id)
------------------------------------------------------------------------------
             |               Robust
  gdp_growth | Coefficient  std. err.      t    P>|t|     [95% conf. interval]
-------------+----------------------------------------------------------------
      loggdp |  -1.176212   .3089425    -3.81   0.000    -1.792078   -.5603466
  investment |   .3385746   .3766494     0.90   0.372    -.4122622    1.089411
population~h |  -.6931941   .3526188    -1.97   0.053    -1.396127    .0097386
barrolee2060 |   .6068879     .36832     1.65   0.104    -.1273446     1.34112
       _cons |   11.34253   2.818981     4.02   0.000     5.722998    16.96207
------------------------------------------------------------------------------

Linear regression                               Number of obs     =         73
                                                F(9, 72)          =       3.34
                                                Prob > F          =     0.0018
                                                R-squared         =     0.2577
                                                Root MSE          =     1.9615

                            (Std. err. adjusted for 73 clusters in country_id)
------------------------------------------------------------------------------
             |               Robust
  gdp_growth | Coefficient  std. err.      t    P>|t|     [95% conf. interval]
-------------+----------------------------------------------------------------
      loggdp |  -.5571273   .3268792    -1.70   0.093    -1.208749    .0944944
     polity2 |   .7591571   .3958097     1.92   0.059    -.0298752    1.548189
FH_politic~s |   -.010846   .5417579    -0.02   0.984    -1.090821    1.069129
     pri_inv |   .5470107   .5969732     0.92   0.363    -.6430336    1.737055
gov_spending |  -.3618838   .3082943    -1.17   0.244    -.9764573    .2526897
   inflation |  -2.131698   .9669006    -2.20   0.031    -4.059179   -.2042168
FH_civil_l~s |  -.3368886   .9921384    -0.34   0.735     -2.31468    1.640903
  WDI_credit |   .1774811   .5035481     0.35   0.726    -.8263236    1.181286
      credit |  -.3628582   .4693262    -0.77   0.442    -1.298443    .5727266
       _cons |   7.783359   4.025991     1.93   0.057    -.2423082    15.80903
------------------------------------------------------------------------------

Linear regression                               Number of obs     =         73
                                                F(12, 72)         =       5.72
                                                Prob > F          =     0.0000
                                                R-squared         =     0.3551
                                                Root MSE          =     1.8735

                            (Std. err. adjusted for 73 clusters in country_id)
------------------------------------------------------------------------------
             |               Robust
  gdp_growth | Coefficient  std. err.      t    P>|t|     [95% conf. interval]
-------------+----------------------------------------------------------------
      loggdp |  -1.039898   .3934765    -2.64   0.010    -1.824279   -.2555166
  investment |   .4244438   .3895906     1.09   0.280    -.3521909    1.201078
population~h |  -.6836828   .4256026    -1.61   0.113    -1.532106    .1647405
barrolee2060 |   .6446063   .4724869     1.36   0.177     -.297279    1.586492
     polity2 |   .0869522   .4601193     0.19   0.851    -.8302789    1.004183
FH_politic~s |    .362034    .543176     0.67   0.507    -.7207675    1.444835
     pri_inv |    .479964   .5317591     0.90   0.370    -.5800784    1.540006
gov_spending |  -.4548132   .3012881    -1.51   0.136     -1.05542    .1457937
   inflation |  -1.404826   .8285136    -1.70   0.094    -3.056438    .2467855
FH_civil_l~s |   -.295942   .8690125    -0.34   0.734    -2.028287    1.436403
  WDI_credit |   .2297701   .4728462     0.49   0.628    -.7128316    1.172372
      credit |  -.6460478   .4759248    -1.36   0.179    -1.594787     .302691
       _cons |   10.03068   4.322639     2.32   0.023     1.413658     18.6477
------------------------------------------------------------------------------

. 
. esttab abs_1985 solow_1985 short_1985 full_1985 ///
>        abs_2005 solow_2005 short_2005 full_2005, ///
>     keep(loggdp investment population_growth barrolee2060 polity2 ///
>          FH_political_rights pri_inv gov_spending inflation ///
>          FH_civil_liberties WDI_credit credit _cons) ///
>     se star(* 0.10 ** 0.05 *** 0.01) ///
>     title("Table 5: Absolute and Conditional Convergence") ///
>     mtitles("(1)" "(2)" "(3)" "(4)" "(5)" "(6)" "(7)" "(8)") ///
>     mgroups("1985-1995" "2005-2015", pattern(1 0 0 0 1 0 0 0)) ///
>     stats(N r2, labels("Observations" "R-squared") fmt(%9.0f %9.3f)) ///
>     b(%9.3f) se(%9.3f) compress

Table 5: Absolute and Conditional Convergence
-------------------------------------------------------------------------------
> -----------------------------------
           1985-1995                                           2005-2015       
>                                    
                 (1)          (2)          (3)          (4)          (5)       
>    (6)          (7)          (8)   
                 (1)          (2)          (3)          (4)          (5)       
>    (6)          (7)          (8)   
-------------------------------------------------------------------------------
> -----------------------------------
loggdp         0.420*      -0.447       -0.435       -0.816       -0.556***    
> -1.176***    -0.557*      -1.040** 
             (0.252)      (0.661)      (0.457)      (0.619)      (0.203)      (
> 0.309)      (0.327)      (0.393)   

investment                  0.298                    -0.047                    
>  0.339                     0.424   
                          (0.377)                   (0.478)                   (
> 0.377)                   (0.390)   

populati~h                 -1.034                    -1.024                    
> -0.693*                   -0.684   
                          (0.626)                   (0.661)                   (
> 0.353)                   (0.426)   

barro~2060                  0.428                     0.492                    
>  0.607                     0.645   
                          (0.525)                   (0.619)                   (
> 0.368)                   (0.472)   

polity2                                 -0.558       -0.916                    
>               0.759*       0.087   
                                       (0.704)      (0.728)                    
>             (0.396)      (0.460)   

FH_polit~s                               1.304        1.567*                   
>              -0.011        0.362   
                                       (0.989)      (0.931)                    
>             (0.542)      (0.543)   

pri_inv                                 -0.184       -0.267                    
>               0.547        0.480   
                                       (0.332)      (0.329)                    
>             (0.597)      (0.532)   

gov_spen~g                              -0.017        0.077                    
>              -0.362       -0.455   
                                       (0.386)      (0.415)                    
>             (0.308)      (0.301)   

inflation                               -0.099       -0.028                    
>              -2.132**     -1.405*  
                                       (0.235)      (0.243)                    
>             (0.967)      (0.829)   

FH_civil~s                               0.096       -0.481                    
>              -0.337       -0.296   
                                       (0.647)      (0.749)                    
>             (0.992)      (0.869)   

WDI_credit                               0.915*       0.875                    
>               0.177        0.230   
                                       (0.467)      (0.531)                    
>             (0.504)      (0.473)   

credit                                  -0.394       -0.546                    
>              -0.363       -0.646   
                                       (0.507)      (0.573)                    
>             (0.469)      (0.476)   

_cons         -2.172        5.546        1.213        6.644        7.221***    
> 11.343***     7.783*      10.031** 
             (2.230)      (5.458)      (3.313)      (4.687)      (1.903)      (
> 2.819)      (4.026)      (4.323)   
-------------------------------------------------------------------------------
> -----------------------------------
Observat~s        73           73           73           73           73       
>     73           73           73   
R-squared      0.028        0.155        0.152        0.228        0.101       
>  0.247        0.258        0.355   
-------------------------------------------------------------------------------
> -----------------------------------
Standard errors in parentheses
* p<0.10, ** p<0.05, *** p<0.01

. 
. * Export table as CSV
. esttab abs_1985 solow_1985 short_1985 full_1985 ///
>        abs_2005 solow_2005 short_2005 full_2005 ///
>     using "convergence2_multivariate_table.csv", ///
>     keep(loggdp investment population_growth barrolee2060 polity2 ///
>          FH_political_rights pri_inv gov_spending inflation ///
>          FH_civil_liberties WDI_credit credit _cons) ///
>     se plain replace ///
>     mtitles("abs_1985" "solow_1985" "short_1985" "full_1985" ///
>             "abs_2005" "solow_2005" "short_2005" "full_2005") ///
>     stats(N r2, labels("N" "R2") fmt(%9.0f %9.3f)) ///
>     b(%9.3f) se(%9.3f)
(file convergence2_multivariate_table.csv not found)
(output written to convergence2_multivariate_table.csv)

. display as text "Exported: convergence2_multivariate_table.csv"
Exported: convergence2_multivariate_table.csv

. 
. display as text ""


. display as text "INTERPRETATION: In 1985-1995, adding correlates converts div
> ergence"
INTERPRETATION: In 1985-1995, adding correlates converts divergence

. display as text "(beta > 0) into conditional convergence (beta* < 0). In 2005
> -2015,"
(beta > 0) into conditional convergence (beta* < 0). In 2005-2015,

. display as text "unconditional convergence is already strong, and correlates 
> deepen it"
unconditional convergence is already strong, and correlates deepen it

. display as text "only slightly. The GAP between columns (1) and (4) has close
> d."
only slightly. The GAP between columns (1) and (4) has closed.

. 
. * ── 8D: Summary ──
. display as text ""


. display as text "============================================================
> ===="
================================================================

. display as text "  THE STORY IN FOUR FACTS"
  THE STORY IN FOUR FACTS

. display as text "============================================================
> ===="
================================================================

. display as text ""


. display as text "  1. ABSOLUTE CONVERGENCE EMERGED since ~2000"
  1. ABSOLUTE CONVERGENCE EMERGED since ~2000

. display as text "     Beta went from +0.5 (divergence) to -1.0 (convergence)"
     Beta went from +0.5 (divergence) to -1.0 (convergence)

. display as text ""


. display as text "  2. GROWTH CORRELATES CONVERGED since ~1985"
  2. GROWTH CORRELATES CONVERGED since ~1985

. display as text "     17 of 20 short-run correlates show beta-convergence"
     17 of 20 short-run correlates show beta-convergence

. display as text "     Education, democracy, trade, fiscal policy -- all conve
> rged"
     Education, democracy, trade, fiscal policy -- all converged

. display as text ""


. display as text "  3. GROWTH REGRESSION COEFFICIENTS FLATTENED"
  3. GROWTH REGRESSION COEFFICIENTS FLATTENED

. display as text "     Short-run correlates: lambda slope = 0.18 (essentially 
> zero)"
     Short-run correlates: lambda slope = 0.18 (essentially zero)

. display as text "     Solow fundamentals: lambda slope = 0.86 (relatively sta
> ble)"
     Solow fundamentals: lambda slope = 0.86 (relatively stable)

. display as text ""


. display as text "  4. THE GAP BETWEEN ABSOLUTE AND CONDITIONAL CONVERGENCE CL
> OSED"
  4. THE GAP BETWEEN ABSOLUTE AND CONDITIONAL CONVERGENCE CLOSED

. display as text "     delta x lambda shrank toward zero"
     delta x lambda shrank toward zero

. display as text "     Unconditional beta caught up to conditional beta*"
     Unconditional beta caught up to conditional beta*

. display as text ""


. display as text "  THEREFORE: The world converged to convergence because"
  THEREFORE: The world converged to convergence because

. display as text "  absolute convergence converged toward conditional converge
> nce."
  absolute convergence converged toward conditional convergence.

. display as text "  (Kremer, Willis, and You, 2021)"
  (Kremer, Willis, and You, 2021)

. display as text ""


. 
. 
. *============================================================================
> ===
. * SECTION 9: ROBUSTNESS
. *
. *   We verify that the key findings are not driven by methodological
. *   choices: (a) the averaging period for growth, (b) the unbalanced
. *   panel (new countries entering over time), (c) the GDP measure used.
. *============================================================================
> ===
. 
. display as text ""


. display as text "------------------------------------------------------------
> ----"
----------------------------------------------------------------

. display as text "  SECTION 9: ROBUSTNESS CHECKS"
  SECTION 9: ROBUSTNESS CHECKS

. display as text "------------------------------------------------------------
> ----"
----------------------------------------------------------------

. 
. * ── 9A: Robustness to averaging period ──
. display as text ""


. display as text "9A: Averaging period (1, 2, 5, 10 years)"
9A: Averaging period (1, 2, 5, 10 years)

. 
. use "main_data.dta", clear

. 
. local y loggdp

. 
. * Generate growth rates for different periods (some may already exist)
. foreach t in 1 2 5 10 {
  2.     capture gen `y'_growth_`t' = 100 * ((F`t'.logrgdpna - logrgdpna) / `t'
> )
  3. }

. 
. * Run regressions for each averaging period
. foreach t in 1 2 5 10 {
  2.     quietly areg `y'_growth_`t' c.`y'#i.year, absorb(year) robust cluster(
> country_id)
  3. 
.     local b1960_`y'_`t' = _b[1960b.year#c.`y']
  4.     local s1960_`y'_`t' = _se[1960b.year#c.`y']
  5.     foreach i of numlist 1961(1)2018 {
  6.         capture local b`i'_`y'_`t' = _b[`i'.year#c.`y']
  7.         capture local s`i'_`y'_`t' = _se[`i'.year#c.`y']
  8.     }
  9. }

. 
. * Save and plot
. preserve

. clear

. set obs 50
Number of observations (_N) was 0, now 50.

. gen year = 1959 + _n

. 
. foreach t in 1 2 5 10 {
  2.     gen `y'_`t'_b = .
  3.     gen `y'_`t'_se = .
  4.     foreach i of numlist 1960(1)2018 {
  5.         capture replace `y'_`t'_b = `b`i'_`y'_`t'' if year == `i'
  6.         capture replace `y'_`t'_se = `s`i'_`y'_`t'' if year == `i'
  7.     }
  8.     recode `y'_`t'_b 0 = .
  9.     recode `y'_`t'_se 0 = .
 10. }
(50 missing values generated)
(50 missing values generated)
(0 changes made to loggdp_1_b)
(0 changes made to loggdp_1_se)
(50 missing values generated)
(50 missing values generated)
(0 changes made to loggdp_2_b)
(0 changes made to loggdp_2_se)
(50 missing values generated)
(50 missing values generated)
(0 changes made to loggdp_5_b)
(0 changes made to loggdp_5_se)
(50 missing values generated)
(50 missing values generated)
(1 changes made to loggdp_10_b)
(1 changes made to loggdp_10_se)

. 
. foreach t in 1 2 5 10 {
  2.     gen b_h_`t' = `y'_`t'_b + 1.96 * `y'_`t'_se
  3.     gen b_l_`t' = `y'_`t'_b - 1.96 * `y'_`t'_se
  4. 
.     twoway (line `y'_`t'_b year, lcolor("106 155 204") lwidth(medthick)) ///
>            (line b_h_`t' year, lpattern(dash) lcolor("106 155 204%50")) ///
>            (line b_l_`t' year, lpattern(dash) lcolor("106 155 204%50")), ///
>         xtitle("Year") ytitle("Beta") ///
>         title("`t'-year average", size(medium)) ///
>         legend(off) graphregion(color(white)) ///
>         name(R`t', replace)
  5. }
(1 missing value generated)
(1 missing value generated)

. 
. graph combine R1 R2 R5 R10, rows(2) cols(2) graphregion(color(white)) ///
>     title("Robustness to Averaging Period", size(medium))

. graph export "stata_convergence2_robustness_averaging.png", replace width(240
> 0)
(file stata_convergence2_robustness_averaging.png not found)
file stata_convergence2_robustness_averaging.png written in PNG format

. graph drop R1 R2 R5 R10

. 
. display as text ""


. display as text "Exported: stata_convergence2_robustness_averaging.png"
Exported: stata_convergence2_robustness_averaging.png

. display as text "10-year averages show the clearest trend; 1-year is noisy."
10-year averages show the clearest trend; 1-year is noisy.

. 
. restore

. 
. 
. *============================================================================
> ===
. * CLEANUP AND FINAL SUMMARY
. *============================================================================
> ===
. 
. display as text ""


. display as text "============================================================
> ===="
================================================================

. display as text "  SCRIPT COMPLETED SUCCESSFULLY"
  SCRIPT COMPLETED SUCCESSFULLY

. display as text "============================================================
> ===="
================================================================

. 
. * List generated files
. display as text ""


. display as text "Generated PNG figures:"
Generated PNG figures:

. local figlist : dir "." files "stata_convergence2_*.png"

. foreach f of local figlist {
  2.     display as text "  `f'"
  3. }
  stata_convergence2_sigma.png
  stata_convergence2_ovb_gap.png
  stata_convergence2_robustness_averaging.png
  stata_convergence2_beta_excluding_regions.png
  stata_convergence2_scatter_by_decade.png
  stata_convergence2_beta_trend.png
  stata_convergence2_correlate_convergence.png
  stata_convergence2_growth_by_quartile.png
  stata_convergence2_delta_stability.png
  stata_convergence2_lambda_flattening.png
  stata_convergence2_absolute_vs_conditional.png

. 
. display as text ""


. display as text "Generated CSV files:"
Generated CSV files:

. local csvlist : dir "." files "convergence2_*.csv"

. foreach f of local csvlist {
  2.     display as text "  `f'"
  3. }
  convergence2_beta_by_decade.csv
  convergence2_multivariate_table.csv
  convergence2_correlate_convergence.csv
  convergence2_beta_trend.csv
  convergence2_sigma.csv
  convergence2_beta_by_region.csv
  convergence2_data_summary.csv
  convergence2_delta_slopes.csv
  convergence2_conditional_convergence.csv
  convergence2_delta_lambda.csv
  convergence2_growth_by_quartile.csv

. 
. * Clean up temporary files
. capture erase "convergence2_working.dta"

. capture erase "convergence2_normalized.dta"

. 
. display as text ""


. display as text "=== Script completed successfully ==="
=== Script completed successfully ===

. 
. log close
      name:  <unnamed>
       log:  /Users/carlosmendez/Documents/GitHub/starter-academic-v501/content
> /post/stata_convergence2/analysis.log
  log type:  text
 closed on:  30 Apr 2026, 12:38:32
-------------------------------------------------------------------------------
