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

Refining EIC Calculation Using Age Variable #687

Merged
merged 14 commits into from
Apr 25, 2016

Conversation

GoFroggyRun
Copy link
Contributor

@GoFroggyRun GoFroggyRun commented Apr 11, 2016

This PR deals with EIC calculation. Previously, 'numextra' is used to determine elder units and exclude them from claiming EIC. Thanks to the 'age' variable in the CPS matched puf file, we are able to further refine the criteria that is used to determine whether a unit is eligible for EIC or not. To be specific, units under age 25 or over 65 are being excluded from EITC, where the age thresholds have also been parametrized to incorporate related reform.

Comparing our prediction against SOI 2013 data, we have:

  1. EIC earned income amount of 497.9B against SOI’s 501.6B and
  2. EIC amount of 67.5B against SOI’s 68.1B.

And here is the diagnostic table:
base

Moreover, the modification of EIC logic also improves the estimation of revenue changes resulted from EITC reform:

reform0 = {2016: {'_EITC_rt':[[0.153, 0.3400, 0.4000, 0.4500]]
                 ,'_EITC_prt':[[0.153, 0.1598, 0.2106, 0.2106]]
                 ,'_EITC_c':[[1005, 3359, 5548, 6242]]
                 ,'_EITC_ps':[[11500, 18150, 18150, 18150],]
                 }
          }

