***Mixed electoral systems and the proportionality-concentration trade-off ***Johannes Raabe, University of Kiel ***Chapter 7 - international comparison clear all sysuse international_electoral_system_data sort country year election_in_this_year by country: gen el_no = _n egen id = group(country) xtset id el_no **Generating variables for the analysis *Electoral system general types replace mixed_type = 0 if mixed_type == . gen mmm = 0 replace mmm = 1 if mixed_type == 2 | mixed_type == 5 gen mmp = 0 replace mmp = 1 if mixed_type == 4 gen PR = 0 replace PR = 1 if legislative_type == 2 gen Majoritarian = 0 replace Majoritarian = 1 if legislative_type == 1 gen dm_mean = pr_dm_mean replace dm_mean = 1 if percent_smds == 1 replace dm_mean = ((percent_smds*1 + (1-percent_smds)*pr_dm_mean)) if mmm == 1 gen PR_high_dm = 0 replace PR_high_dm = 1 if PR == 1 & dm_mean >= 10 gen PR_mod_dm = 0 replace PR_mod_dm = 1 if PR == 1 & dm_mean < 10 *Replacements in order to improve comparability or merge variables to eliminate missing data replace enpv = enpv_pr if enpv == . replace lsi = lsi*100 replace lsi = . if country == "Italy" & year == 2001 drop if lsi == . | enps == . replace pr_topup = 0 if pr_topup == . *Generating additional variables gen western = 0 replace western = 1 if region == 5 | region == 10 | region == 8 gen mmpXpercent_smds = mmp*percent_smds gen dm_mean2 = dm_mean^2 gen legal_threshold = pr_threshold replace legal_threshold = 0 if legal_threshold == . gen eff_thresh = 1/dm_mean replace eff_thresh = legal_threshold/100 if eff_thresh < legal_threshold/100 & legal_threshold > 0 gen strategic_manipulation = 0 replace strategic_manipulation = 1 if country == "Lesotho" & year == 2007 replace strategic_manipulation = 1 if country == "Albania" & year == 2005 replace strategic_manipulation = 1 if country == "Venezuela" & year == 2000 gen compens_pr_tier = 0 replace compens_pr_tier = 1 if mmp == 1 gen compensXperc_smds = compens_pr_tier*percent_smds *BOBW Benchmarks *Medians sum enps, d gen enps_diff_from_median = enps - r(p50) sum lsi, d gen lsi_diff_from_median = lsi - r(p50) gen good_lsi_med = 0 if lsi != . replace good_lsi_med = 1 if lsi_diff_from_median < 0 gen good_enps_med = 0 if enps != . replace good_enps_med = 1 if enps_diff_from_median < 0 gen good_twice_med = 0 if enps_diff_from_median != . & lsi_diff_from_median != . replace good_twice_med = 1 if enps_diff_from_median < 0 & lsi_diff_from_median < 0 *Means sum enps gen enps_diff_from_mean = enps - r(mean) sum lsi gen lsi_diff_from_mean = lsi - r(mean) gen good_lsi = 0 if lsi != . replace good_lsi = 1 if lsi_diff_from_mean < 0 gen good_enps = 0 if enps != . replace good_enps = 1 if enps_diff_from_mean < 0 gen good_twice = 0 if enps_diff_from_mean != . & lsi_diff_from_mean != . replace good_twice = 1 if enps_diff_from_mean < 0 & lsi_diff_from_mean < 0 *Distance from ideal point (ENPS = 2, LSI = 0) gen dist_from_ideal = sqrt((lsi)^2 + (enps - 2)^2) sum lsi gen lsi_normalized = lsi/r(sd) sum enps gen enps_normalized = enps/r(sd) gen dist_from_ideal_norm = sqrt((lsi_normalized)^2 + (enps_normalized - 2)^2) *WOBW Benchmarks *Medians gen bad_lsi_med = 0 if lsi != . replace bad_lsi_med = 1 if lsi_diff_from_median > 0 gen bad_enps_med = 0 if enps != . replace bad_enps_med = 1 if enps_diff_from_median > 0 gen bad_twice_med = 0 if enps_diff_from_median != . & lsi_diff_from_median != . replace bad_twice_med = 1 if enps_diff_from_median > 0 & lsi_diff_from_median > 0 *Means gen bad_lsi = 0 if lsi != . replace bad_lsi = 1 if lsi_diff_from_mean > 0 gen bad_enps = 0 if enps != . replace bad_enps = 1 if enps_diff_from_mean > 0 gen bad_twice = 0 if enps_diff_from_mean != . & lsi_diff_from_mean != . replace bad_twice = 1 if enps_diff_from_mean > 0 & lsi_diff_from_mean > 0 **Empirical analysis *Descriptive overview *Scatterplots (cross hairs based on medians) twoway (scatter lsi enps if mmp == 1, msymbol(C) mcolor(black) msize(small) legend(label(1 "MMP")) yline(4.68, lpattern(dash)) xline(3.17, lpattern(dash))) (scatter lsi enps if mmm == 1, msymbol(Sh) mcolor(black) msize(small) legend(label(2 "MMM")) graphregion(color(white))) (scatter lsi enps if PR_mod_dm == 1, msymbol(Th) mcolor(black) msize(small) legend(label(3 "PR_mod_dm"))) (scatter lsi enps if PR_high_dm == 1, msymbol(Ch) mcolor(black) msize(small) legend(label(4 "PR_high_dm"))) (scatter lsi enps if Majoritarian == 1, msymbol(X) mcolor(black) msize(small) legend(label(5 "Maj"))) twoway (scatter lsi enps if mmp == 1 & lsi < 20 & enps < 10, msymbol(C) mcolor(black) msize(small) legend(label(1 "MMP")) ylab(,nogrid) yline(4.68, lpattern(dash)) xline(3.17, lpattern(dash))) (scatter lsi enps if mmm == 1 & lsi < 20 & enps < 10, msymbol(Sh) mcolor(black) msize(small) legend(label(2 "MMM")) graphregion(color(white))) (scatter lsi enps if PR_mod_dm == 1 & lsi < 20 & enps < 10, msymbol(Th) mcolor(black) msize(small) legend(label(3 "PR_mod_dm"))) (scatter lsi enps if PR_high_dm == 1 & lsi < 20 & enps < 10, msymbol(T) mcolor(black) msize(small) legend(label(4 "PR_high_dm"))) (scatter lsi enps if Majoritarian == 1 & lsi < 20 & enps < 10, msymbol(X) mcolor(black) msize(small) legend(label(5 "Maj"))) *Linear trade-off for pure systems as benchmark twoway (lfit lsi enps if mmp == 0 & mmm == 0 & PR_mod_dm == 0, range (0 7.4)) (scatter lsi enps if PR_mod_dm == 1, msymbol(Th) mcolor(black) msize(small) legend(label(2 "PR_mod_dm"))) (scatter lsi enps if mmm == 1, msymbol(Sh) mcolor(black) msize(small) legend(label(3 "MMM")) graphregion(color(white))) (scatter lsi enps if mmp == 1, msymbol(C) mcolor(black) msize(small) legend(label(4 "MMP"))) twoway (lfit lsi enps if mmp == 0 & mmm == 0 & PR_mod_dm == 0 & enps < 10 & lsi < 20, range (0 7.4) ytitle("LSI")) (scatter lsi enps if PR_mod_dm == 1 & enps < 10 & lsi < 20, msymbol(Th) mcolor(black) msize(small) legend(label(2 "PR_mod_dm"))) (scatter lsi enps if mmm == 1 & enps < 10 & lsi < 20, msymbol(Sh) mcolor(black) msize(small) legend(label(3 "MMM")) graphregion(color(white))) (scatter lsi enps if mmp == 1 & enps < 10 & lsi < 20, msymbol(C) mcolor(black) msize(small) legend(label(4 "MMP"))) twoway (fpfit lsi enps if mmp == 0 & mmm == 0 & PR_mod_dm == 0 & enps < 10 & lsi < 20) (scatter lsi enps if PR_mod_dm == 1 & enps < 10 & lsi < 20, msymbol(Th) mcolor(black) msize(small) legend(label(2 "PR_mod_dm"))) (scatter lsi enps if mmm == 1 & enps < 10 & lsi < 20, msymbol(Sh) mcolor(black) msize(small) legend(label(3 "MMM")) graphregion(color(white))) (scatter lsi enps if mmp == 1 & enps < 10 & lsi < 20, msymbol(C) mcolor(black) msize(small) legend(label(4 "MMP"))) *Linear trade-off for pure systems + cross hairs as benchmarks twoway (lfit lsi enps if mmp == 0 & mmm == 0 & PR_mod_dm == 0 & enps < 10 & lsi < 20, range (0 7.4) ytitle("LSI") yline(4.68, lpattern(dash)) xline(3.17, lpattern(dash))) (scatter lsi enps if PR_mod_dm == 1 & enps < 10 & lsi < 20, msymbol(Th) mcolor(black) msize(small) legend(label(2 "PR_mod_dm"))) (scatter lsi enps if mmm == 1 & enps < 10 & lsi < 20, msymbol(Sh) mcolor(black) msize(small) legend(label(3 "MMM")) graphregion(color(white))) (scatter lsi enps if mmp == 1 & enps < 10 & lsi < 20, msymbol(C) mcolor(black) msize(small) legend(label(4 "MMP"))) twoway (fpfit lsi enps if mmp == 0 & mmm == 0 & PR_mod_dm == 0 & enps < 10 & lsi < 20, ytitle("LSI") yline(4.68, lpattern(dash)) xline(3.17, lpattern(dash))) (scatter lsi enps if PR_mod_dm == 1 & enps < 10 & lsi < 20, msymbol(Th) mcolor(black) msize(small) legend(label(2 "PR_mod_dm"))) (scatter lsi enps if mmm == 1 & enps < 10 & lsi < 20, msymbol(Sh) mcolor(black) msize(small) legend(label(3 "MMM")) graphregion(color(white))) (scatter lsi enps if mmp == 1 & enps < 10 & lsi < 20, msymbol(C) mcolor(black) msize(small) legend(label(4 "MMP"))) *Mean/median comparisons gen x = _n if _n <= 6 gen type = "." replace type = "All" if _n == 1 replace type = "PR (high dm)" if _n == 2 replace type = "PR (mod dm)" if _n == 3 replace type = "MMP" if _n == 4 replace type = "MMM" if _n == 5 replace type = "Plurality/Majority" if _n == 6 gen lsi_mean = . gen lsi_lb = . gen lsi_ub = . sum lsi replace lsi_mean = r(mean) if _n == 1 replace lsi_lb = r(mean) - r(sd) if _n == 1 replace lsi_ub = r(mean) + r(sd) if _n == 1 sum lsi if PR == 1 & dm_mean >= 10 replace lsi_mean = r(mean) if _n == 2 replace lsi_lb = r(mean) - r(sd) if _n == 2 replace lsi_ub = r(mean) + r(sd) if _n == 2 sum lsi if PR == 1 & dm_mean < 10 replace lsi_mean = r(mean) if _n == 3 replace lsi_lb = r(mean) - r(sd) if _n == 3 replace lsi_ub = r(mean) + r(sd) if _n == 3 sum lsi if mmp == 1 replace lsi_mean = r(mean) if _n == 4 replace lsi_lb = r(mean) - r(sd) if _n == 4 replace lsi_ub = r(mean) + r(sd) if _n == 4 sum lsi if mmm == 1 replace lsi_mean = r(mean) if _n == 5 replace lsi_lb = r(mean) - r(sd) if _n == 5 replace lsi_ub = r(mean) + r(sd) if _n == 5 sum lsi if Majoritarian == 1 replace lsi_mean = r(mean) if _n == 6 replace lsi_lb = r(mean) - r(sd) if _n == 6 replace lsi_ub = r(mean) + r(sd) if _n == 6 twoway (scatter lsi_mean x) /// (rcap lsi_lb lsi_ub x) gen general_type = "." replace general_type = "PR (high dm)" if PR == 1 & dm_mean >= 10 replace general_type = "PR (moderate dm)" if PR == 1 & dm_mean < 10 replace general_type = "MMP" if mmp == 1 replace general_type = "MMM" if mmm == 1 replace general_type = "Plurality/Majority" if Majoritarian == 1 gen order = 1 if general_type == "PR (high dm)" replace order = 2 if general_type == "PR (moderate dm)" replace order = 3 if general_type == "MMP" replace order = 4 if general_type == "MMM" replace order = 5 if general_type == "Plurality/Majority" graph box lsi, yline(4.67805) over(general_type, sort(order)) graph save lsi_box, replace gen enps_mean = . gen enps_lb = . gen enps_ub = . sum enps replace enps_mean = r(mean) if _n == 1 replace enps_lb = r(mean) - r(sd) if _n == 1 replace enps_ub = r(mean) + r(sd) if _n == 1 sum enps if PR == 1 & dm_mean >= 10 replace enps_mean = r(mean) if _n == 2 replace enps_lb = r(mean) - r(sd) if _n == 2 replace enps_ub = r(mean) + r(sd) if _n == 2 sum enps if PR == 1 & dm_mean < 10 replace enps_mean = r(mean) if _n == 3 replace enps_lb = r(mean) - r(sd) if _n == 3 replace enps_ub = r(mean) + r(sd) if _n == 3 sum enps if mmp == 1 replace enps_mean = r(mean) if _n == 4 replace enps_lb = r(mean) - r(sd) if _n == 4 replace enps_ub = r(mean) + r(sd) if _n == 4 sum enps if mmm == 1 replace enps_mean = r(mean) if _n == 5 replace enps_lb = r(mean) - r(sd) if _n == 5 replace enps_ub = r(mean) + r(sd) if _n == 5 sum enps if Majoritarian == 1 replace enps_mean = r(mean) if _n == 6 replace enps_lb = r(mean) - r(sd) if _n == 6 replace enps_ub = r(mean) + r(sd) if _n == 6 twoway (scatter enps_mean x) /// (rcap enps_lb enps_ub x) graph box enps, yline(3.168894) over(general_type, sort(order)) graph save enps_box, replace graph combine lsi_box.gph enps_box.gph *Four classes of performances *good, good (lower-left quadrant) tab PR_high_dm if good_twice_med == 1 tab PR_mod_dm if good_twice_med == 1 tab mmp if good_twice_med == 1 tab mmm if good_twice_med == 1 tab Majoritarian if good_twice_med == 1 *bad,bad (upper-right quadrant) tab PR_high_dm if bad_twice_med == 1 tab PR_mod_dm if bad_twice_med == 1 tab mmp if bad_twice_med == 1 tab mmm if bad_twice_med == 1 tab Majoritarian if bad_twice_med == 1 *good prop, bad conc (lower-right quadrant) tab PR_high_dm if good_lsi_med == 1 & good_enps_med == 0 tab PR_mod_dm if good_lsi_med == 1 & good_enps_med == 0 tab mmp if good_lsi_med == 1 & good_enps_med == 0 tab mmm if good_lsi_med == 1 & good_enps_med == 0 tab Majoritarian if good_lsi_med == 1 & good_enps_med == 0 *bad prop, good conc (upper-left quadrant) tab PR_high_dm if good_lsi_med == 0 & good_enps_med == 1 tab PR_mod_dm if good_lsi_med == 0 & good_enps_med == 1 tab mmp if good_lsi_med == 0 & good_enps_med == 1 tab mmm if good_lsi_med == 0 & good_enps_med == 1 tab Majoritarian if good_lsi_med == 0 & good_enps_med == 1 *Regressions with general design types *General performance reg lsi Majoritarian mmm mmp PR_mod_dm PR_high_dm, nocons vce(robust) reg enps Majoritarian mmm mmp PR_mod_dm PR_high_dm, nocons vce(robust) logit good_twice_med mmm mmp PR_mod_dm PR_high_dm, vce(robust) *Predicted probabilities gen prob_bobw = . gen prob_bobw_lb = . gen prob_bobw_ub = . margins, at(mmm=0 mmp=0 PR_mod_dm=0 PR_high_dm=0) mat a = r(table) replace prob_bobw = a[1,1] if _n == 6 replace prob_bobw_lb = a[5,1] if _n == 6 replace prob_bobw_ub = a[6,1] if _n == 6 margins, at(mmm=1 mmp=0 PR_mod_dm=0 PR_high_dm=0) mat a = r(table) replace prob_bobw = a[1,1] if _n == 5 replace prob_bobw_lb = a[5,1] if _n == 5 replace prob_bobw_ub = a[6,1] if _n == 5 margins, at(mmm=0 mmp=1 PR_mod_dm=0 PR_high_dm=0) mat a = r(table) replace prob_bobw = a[1,1] if _n == 4 replace prob_bobw_lb = a[5,1] if _n == 4 replace prob_bobw_ub = a[6,1] if _n == 4 margins, at(mmm=0 mmp=0 PR_mod_dm=1 PR_high_dm=0) mat a = r(table) replace prob_bobw = a[1,1] if _n == 3 replace prob_bobw_lb = a[5,1] if _n == 3 replace prob_bobw_ub = a[6,1] if _n == 3 margins, at(mmm=0 mmp=0 PR_mod_dm=0 PR_high_dm=1) mat a = r(table) replace prob_bobw = a[1,1] if _n == 2 replace prob_bobw_lb = a[5,1] if _n == 2 replace prob_bobw_ub = a[6,1] if _n == 2 twoway (scatter prob_bobw x) /// (rcap prob_bobw_lb prob_bobw_ub x) *Adding context vars reg lsi Majoritarian mmm mmp PR_mod_dm PR_high_dm polity tensys prespow1 pres_concurrent pol_dcen, nocons vce(robust) *CONTROL FOR MANIPUL. OF MMP: reg lsi Majoritarian mmm mmp PR_mod_dm PR_high_dm polity tensys prespow1 pres_concurrent pol_dcen strategic_m, nocons vce(robust) reg enps Majoritarian mmm mmp PR_mod_dm PR_high_dm polity tensys prespow1 pres_concurrent pol_dcen, nocons vce(robust) logit good_twice_med PR_high_dm PR_mod_dm mmp mmm polity tensys prespow1 pol_dcen, vce(robust) outreg2 using myfile.doc, replace lroc, nograph predict bobw_type, xb logit good_twice_med PR_high_dm PR_mod_dm mmp mmm polity tensys prespow1 pol_dcen ef, vce(robust) outreg2 using myfile.doc, replace *Predicted probabilities gen prob_bobw2 = . gen prob_bobw_lb2 = . gen prob_bobw_ub2 = . margins, at(mmm=0 mmp=0 PR_mod_dm=0 PR_high_dm=0) mat a = r(table) replace prob_bobw2 = a[1,1] if _n == 6 replace prob_bobw_lb2 = a[5,1] if _n == 6 replace prob_bobw_ub2 = a[6,1] if _n == 6 margins, at(mmm=1 mmp=0 PR_mod_dm=0 PR_high_dm=0) mat a = r(table) replace prob_bobw2 = a[1,1] if _n == 5 replace prob_bobw_lb2 = a[5,1] if _n == 5 replace prob_bobw_ub2 = a[6,1] if _n == 5 margins, at(mmm=0 mmp=1 PR_mod_dm=0 PR_high_dm=0) mat a = r(table) replace prob_bobw2 = a[1,1] if _n == 4 replace prob_bobw_lb2 = a[5,1] if _n == 4 replace prob_bobw_ub2 = a[6,1] if _n == 4 margins, at(mmm=0 mmp=0 PR_mod_dm=1 PR_high_dm=0) mat a = r(table) replace prob_bobw2 = a[1,1] if _n == 3 replace prob_bobw_lb2 = a[5,1] if _n == 3 replace prob_bobw_ub2 = a[6,1] if _n == 3 margins, at(mmm=0 mmp=0 PR_mod_dm=0 PR_high_dm=1) mat a = r(table) replace prob_bobw2 = a[1,1] if _n == 2 replace prob_bobw_lb2 = a[5,1] if _n == 2 replace prob_bobw_ub2 = a[6,1] if _n == 2 gen base = 1 if _n == 2 replace base = 2 if _n == 3 replace base = 3 if _n == 4 replace base = 4 if _n == 5 replace base = 5 if _n == 6 twoway (scatter prob_bobw2 base, xlabel(1 "PR (high dm)" 2 "PR (mod dm)" 3 "MMP" 4 "MMM" 5 "Plurality/Majority") graphregion(color(white))) /// (rcap prob_bobw_lb2 prob_bobw_ub2 base) *WOBW logit bad_twice_med mmm mmp PR_mod_dm PR_high_dm, vce(robust) logit bad_twice_med PR_high_dm PR_mod_dm mmp mmm polity tensys prespow1 pol_dcen, vce(robust) outreg2 using myfile.doc, replace lroc, nograph predict wobw_type, xb logit bad_twice_med mmm mmp PR_mod_dm PR_high_dm polity tensys prespow1 pol_dcen ef, vce(robust) outreg2 using myfile.doc, replace *Predicted probabilities gen prob_wobw = . gen prob_wobw_lb = . gen prob_wobw_ub = . margins, at(mmm=0 mmp=0 PR_mod_dm=0 PR_high_dm=0) mat a = r(table) replace prob_wobw = a[1,1] if _n == 6 replace prob_wobw_lb = a[5,1] if _n == 6 replace prob_wobw_ub = a[6,1] if _n == 6 margins, at(mmm=1 mmp=0 PR_mod_dm=0 PR_high_dm=0) mat a = r(table) replace prob_wobw = a[1,1] if _n == 5 replace prob_wobw_lb = a[5,1] if _n == 5 replace prob_wobw_ub = a[6,1] if _n == 5 margins, at(mmm=0 mmp=1 PR_mod_dm=0 PR_high_dm=0) mat a = r(table) replace prob_wobw = a[1,1] if _n == 4 replace prob_wobw_lb = a[5,1] if _n == 4 replace prob_wobw_ub = a[6,1] if _n == 4 margins, at(mmm=0 mmp=0 PR_mod_dm=1 PR_high_dm=0) mat a = r(table) replace prob_wobw = a[1,1] if _n == 3 replace prob_wobw_lb = a[5,1] if _n == 3 replace prob_wobw_ub = a[6,1] if _n == 3 margins, at(mmm=0 mmp=0 PR_mod_dm=0 PR_high_dm=1) mat a = r(table) replace prob_wobw = a[1,1] if _n == 2 replace prob_wobw_lb = a[5,1] if _n == 2 replace prob_wobw_ub = a[6,1] if _n == 2 twoway (scatter prob_wobw base, xlabel(1 "PR (high dm)" 2 "PR (mod dm)" 3 "MMP" 4 "MMM" 5 "Plurality/Majority") graphregion(color(white))) /// (rcap prob_wobw_lb prob_wobw_ub base) *Regressions with technical details *Technical variables only reg lsi compens_pr_tier percent_smds dm_mean dm_mean2 pr_topup legal_threshold, vce(robust) outreg2 using myfile.doc, replace reg enps compens_pr_tier percent_smds dm_mean dm_mean2 pr_topup legal_threshold, vce(robust) outreg2 using myfile.doc logit good_twice_med compens_pr_tier percent_smds dm_mean dm_mean2 pr_topup legal_threshold, vce(robust) outreg2 using myfile.doc, replace *Adding context (interaction between compensXperc_smds) reg lsi compens_pr_tier percent_smds dm_mean dm_mean2 pr_topup legal_threshold polity tensys prespow1 pol_dcen, vce(robust) outreg2 using myfile.doc reg enps compens_pr_tier percent_smds dm_mean dm_mean2 pr_topup legal_threshold polity tensys prespow1 pol_dcen, vce(robust) outreg2 using myfile.doc logit good_twice_med compens_pr_tier percent_smds dm_mean dm_mean2 pr_topup legal_threshold polity tensys prespow1 pol_dcen, vce(robust) outreg2 using myfile.doc lroc, nograph predict bobw_det, xb roccomp good_twice_med bobw_type bobw_det logit good_twice_med compens_pr_tier percent_smds dm_mean dm_mean2 pr_topup legal_threshold polity tensys prespow1 pol_dcen ef, vce(robust) *WOBW logit bad_twice_med compens_pr_tier percent_smds dm_mean dm_mean2 pr_topup legal_threshold, vce(robust) outreg2 using myfile.doc, replace *Adding context logit bad_twice_med compens_pr_tier percent_smds dm_mean dm_mean2 pr_topup legal_threshold polity tensys prespow1 pol_dcen, vce(robust) outreg2 using myfile.doc lroc, nograph predict wobw_det, xb roccomp bad_twice_med wobw_type wobw_det logit bad_twice_med compens_pr_tier percent_smds dm_mean dm_mean2 pr_topup legal_threshold polity tensys prespow1 pol_dcen ef, vce(robust) logit good_twice_med compens_pr_tier percent_smds dm_mean dm_mean2 pr_topup legal_threshold polity tensys prespow1 pol_dcen ef, vce(robust)