Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Suddenly finding tax hike for millionaires from TCJA #1975

Closed
ernietedeschi opened this issue Apr 18, 2018 · 4 comments
Closed

Suddenly finding tax hike for millionaires from TCJA #1975

ernietedeschi opened this issue Apr 18, 2018 · 4 comments
Labels

Comments

@ernietedeschi
Copy link
Contributor

I'm running a simple analysis of the TCJA against a 2017-law baseline in 2018 in tc using the 2011 PUF.

Here are the CLI commands I'm running (above all, please check to make sure I'm implementing the compound reform correctly). The first line dumps a pre-TCJA baseline for 2018, while the second implements the TCJA by way of just outputing 2018 current law. I cross checked the second line by running an alternative that implemented a compound reform with TCJA_Reconciliation.json and got the exact same answer.

python tc.py puf.csv 2018 --dump --baseline './tax-calculator/taxcalc/reforms/2017_law.json' --reform './tax-calculator/taxcalc/reforms/2017_law.json'
python tc.py puf.csv 2018 --dump 

After merging the two output files, here's what I find for the average change in federal tax liability per tax unit from the TCJA, by expanded income category.

RECODE of	
ei_2018	        mean(dtax)
	
$0-10K	        -12
$10K-20K	-124
$20K-30K	-256
$30K-40K	-460
$40K-50K	-628
$50K-75K	-867
$75K-100K	-1,228
$100K-200K	-1,897
$200K-500K	-5,437
$500K-1M	-12,474
$1M+             4,715

The results up until the $1M+ threshold look reasonable, and consistent with TPC's modeling of just the individual provisions as well as JCT's (see page 6).

But the tax hike for filers with more than $1M is both inconsistent with other estimates and, I'm fairly positive, inconsistent with prior tc analysis that I've done.

Thoughts? Have I made a gapping error here? Or has something changed?

@martinholmer
Copy link
Collaborator

@evtedeschi3 said in issue #1975:

I'm running a simple analysis of the TCJA against a 2017-law baseline in 2018 in tc using the 2011 PUF.

Here are the CLI commands I'm running (above all, please check to make sure I'm implementing the compound reform correctly). ...[snip]...

python tc.py puf.csv 2018 --dump --baseline './tax-calculator/taxcalc/reforms/2017_law.json' --reform './tax-calculator/taxcalc/reforms/2017_law.json'
python tc.py puf.csv 2018 --dump 

After merging the two output files, here's what I find for the average change in federal tax liability per tax unit from the TCJA, by expanded income category.

RECODE of	
ei_2018	        mean(dtax)
  
$0-10K	        -12
$10K-20K	-124
$20K-30K	-256
$30K-40K	-460
$40K-50K	-628
$50K-75K	-867
$75K-100K	-1,228
$100K-200K	-1,897
$200K-500K	-5,437
$500K-1M	-12,474
$1M+             4,715

The results up until the $1M+ threshold look reasonable, and consistent with TPC's modeling of just the individual provisions as well as JCT's (see page 6).

But the tax hike for filers with more than $1M is both inconsistent with other estimates and, I'm fairly positive, inconsistent with prior tc analysis that I've done.

Thoughts? Have I made a gapping error here? Or has something changed?

@evtedeschi3, Thanks for the bug report.

No, you have not "made a gapping error here." The --baseline option in your first tc command is redundant but not harmful (I think). I can reproduce the results you show above using a simple Python script that is shown at the very bottom of this comment.

When you say "the tax hike for filers with more than $1M is ... inconsistent with other estimates," don't forget that (I think) both TPC and JCT include the change in the corporate income tax liability imputed to filing units while Tax-Calculator includes only the change in payroll tax and individual income tax liability. That's a big difference for the millionaires, who are probably imputed most of the enormous TCJA-induced reduction in corporate income tax liability.

More significant is your observation that the tax increase for millionaires is " inconsistent with prior tc analysis that I've done." I've been able to confirm that your memory is correct. The TCJA tax increase for millionaires first appeared in Tax-Calculator version 0.16.2, which was released on March 9, 2018. Taxes went down on average for millionaires under TCJA in Tax-Calculator version 0.16.1, which was released on February 16, 2018.

And I've also determined that there is a large mean tax cut under TCJA for millionaires (as you would expect) when using the CPS input data with both the current and 0.16.1 versions of Tax-Calculator. This suggests that the change from a tax cut to a tax increase for millionaires is not caused by any recent changes in how taxes are computed, but rather has to do with one or more of the following things: (a) the new PUF data introduced in 0.16.2, (b) the way Tax-Calculator handles the input data, (c) the new way Tax-Calculator computes expanded income beginning in 0.16.2, or (d) something else.

Does this way of thinking about the problem make sense to you?
Can you think of anything else that might have caused the tax cuts to turn into tax hikes for the millionaires?