Previously, implementing this reform would result in revenue change of amount -$101 B (http://www.ospc.org/taxbrain/2355/), while in C. Expand the EITC for Workers without Qualifying
Children
, JCT estimates a revenue change of -$71.6 B. (Notice that JCT has, additionally, taken the change of age threshold into consideration, which means that if we further implement reform of age threshold, the difference would be even larger.) This patch narrows the gap:
screen shot 2016-04-11 at 6 10 52 pm
Implementing the same reform now gives us a revenue change of - $55.4 B, which seems to be much more appropriate.

Lastly, when we also incorporate the change of age threshold for EIC eligibility:

reform1 = {2016: {'_EITC_rt':[[0.153, 0.3400, 0.4000, 0.4500]]
                 ,'_EITC_prt':[[0.153, 0.1598, 0.2106, 0.2106]]
                 ,'_EITC_c':[[1005, 3359, 5548, 6242]]
                 ,'_EITC_ps':[[11500, 18150, 18150, 18150],]
                  ,'_EITC_Age_flr':[21]
                  ,'_EITC_Age_cel':[67]
                 }
          }

we have the diagnostic table
screen shot 2016-04-11 at 6 13 09 pm
which yields a revenue change of amount - $87 B, comparing JCT's - $ 71.6 B.
Not only has the gap been narrowed, but the two revenue changes (our's and JCT's) are now standing on the exact same reform. All changes can be described as the following table:

Reform 0 Reform 1
Master -$101 (B) -$X (B) where X > 101
This PR -$55.4 (B) -$87 (B)
JCT -$Y (B) where Y < 71.6 -$71.6 (B)

Any comments, concerns or remarks would be appreciated.

@MattHJensen @martinholmer @feenberg @Amy-Xu

@codecov-io
Copy link

Current coverage is 87.36%

Merging #687 into master will not affect coverage as of 1e35e12

@@            master    #687   diff @@
======================================
  Files           12      12       
  Stmts         1701    1701       
  Branches         0       0       
  Methods          0       0       
======================================
  Hit           1486    1486       
  Partial          0       0       
  Missed         215     215       

Review entire Coverage Diff as of 1e35e12

Powered by Codecov. Updated on successful CI builds.

@martinholmer
Copy link
Collaborator

@GoFroggyRun,
What about all the Internet-TAXSIM validation test failures? You need to fix those before anybody will give your pull request serious attention.

Also, the names of the two new EITC parameters that you are proposing to add to current_law_policy.json are too cryptic and their descriptions are simply incorrect; you need to fix both of those problems.

And your pull request does not include the changes in the taxcalc/comparison/reform_results.txt file that your pull request causes. Why are those changes missing from your pull request?

And finally, in the signature of your revised NumDep function, you have added the age variable, which is included in the puf.csv file. Can you tell us how that variable has been constructed? Whose age does it describe?

@MattHJensen @feenberg @Amy-Xu

@martinholmer martinholmer changed the title Refining EIC Calculation Using Age Variable [WIP] Refining EIC Calculation Using Age Variable Apr 12, 2016
@GoFroggyRun
Copy link
Contributor Author

@martinholmer:

Thank you for your thoughtful comments on this PR. I just pushed a few commits that addressed your concerns:

  1. The TAXSIM inconsistency has now been fixed.
  2. Descriptions for the two added parameters have been modified.
  3. Changes in 'reform_results.txt' have now been reflected.
  4. Age variable, as its name suggests, stands for the age of the primary tax payer. The variable was imputed based on the puf variable AGERANGE. I'm not, however, quite familiar with details regarding the cps 'matching' process.

Please take a look at these updates and let me know what you think.

@GoFroggyRun GoFroggyRun changed the title [WIP] Refining EIC Calculation Using Age Variable Refining EIC Calculation Using Age Variable Apr 12, 2016
@martinholmer
Copy link
Collaborator

@GoFroggyRun,

The new policy parameter names are still cryptic and the new descriptions are still incorrect.

And more to the point, the logic in the lines you are proposing to add is simply incorrect.
Here is the core of what you're proposing:

        if (EIC == 0 and (age < EITC_flr or age >= EITC_cel)):
            c59660 = 0.
        else:
            c59660 = _preeitc

That is not what the tax law says.

@MattHJensen @feenberg @Amy-Xu

@GoFroggyRun
Copy link
Contributor Author

@martinholmer:

As indicated in 1040 instruction, page 55, item 2 in step 4, Filers Without a Qualifying Child, says:

Were you, or your spouse if filing a joint return, at least age 25 but under age 65 at the end of 2015? ....
Yes. Continue
No. STOP You can't take the credit.

Why do you think the code lines fail to represent the correct tax logic? Where exactly, in your opinion, went wrong?

@GoFroggyRun
Copy link
Contributor Author

GoFroggyRun commented Apr 25, 2016

After PR #701 being merged, which added age variables for head and spouse based on CPS data. We have a few updates on the EITC statistics:

Our EITC estimation has changed for 2013:

Before #701, master After #701, master SOI
EIC earned income $497.9 (B) $478.4 (B) $501.6 (B)
EIC $67.5 (B) $66.4 (B) $ 68.1 (B)

Moreover, the diagnostic table for each case has changed:

For current master after #701:
master_ver

For the reform option

reform0 = {2016: {'_EITC_rt':[[0.153, 0.3400, 0.4000, 0.4500]]
                 ,'_EITC_prt':[[0.153, 0.1598, 0.2106, 0.2106]]
                 ,'_EITC_c':[[1005, 3359, 5548, 6242]]
                 ,'_EITC_ps':[[11500, 18150, 18150, 18150],]
                 }
          }

after #701:
partial

For the reform option

reform1 = {2016: {'_EITC_rt':[[0.153, 0.3400, 0.4000, 0.4500]]
                 ,'_EITC_prt':[[0.153, 0.1598, 0.2106, 0.2106]]
                 ,'_EITC_c':[[1005, 3359, 5548, 6242]]
                 ,'_EITC_ps':[[11500, 18150, 18150, 18150],]
                  ,'_EITC_MinEligAge':[21]
                  ,'_EITC_MaxEligAge':[66]
                 }
          }

after #701:
full_reform

These diagnostic tables can be summarized using the following table: (numbers shown are changes for EIC)

Reform 0 Reform 1
Master after #701 -$40.8 (B) -$41.7 (B)
JCT -$Y (B) where Y < 71.6 -$71.6 (B)
Master before #701 -$101 (B) -$X (B) where X > 101

@martinholmer @MattHJensen Please take a look.

Although the bump between reform 0 and reform 1 seems to be much more sensible on current master, I'm actually not quite sure about the discrepancy between our estimation on the EITC reform against JCT's.

@martinholmer
Copy link
Collaborator

Sean said:

Lastly, when we also incorporate the change of age threshold for EIC eligibility:

reform1 = {2016: {'_EITC_rt':[[0.153, 0.3400, 0.4000, 0.4500]]
                 ,'_EITC_prt':[[0.153, 0.1598, 0.2106, 0.2106]]
                 ,'_EITC_c':[[1005, 3359, 5548, 6242]]
                 ,'_EITC_ps':[[11500, 18150, 18150, 18150],]
                  ,'_EITC_Age_flr':[21]
                  ,'_EITC_Age_cel':[67]
                 }
          }

First, I don't understand how you can specify this reform using the code in this pull request: there are no such policy parameters _EITC_Age_flr or _EITC_Age_cel.

Second, the JCT document you link to makes it quite clear that the EITC reform starts in 2017, while you have it starting in 2016.

And third, the specification of reform1 above is not exactly what the President proposed in his 2017 budget or what the JCT estimated in their document. Page 128 of the 2017 Green Book describes the reform as follows:

The proposal would increase the EITC for workers without qualifying children
by doubling the phase-in rate and the phase-out rate from 7.65 percent to 
15.3 percent, thereby doubling the maximum credit in 2017 from an estimated
$511 to an estimated $1,022. The beginning of the phase-out range would be
increased from an estimated $8,360 to $11,500 (from $13,960 to $17,100 for
joint filers) and be indexed for inflation in subsequent years as under current
law.  Thus, the credit for workers without qualifying children would be phased
out completely at an estimated $18,180 for single taxpayers and $23,780 for 
married taxpayers filing jointly.  The proposal would also allow taxpayers who
are at least age 21 and under age 67 to claim the EITC for workers without 
qualifying children, if otherwise eligible. In the case of married taxpayers 
filing jointly, the credit could be claimed if either spouse were at least age 21
and under age 67.  As under current law, taxpayers who could be claimed 
as a qualifying child or a dependent would not be eligible for the EITC for
childless workers. Thus, full-time students who are dependent upon their
parents would not be allowed to claim the EITC for workers without 
qualifying children, despite meeting the new age requirements, even if
their parents did not claim a dependent exemption or an EITC on their behalf.
In addition, a separate proposal would simplify the EITC rules by allowing
certain taxpayers who reside with a qualifying child that they do not claim
to receive the EITC for workers without qualifying children.

This proposal would be effective for taxable years beginning after December 31, 2016

So, maybe if you raise the 2017 _EITC_c amount to what it is supposed to be, specify the _EITC_MinEligAge to be 21 and _EITC_MaxEligAge to be 66 (not 67), and start the reform in 2017, the gap between the ten-year JCT estimate and the ten-year Tax-Calculator estimate will be somewhat less.

@GoFroggyRun @MattHJensen

@GoFroggyRun
Copy link
Contributor Author

GoFroggyRun commented Apr 25, 2016

@martinholmer
Thanks for your prompt response.

             ,'_EITC_Age_flr':[21]
              ,'_EITC_Age_cel':

The two variables are mistakably copy-paste from the previous comment. I have just corrected my post.

I'll try to re-estimate the reform and post the results very soon.

@GoFroggyRun
Copy link
Contributor Author

GoFroggyRun commented Apr 25, 2016

@martinholmer

So I modified the start year of the reform to be 2017:

reform1 = {2017: {'_EITC_rt':[[0.153, 0.3400, 0.4000, 0.4500]]
                 ,'_EITC_prt':[[0.153, 0.1598, 0.2106, 0.2106]]
                 ,'_EITC_c':[[1022, 3418.5355, 5647.222, 6353.6315]]
                 ,'_EITC_ps':[[11500,18435.565, 18435.565, 18435.56 ]]
                 }
          }
policy1.implement_reform(reform1)
reform0 = {2017: {'_EITC_rt':[[0.153, 0.3400, 0.4000, 0.4500]]
                 ,'_EITC_prt':[[0.153, 0.1598, 0.2106, 0.2106]]
                 ,'_EITC_c':[[1022, 3418.5355, 5647.222, 6353.6315]]
                 ,'_EITC_ps':[[11500,18435.565, 18435.565, 18435.56 ]]
                  ,'_EITC_MinEligAge':[21]
                  ,'_EITC_MaxEligAge':[66]
                 }
          }
policy0.implement_reform(reform0)

where extrapolation of parameters are involved.

The diagnostic tables are now:

baseline:
original

reform 1 (no age change):
partial

reform 0 (the same as JCT):
full

And, again, changes can be summarized using this table:

Reform (No Age) Full Reform
Master after #701 -$44.4 (B) -$45 (B)
JCT -$Y (B) where Y < 71.6 -$71.6 (B)
Master before #701 -$101 (B) -$X (B) where X > 101

Although numbers are getting closer comparing to results in my previous post, it seems that they re still quite different from JCT's estimation. I'm not sure whether this is coming from extrapolation process for parameters or not (which essentially changes the baseline):

  1. The estimated phaseout for EITC before reform, as described in the Green book, was $8,360 for 2017, while we estimated the value to be $8381.645.
  2. The estimated maximum threshold for EITC before reform, as described in the Green book, was $511 for 2017, while we estimated the value to be 512.831.

The difference for these parameters seems rather negligible to me, I'll, however, try to use their estimations in Green book (before reform) and then get another "baseline" on top of that.

cc @MattHJensen

@GoFroggyRun
Copy link
Contributor Author

The "baseline" that assumes the estimation of parameters in the Green book is
screen shot 2016-04-25 at 5 17 02 pm
where reform options are specified as follow:

reform2 = {2017: {'_EITC_c':[[511, 3418.5355, 5647.222, 6353.6315]]
                 ,'_EITC_ps':[[8360,18435.565, 18435.565, 18435.56 ]]
                 }
          }

The total difference of combined liability for 10-year windows for the two baselines is just $0.2 (B). Given this, I'm not quite sure where the discrepancy would come from for the EITC reform estimation between our calculator and JCT.

@martinholmer
Copy link
Collaborator

Sean did much good investigative work and then concluded:

The total difference of combined liability for 10-year windows for the two baselines is just $0.2 (B). Given this, I'm not quite sure where the discrepancy would come from for the EITC reform estimation between our calculator and JCT.

What about the following possibility (this is just a wild guess)?

The 2017 Green Book (see quotation above in this discussion) says:

In addition, a separate proposal would simplify the EITC rules by allowing
certain taxpayers who reside with a qualifying child that they do not claim
to receive the EITC for workers without qualifying children.

Frankly, I don't understand what that sentence means. But it seems to suggest that the President is also proposing another EITC reform that would increase EITC payments for some people. If JCT estimated the effect of both these EITC reforms in one line-item in their table, then perhaps some of the difference is caused by the JCT inclusion of the second reform. Do we have any textual evidence that JCT estimated these two EITC reforms separately? (If not, maybe they made a mistake. My recent finding of a non-trivial mistake in CBO social security replacement rate calculations shows that even the most professional government organizations can make mistakes.)

Before suggesting a JCT mistake, however, it seems as if we should investigate the age data being used by Tax-Calculator and JCT. Are our age data realistic? That is, does the age distribution in puf.csv look like the US population? And does the joint distribution of head-spouse ages in couples look like the US population? And finally, does JCT use both head and spouse age information in their estimation of this reform? If so, where do they get the ages (because they are not available from the IRS SOI PUF in the most cases)?

@GoFroggyRun @MattHJensen @Amy-Xu @feenberg

@martinholmer
Copy link
Collaborator

martinholmer commented Apr 25, 2016

I think this pull request #687 needs to be merged now.

An investigation of the sources of the difference between the JCT and Tax-Calculator EITC reform estimates is very important but can be pursued as a separate issue.

@MattHJensen @feenberg @Amy-Xu @GoFroggyRun

@MattHJensen
Copy link
Contributor

An investigation of the sources of the difference between the JCT and Tax-Calculator EITC reform estimates is very important but can be pursued as a separate issue.

That makes sense to me as well. @GoFroggyRun, if that makes sense to you, then it seems like @martinholmer should merge.

@GoFroggyRun
Copy link
Contributor Author

@martinholmer @MattHJensen
Yes. I'll pursue JCT's assumptions later in a separate issue. Please go ahead and merge.

@martinholmer
Copy link
Collaborator

Merging Sean Wang's pull request #687 into the master branch. The issue of the non-trivial difference in EITC age-eligibility reform estimates generated by the Tax-Calculator and the JCT will be investigated in a separate issue.

@martinholmer
Copy link
Collaborator

Re-open pull request #687 so that it can be merged.

@martinholmer martinholmer reopened this Apr 25, 2016
@martinholmer martinholmer merged commit 6994522 into PSLmodels:master Apr 25, 2016
@feenberg
Copy link
Contributor

On Mon, 25 Apr 2016, Martin Holmer wrote:

Sean did much good investigative work and then concluded:

  The total difference of combined liability for 10-year windows for the two
  baselines is just $0.2 (B). Given this, I'm not quite sure where the
  discrepancy would come from for the EITC reform estimation between our
  calculator and JCT.

What about the following possibility (this is just a wild guess)?

The 2017 Green Book (see quotation above in this discussion) says:

In addition, a separate proposal would simplify the EITC rules by allowing
certain taxpayers who reside with a qualifying child that they do not claim
to receive the EITC for workers without qualifying children.

That is obscure. I think it means that the qorking boyfriend living with a
single mom can receive EITC. But who really knows.

dan

Frankly, I don't understand what that sentence means. But it seems to suggest that the
President is also proposing another EITC reform that would increase EITC payments for
some people. If JCT estimated the effect of both these EITC reforms in one line-item
in their table, then perhaps some of the difference is caused by the JCT inclusion of
the second reform. Do we have any textual evidence that JCT estimated these two EITC
reforms separately? (If not, maybe they made a mistake. My recent finding of a
non-trivial mistake in CBO social security replacement rate calculations shows that
even the most professional government organizations can make mistakes.)

Before suggesting a JCT mistake, however, it seems as if we should investigate the age
data being used by Tax-Calculator and JCT. Are our age data realistic? That is, does
the age distribution in puf.csv look like the US population? And does the joint
distribution of head-spouse ages in couples look like the US population? And finally,
does JCT use both head and spouse age information in their estimation of this reform?
If so, where do they get the ages (because they are not available from the IRS SOI PUF
in the most cases)?

@GoFroggyRun @MattHJensen @Amy-Xu @feenberg


You are receiving this because you were mentioned.
Reply to this email directly or view it on
GitHub[AHvQVehuQjeF35MNVJqW61FfPJjdWHaQks5p7TlagaJpZM4IE3kp.gif]

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

Successfully merging this pull request may close these issues.

None yet

5 participants