Recipe 2: Estimating Behavioral Response to Reform#
This is an advanced recipe that should be followed only after mastering the basic recipe. This recipe shows how to analyze the behavioral responses to a tax reform using the Behavioral-Responses behresp package.
import sys
if 'google.colab' in sys.modules:
!pip install -q condacolab &> /dev/null # dev/null suppresses output
import condacolab
condacolab.install()
import taxcalc as tc
import behresp
# use publicly-available CPS input file
recs = tc.Records.cps_constructor()
# specify baseline Calculator object representing current-law policy
pol = tc.Policy()
calc1 = tc.Calculator(policy=pol, records=recs)
CYR = 2020
# calculate aggregate current-law income tax liabilities for cyr
calc1.advance_to_year(CYR)
calc1.calc_all()
itax_rev1 = calc1.weighted_total('iitax')
# specify Calculator object for static analysis of reform policy
pol.implement_reform(tc.Policy.read_json_reform('github://PSLmodels:Tax-Calculator@master/docs/recipes/_static/reformA.json'))
calc2 = tc.Calculator(policy=pol, records=recs)
# calculate reform income tax liabilities for cyr under static assumptions
calc2.advance_to_year(CYR)
calc2.calc_all()
itax_rev2sa = calc2.weighted_total('iitax')
# specify assumed non-zero response-function substitution elasticity
response_elasticities = {'sub': 0.25}
# specify Calculator object for analysis of reform with behavioral responses
calc2 = tc.Calculator(policy=pol, records=recs)
calc2.advance_to_year(CYR)
_, df2br = behresp.response(calc1, calc2, response_elasticities)
# calculate reform income tax liabilities for CYR with behavioral response
itax_rev2br = (df2br['iitax'] * df2br['s006']).sum()
# print total income tax revenue estimates for CYR
# (estimates in billons of dollars)
print('{}_CURRENT_LAW_P__itax_rev($B)= {:.3f}'.format(CYR, itax_rev1 * 1e-9))
print('{}_REFORM_STATIC__itax_rev($B)= {:.3f}'.format(CYR, itax_rev2sa * 1e-9))
print('{}_REFORM_DYNAMIC_itax_rev($B)= {:.3f}'.format(CYR, itax_rev2br * 1e-9))
2020_CURRENT_LAW_P__itax_rev($B)= 756.381
2020_REFORM_STATIC__itax_rev($B)= 760.681
2020_REFORM_DYNAMIC_itax_rev($B)= 748.536
Create multi-year diagnostic tables for
baseline,
reform excluding behavioral responses, and
reform including behavioral responses
NUM_YEARS = 3 # number of diagnostic table years beginning with CYR
dtable1 = calc1.diagnostic_table(NUM_YEARS)
dtable2 = calc2.diagnostic_table(NUM_YEARS)
dvar_list3 = list()
year_list3 = list()
for year in range(CYR, CYR + NUM_YEARS):
calc1.advance_to_year(year)
calc2.advance_to_year(year)
_, df2br = behresp.response(calc1, calc2, response_elasticities)
dvar_list3.append(df2br)
year_list3.append(year)
dtable3 = tc.create_diagnostic_table(dvar_list3, year_list3)
Diagnostic table for baseline:
dtable1
2020 | 2021 | 2022 | |
---|---|---|---|
Returns (#m) | 204.480 | 207.080 | 209.660 |
AGI ($b) | 11573.238 | 13174.913 | 13543.810 |
Itemizers (#m) | 27.540 | 31.240 | 31.220 |
Itemized Deduction ($b) | 746.718 | 863.745 | 883.193 |
Standard Deduction Filers (#m) | 176.830 | 175.720 | 178.440 |
Standard Deduction ($b) | 3079.086 | 3090.603 | 3229.790 |
Personal Exemption ($b) | 0.000 | 0.000 | 0.000 |
Taxable Income ($b) | 8613.946 | 10048.193 | 10330.412 |
Regular Tax ($b) | 1497.122 | 1762.520 | 1837.026 |
AMT Income ($b) | 11016.808 | 12528.909 | 12879.727 |
AMT Liability ($b) | 0.903 | 1.854 | 1.056 |
AMT Filers (#m) | 0.210 | 0.340 | 0.220 |
Tax before Credits ($b) | 1498.025 | 1764.374 | 1838.082 |
Refundable Credits ($b) | 655.030 | 827.135 | 98.469 |
Nonrefundable Credits ($b) | 99.188 | 0.005 | 107.717 |
Reform Surtaxes ($b) | 0.000 | 0.000 | 0.000 |
Other Taxes ($b) | 12.575 | 13.851 | 14.353 |
Ind Income Tax ($b) | 756.381 | 951.085 | 1646.249 |
Payroll Taxes ($b) | 1217.941 | 1318.728 | 1421.579 |
Combined Liability ($b) | 1974.322 | 2269.813 | 3067.828 |
With Income Tax <= 0 (#m) | 135.450 | 127.770 | 96.120 |
With Combined Tax <= 0 (#m) | 98.170 | 97.730 | 67.860 |
UBI Benefits ($b) | 0.000 | 0.000 | 0.000 |
Total Benefits, Consumption Value ($b) | 3617.042 | 3992.973 | 4069.559 |
Total Benefits Cost ($b) | 3617.042 | 3992.973 | 4069.559 |
Diagnostic table for reform, excluding behavioral responses:
dtable2
2020 | 2021 | 2022 | |
---|---|---|---|
Returns (#m) | 204.480 | 207.080 | 209.660 |
AGI ($b) | 11573.238 | 13174.913 | 13543.810 |
Itemizers (#m) | 27.470 | 31.130 | 31.110 |
Itemized Deduction ($b) | 744.339 | 860.636 | 879.894 |
Standard Deduction Filers (#m) | 176.900 | 175.830 | 178.560 |
Standard Deduction ($b) | 3080.284 | 3092.349 | 3231.701 |
Personal Exemption ($b) | 375.177 | 382.451 | 403.231 |
Taxable Income ($b) | 8366.328 | 9785.059 | 10056.412 |
Regular Tax ($b) | 1498.980 | 1766.697 | 1843.711 |
AMT Income ($b) | 11019.051 | 12531.859 | 12882.819 |
AMT Liability ($b) | 1.000 | 1.970 | 1.140 |
AMT Filers (#m) | 0.230 | 0.360 | 0.240 |
Tax before Credits ($b) | 1499.980 | 1768.667 | 1844.852 |
Refundable Credits ($b) | 658.347 | 827.135 | 102.144 |
Nonrefundable Credits ($b) | 93.527 | 0.002 | 102.093 |
Reform Surtaxes ($b) | 0.000 | 0.000 | 0.000 |
Other Taxes ($b) | 12.575 | 13.851 | 14.353 |
Ind Income Tax ($b) | 760.681 | 955.380 | 1654.968 |
Payroll Taxes ($b) | 1217.941 | 1318.728 | 1421.579 |
Combined Liability ($b) | 1978.622 | 2274.109 | 3076.547 |
With Income Tax <= 0 (#m) | 137.600 | 130.030 | 98.740 |
With Combined Tax <= 0 (#m) | 98.930 | 98.610 | 68.590 |
UBI Benefits ($b) | 0.000 | 0.000 | 0.000 |
Total Benefits, Consumption Value ($b) | 3617.042 | 3992.973 | 4069.559 |
Total Benefits Cost ($b) | 3617.042 | 3992.973 | 4069.559 |
Diagnostic table for reform, including behavioral responses:
dtable3
2020 | 2021 | 2022 | |
---|---|---|---|
Returns (#m) | 204.480 | 207.080 | 209.660 |
AGI ($b) | 11546.657 | 13141.574 | 13508.126 |
Itemizers (#m) | 27.440 | 31.100 | 31.090 |
Itemized Deduction ($b) | 743.177 | 858.908 | 878.293 |
Standard Deduction Filers (#m) | 176.930 | 175.860 | 178.580 |
Standard Deduction ($b) | 3080.714 | 3093.062 | 3232.174 |
Personal Exemption ($b) | 375.177 | 382.451 | 403.231 |
Taxable Income ($b) | 8340.054 | 9752.159 | 10021.338 |
Regular Tax ($b) | 1487.051 | 1752.368 | 1828.324 |
AMT Income ($b) | 10993.444 | 12499.952 | 12848.552 |
AMT Liability ($b) | 1.021 | 2.012 | 1.172 |
AMT Filers (#m) | 0.230 | 0.350 | 0.250 |
Tax before Credits ($b) | 1488.072 | 1754.380 | 1829.496 |
Refundable Credits ($b) | 658.057 | 827.116 | 101.876 |
Nonrefundable Credits ($b) | 93.756 | 0.002 | 102.342 |
Reform Surtaxes ($b) | 0.000 | 0.000 | 0.000 |
Other Taxes ($b) | 12.277 | 13.502 | 14.008 |
Ind Income Tax ($b) | 748.536 | 940.763 | 1639.285 |
Payroll Taxes ($b) | 1217.280 | 1317.682 | 1420.461 |
Combined Liability ($b) | 1965.815 | 2258.445 | 3059.746 |
With Income Tax <= 0 (#m) | 137.570 | 130.000 | 98.570 |
With Combined Tax <= 0 (#m) | 98.910 | 98.580 | 68.400 |
UBI Benefits ($b) | 0.000 | 0.000 | 0.000 |
Total Benefits, Consumption Value ($b) | 3617.042 | 3992.973 | 4069.559 |
Total Benefits Cost ($b) | 3617.042 | 3992.973 | 4069.559 |