Here, for the record, is the Python script I've used to produce the results I mention above:

import taxcalc
print 'Using taxcalc version', taxcalc.__version__
from taxcalc import *

recs = Records()  # puf.csv data
#recs = Records.cps_constructor()  # cps.csv data

# 2018 static analysis of pre-TCJA policy
preTCJA_filename = '../tax-calculator/taxcalc/reforms/2017_law.json'
preTCJA_reform = Calculator.read_json_param_objects(preTCJA_filename, None)
pol_pre = Policy()
pol_pre.implement_reform(preTCJA_reform['policy'])
calc_pre = Calculator(policy=pol_pre, records=recs, verbose=False)
calc_pre.advance_to_year(2018)
calc_pre.calc_all()

# 2018 static analysis of post-TCJA policy
pol_post = Policy()
calc_post = Calculator(policy=pol_post, records=recs, verbose=False)
calc_post.advance_to_year(2018)
calc_post.calc_all()

# tabulate mean difference in tax libability across expanded income bins
dtable = calc_pre.difference_table(calc_post,
                                   groupby='standard_income_bins', # 0.16.2+
                                   #groupby='webapp_income_bins', # <0.16.2
                                   income_measure='expanded_income',
                                   tax_to_diff='combined')
print dtable['mean']

This script produces the following results when using the newest puf.csv file and Tax-Calculator code at the tip of the master branch:

Using taxcalc version 0.18.0-105-gedd259bc
<$0K           7,895.29
=$0K              -2.27
$0-10K           -13.04
$10-20K         -124.33
$20-30K         -255.70
$30-40K         -460.38
$40-50K         -628.03
$50-75K         -867.56
$75-100K      -1,227.42
$100-200K     -1,896.79
$200-500K     -5,437.11
$500-1000K   -12,474.16
>$1000K        4,715.49
ALL             -936.56
Name: mean, dtype: float64

@andersonfrailey

@ernietedeschi
Copy link
Contributor Author

Thank @martinholmer. Very helpful. Always want to make sure I'm not making a basic error that I'm overlooking.

When you say "the tax hike for filers with more than $1M is ... inconsistent with other estimates," don't forget that (I think) both TPC and JCT include the change in the corporate income tax liability imputed to filing units while Tax-Calculator includes only the change in payroll tax and individual income tax liability. That's a big difference for the millionaires, who are probably imputed most of the enormous TCJA-induced reduction in corporate income tax liability.

Yes, and this was my first thought, because as you said most organizations reported the distributional effects of both the CIT and the IIT together. But the TPC and JCT links I included are to analyses that break out just the IIT effects, and both show average cuts for millionaires. Of course, other models' output is not dispositive for how Tax-Calculator works, but I remembered in the past that Tax-Calculator was in the ballpark of these estimates, and even here the Tax-Calculator results are quite close to TPC's for the <$1M categories.

And I've also determined that there is a large mean tax cut under TCJA for millionaires (as you would expect) when using the CPS input data with both the current and 0.16.1 versions of Tax-Calculator. This suggests that the change from a tax cut to a tax increase for millionaires is not caused by any recent changes in how taxes are computed, but rather has to do with one or more of the following things: (a) the new PUF data introduced in 0.16.2, (b) the way Tax-Calculator handles the input data, (c) the new way Tax-Calculator computes expanded income beginning in 0.16.2, or (d) something else.

And after I posted last night, I too found the same thing using the CPS data. The possible mechanisms you mention sound right, but you all are far more familiar with the internal mechanics and how they've changed than I am.

@martinholmer
Copy link
Collaborator

Pull request #1977 fixes the bug reported by @evtedeschi3 in an earlier comment in this issue. After the #1977 bug fix, the results from the Python script listed at the end of this comment are as follows:

<$0K           1,179.40
=$0K              -2.27
$0-10K           -14.01
$10-20K         -124.52
$20-30K         -256.03
$30-40K         -460.49
$40-50K         -628.05
$50-75K         -868.31
$75-100K      -1,232.12
$100-200K     -1,903.59
$200-500K     -5,475.34
$500-1000K   -12,826.28
>$1000K       -9,309.15
ALL           -1,052.04

Even after the bug fix, the millionaires have a diverse experience under the TCJA reform: most get tax cuts, but a significant minority experience tax hikes. Here are the number getting cuts/hikes and the average size of the TCJA-induced tax change (td) for just those filing units with expanded income above $1 million:

         count(th)     avg_td($)
ALL            709        -9,309
td>=0          203       +73,378
td<0           506       -42,532

@martinholmer
Copy link
Collaborator

Pull request #1977, and release 0.19.0, resolve issue #1975.
@evtedeschi3, Thanks again for the bug report.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants