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)= 819.616
2020_REFORM_STATIC__itax_rev($B)= 823.808
2020_REFORM_DYNAMIC_itax_rev($B)= 811.403
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) | 11572.622 | 13242.423 | 13524.306 |
| Itemizers (#m) | 27.450 | 31.430 | 31.350 |
| Itemized Deduction ($b) | 745.193 | 871.548 | 888.465 |
| Standard Deduction Filers (#m) | 176.920 | 175.530 | 178.310 |
| Standard Deduction ($b) | 3081.007 | 3086.718 | 3227.131 |
| Personal Exemption ($b) | 0.000 | 0.000 | 0.000 |
| Taxable Income ($b) | 8615.647 | 10113.501 | 10314.027 |
| Regular Tax ($b) | 1497.472 | 1776.902 | 1834.966 |
| AMT Income ($b) | 7876.981 | 9440.105 | 9563.756 |
| AMT Liability ($b) | 0.493 | 1.282 | 0.574 |
| AMT Filers (#m) | 0.060 | 0.150 | 0.070 |
| Tax before Credits ($b) | 1497.966 | 1778.185 | 1835.541 |
| Refundable Credits ($b) | 655.024 | 826.393 | 99.100 |
| Nonrefundable Credits ($b) | 99.200 | 0.005 | 107.426 |
| Reform Surtaxes ($b) | 0.000 | 0.000 | 0.000 |
| Other Taxes ($b) | 75.874 | 83.585 | 87.423 |
| Ind Income Tax ($b) | 819.616 | 1035.372 | 1716.438 |
| Payroll Taxes ($b) | 1154.642 | 1252.707 | 1343.466 |
| Combined Liability ($b) | 1974.257 | 2288.079 | 3059.904 |
| With Income Tax <= 0 (#m) | 133.140 | 125.870 | 94.710 |
| With Combined Tax <= 0 (#m) | 98.180 | 97.590 | 67.980 |
| UBI Benefits ($b) | 0.000 | 0.000 | 0.000 |
| Total Benefits, Consumption Value ($b) | 3617.042 | 3992.973 | 4070.218 |
| Total Benefits Cost ($b) | 3617.042 | 3992.973 | 4070.218 |
Diagnostic table for reform, excluding behavioral responses:
dtable2
| 2020 | 2021 | 2022 | |
|---|---|---|---|
| Returns (#m) | 204.480 | 207.080 | 209.660 |
| AGI ($b) | 11572.622 | 13242.423 | 13524.306 |
| Itemizers (#m) | 27.370 | 31.310 | 31.230 |
| Itemized Deduction ($b) | 742.660 | 868.177 | 885.377 |
| Standard Deduction Filers (#m) | 177.000 | 175.640 | 178.430 |
| Standard Deduction ($b) | 3082.379 | 3088.755 | 3229.092 |
| Personal Exemption ($b) | 375.177 | 384.158 | 406.780 |
| Taxable Income ($b) | 8367.955 | 9848.811 | 10037.794 |
| Regular Tax ($b) | 1499.314 | 1781.460 | 1841.590 |
| AMT Income ($b) | 7879.688 | 9442.905 | 9566.446 |
| AMT Liability ($b) | 0.499 | 1.309 | 0.572 |
| AMT Filers (#m) | 0.060 | 0.160 | 0.070 |
| Tax before Credits ($b) | 1499.813 | 1782.769 | 1842.162 |
| Refundable Credits ($b) | 658.341 | 826.393 | 102.809 |
| Nonrefundable Credits ($b) | 93.538 | 0.002 | 101.739 |
| Reform Surtaxes ($b) | 0.000 | 0.000 | 0.000 |
| Other Taxes ($b) | 75.874 | 83.585 | 87.423 |
| Ind Income Tax ($b) | 823.808 | 1039.959 | 1725.037 |
| Payroll Taxes ($b) | 1154.642 | 1252.707 | 1343.466 |
| Combined Liability ($b) | 1978.450 | 2292.665 | 3068.503 |
| With Income Tax <= 0 (#m) | 135.250 | 128.040 | 97.210 |
| With Combined Tax <= 0 (#m) | 98.940 | 98.480 | 68.680 |
| UBI Benefits ($b) | 0.000 | 0.000 | 0.000 |
| Total Benefits, Consumption Value ($b) | 3617.042 | 3992.973 | 4070.218 |
| Total Benefits Cost ($b) | 3617.042 | 3992.973 | 4070.218 |
Diagnostic table for reform, including behavioral responses:
dtable3
| 2020 | 2021 | 2022 | |
|---|---|---|---|
| Returns (#m) | 204.480 | 207.080 | 209.660 |
| AGI ($b) | 11545.925 | 13208.586 | 13488.627 |
| Itemizers (#m) | 27.340 | 31.280 | 31.220 |
| Itemized Deduction ($b) | 741.382 | 866.471 | 883.918 |
| Standard Deduction Filers (#m) | 177.020 | 175.680 | 178.450 |
| Standard Deduction ($b) | 3082.937 | 3089.448 | 3229.447 |
| Personal Exemption ($b) | 375.177 | 384.158 | 406.780 |
| Taxable Income ($b) | 8341.500 | 9815.496 | 10002.720 |
| Regular Tax ($b) | 1487.332 | 1766.949 | 1826.179 |
| AMT Income ($b) | 7853.030 | 9409.462 | 9531.276 |
| AMT Liability ($b) | 0.499 | 1.313 | 0.570 |
| AMT Filers (#m) | 0.060 | 0.160 | 0.070 |
| Tax before Credits ($b) | 1487.831 | 1768.262 | 1826.749 |
| Refundable Credits ($b) | 658.052 | 826.387 | 102.539 |
| Nonrefundable Credits ($b) | 93.772 | 0.002 | 101.988 |
| Reform Surtaxes ($b) | 0.000 | 0.000 | 0.000 |
| Other Taxes ($b) | 75.395 | 83.010 | 86.825 |
| Ind Income Tax ($b) | 811.403 | 1024.883 | 1709.047 |
| Payroll Taxes ($b) | 1154.157 | 1251.847 | 1342.612 |
| Combined Liability ($b) | 1965.560 | 2276.730 | 3051.659 |
| With Income Tax <= 0 (#m) | 135.210 | 128.010 | 97.070 |
| With Combined Tax <= 0 (#m) | 98.920 | 98.450 | 68.490 |
| UBI Benefits ($b) | 0.000 | 0.000 | 0.000 |
| Total Benefits, Consumption Value ($b) | 3617.042 | 3992.973 | 4070.218 |
| Total Benefits Cost ($b) | 3617.042 | 3992.973 | 4070.218 |