* Title: "Willing to Pay?" Tax Compliance in Britain and Italy: An Experimental Analysis * Date: 3 August 2015 clear all set more off set scheme lean2 use PLOS_replicationData.dta, clear * Fig. 1 * ------ reshape long y, i(id) j(period) label define periodlab 1 "R1: No Redistribution" 2 "R2: Redistribution" 3 "R3: Redistribution x 2" 4 "R4: 10% Tax Rate" 5 "R5: 30% Tax Rate" 6 "R6: 50% Tax Rate" 7 "R7: Progressive 1" 8 "R8: Progressive 2" 9 "R9: Charity", modify label values period periodlab graph bar y, over(country) over(period, label(ang(45) ) ) asyvar /// ytitle("Compliance Rate") b1title("Round") /// ylabel(0(.2).8, glcolor(gs10)) /// blabel(bar, size(small) format(%5.2f)) /// legend(pos(11) row(2) ring(0) region(lstyle(foreground)) ) scale(0.8) /// bargap(20) *graph export "overall_compliance.eps", as(eps) replace reshape wide * Fig. 2 * ------ reshape long hist y, percent by(country, note("")) /// xtitle("% Declared of Total Income") /// ytitle("% of All Reporting Decisions") /// ylabel(0(10)50, glcolor(gs10)) *graph export "histogram_longdata.eps", as(eps) replace reshape wide * S2 Figure * --------- capture drop region2 gen region2 = region label define reg2lab 11 "Italy 1" 12 "Italy 2" 13 "Italy 3" 21 "UK 1" 22 "UK 2" 23 "UK 3", modify label values region2 reg2lab graph bar meany, over(region2) asyvars /// legend(off) showyvars /// ytitle("Average Compliance Rate") b1title("Location") /// ylabel(0(.1).7, glcolor(gs10)) /// blabel(bar, size(small) format(%5.2f)) /// bargap(20) /// bar(1, fcolor(gs14) ) /// bar(2, fcolor(gs14) ) /// bar(3, fcolor(gs14) ) /// bar(4, fcolor(gs10) ) /// bar(5, fcolor(gs10) ) /// bar(6, fcolor(gs10) ) *graph export "compliance_bylocation.eps", as(eps) replace * Table 1: Columns (1 - 9) * ------- foreach j in 1 2 3 4 5 6 7 8 9 { gen cheat`j' = 0 replace cheat`j' = 1 if y`j' == 0 replace cheat`j' = . if y`j' == . gen honest`j' = 0 replace honest`j' = 1 if y`j' == 1 replace honest`j' = . if y`j' == . gen pe`j' = 0 replace pe`j' = 1 if y`j' != 1 & y`j' != 0 replace pe`j' = . if y`j' == . } matrix balance = J(27, 11, 0) local i = 1 foreach j in 1 2 3 4 5 6 7 8 9 { ttest cheat`j', by(country) matrix balance[`i', 1] = r(mu_1) matrix balance[`i', 2] = r(mu_2) matrix balance[`i', 3] = r(mu_1) - r(mu_2) ttest honest`j', by(country) matrix balance[`i', 5] = r(mu_1) matrix balance[`i', 6] = r(mu_2) matrix balance[`i', 7] = r(mu_1) - r(mu_2) ttest pe`j', by(country) matrix balance[`i', 9] = r(mu_1) matrix balance[`i', 10] = r(mu_2) matrix balance[`i', 11] = r(mu_1) - r(mu_2) local i = `i' + 1 ttest cheat`j', by(country) matrix balance[`i', 1] = r(N_1) * r(mu_1) matrix balance[`i', 2] = r(N_2) * r(mu_2) ttest honest`j', by(country) matrix balance[`i', 5] = r(N_1) * r(mu_1) matrix balance[`i', 6] = r(N_2) * r(mu_2) ttest pe`j', by(country) matrix balance[`i', 9] = r(N_1) * r(mu_1) matrix balance[`i', 10] = r(N_2) * r(mu_2) local i = `i' + 1 prtest cheat`j', by(country) matrix balance[`i', 3] = r(z) prtest honest`j', by(country) matrix balance[`i', 7] = r(z) prtest pe`j', by(country) matrix balance[`i', 11] = r(z) local i = `i' + 1 } matrix rownames balance = Round1 N se Round2 N se Round3 N se Round4 N se /// Round5 N se Round6 N se Round7 N se Round8 N se Round9 N se matrix colnames balance = Italy UK Difference blank Italy UK Difference blank Italy UK Difference matrix list balance *outtable using "compliance_gap", mat(balance) format(%9.2f) replace caption("Proportions of Complete Compliers and Complete Evaders: Italy and UK") * Table 1: Columns 10-12 * ------- matrix pe = J(18, 5, 0) local i = 1 foreach j in 1 2 3 4 5 6 7 8 9 { ttest y`j' if cheat`j' == 0 & honest`j' == 0, by(country) matrix pe[`i', 1] = r(N_1) matrix pe[`i', 2] = r(N_2) matrix pe[`i', 3] = r(mu_1) matrix pe[`i', 4] = r(mu_2) matrix pe[`i', 5] = r(mu_1) - r(mu_2) local i = `i' + 1 ranksum y`j' if cheat`j' == 0 & honest`j' == 0, by(country) matrix pe[`i', 5] = r(z) local i = `i' + 1 } matrix rownames pe = Round1 z Round2 z Round3 z Round4 z /// Round5 z Round6 z Round7 z Round8 z Round9 z matrix colnames pe = Italy_N UK_N Italy_mean UK_mean Difference matrix list pe *outtable using "pe_gap", mat(pe) format(%9.2f) replace caption("Compliance Rate of Partial Evaders: Italy and UK") * Table 2 * ------- //reshaping to long file reshape long y ecu, i(id) j(period) encode id, gen(id2) egen ecu2 = std(ecu) xtset id2 //generalized least squares regression (following Alm, Bloomquist and McKee) local gls "gls_table.tex" xtreg y italy, re cluster(id2) outreg2 using "`gls'", replace tex e(chi2 N_clust N) dec(2) alpha(0.01, 0.05) xtreg y italy ecu2 i.period , re cluster(id2) outreg2 using "`gls'", append tex e(chi2 N_clust N) dec(2) alpha(0.01, 0.05) xtreg y italy ecu2 i.period male stdage employ econ past risk dq31_2 dq31_3, re cluster(id2) outreg2 using "`gls'", append tex e(chi2 N_clust N) dec(2) alpha(0.01, 0.05) *** Additional Tests discussed in footnotes *** //additional tests: Figure 1 signifiance forvalues i = 1 / 9 { reg y italy ecu2 male stdage employ econ risk dq31_2 dq31_3 if period == `i', cluster(id2) } //additional tests: minor comments interactions capture drop interact2 interact3 gen interact2 = italy * dq31_2 gen interact3 = italy * dq31_3 xtreg y italy ecu2 i.period male stdage employ econ risk dq31_2 interact2 dq31_3 interact3, re cluster(id2) //additional tests: past participation in each country xtreg y past ecu2 i.period male stdage employ econ risk dq31_2 dq31_3 if italy == 0, re cluster(id2) xtreg y past ecu2 i.period male stdage employ econ risk dq31_2 dq31_3 if italy == 1, re cluster(id2)