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

Estimating 2014 JCT count/amount targets for nonitemizers? (2014 PUF) #407

Open
Thirdhuman opened this issue Nov 7, 2021 · 1 comment
Open

Comments

@Thirdhuman
Copy link

Thirdhuman commented Nov 7, 2021

I'm currently working on adapting TaxData for use with the 2014 PUF file.

The primary data-related obstacle I'm facing is in regards the use of 2011 JCT to impute itemized expense amounts to nonitemizers based upon the JCX-75-15 in the script titled "impute_itmexp.py" for my 2014 PUF. The JCT has never provided an update to these targets beyond 2011.

Below are the JCT 2011 targets that I'd like to estimate for 2014:
image

Since I do not have access to a 2011 PUF file, can someone infer for me what the rough JCT replacement values for 2014 would be? Or, alternatively, point me towards an approach for backing out the underlying formulas so I can adjust these JCT values on my end?

@martinholmer
Copy link
Contributor

@Thirdhuman said in issue #407:

The primary data-related obstacle I'm facing is in regards the use of 2011 JCT to impute itemized expense amounts to nonitemizers based upon the JCX-75-15 in the script titled impute_itmexp.py for my 2014 PUF. The JCT has never provided an update to these targets beyond 2011.

I'm sorry to hear the JCT has not updated their JCX-75-15 estimates since 2011.

Here are the 14 2011 JCT estimates used in the impute_itmexp.py module to impute itemized expenses for nonitemizers:

    # specify 2011 JCT count/amount targets for nonitemizers
    # (When JCX-75-15 Table 2 contains more than one line item for a
    #  PUF variable, we assume the largest count represents the count
    #  for the PUF variable, and we assume that the sum of the amounts
    #  for the line items represents the amount for the PUF variable.)
    target_cnt = dict(zip(iev_names, [0.0] * len(iev_names)))
    target_amt = dict(zip(iev_names, [0.0] * len(iev_names)))
    target_cnt["e18400"] = 113.2
    target_amt["e18400"] = 128.1
    target_cnt["e18500"] = 34.7
    target_amt["e18500"] = 46.2
    target_cnt["e19200"] = 16.7
    target_amt["e19200"] = 58.5
    target_cnt["e19800"] = 63.0
    target_amt["e19800"] = 27.7
    target_cnt["e20100"] = 31.5
    target_amt["e20100"] = 15.6
    target_cnt["e20400"] = 16.2
    target_amt["e20400"] = 18.6
    target_cnt["e17500"] = 5.5
    target_amt["e17500"] = 20.4

The best you can do is to extrapolate each of these fourteen estimates from its 2011 value to what you think its 2014 value is. How you do that in a cleaver way is up to you.
Also, you will need to change any 2011-specific tax parameters in the impute_itmexp.py module to their 2014 values (for example, the standard deduction amounts).

Then, using the 2014 PUF micro data, simply repeat the process I used with the 2011 data --- see PR #275 (2018-08-24). In this iterative process, you change the values of the following adjustment factors (af) so that the imputed amounts add up to the 2014 JCT aggregate targets:

    # specify calibrated logit-probability and log-amount additive factors
    # (Note that the logit_prob_af value will affect both the count and
    #  the amount for that itmexp variable, so calibrate logit_prob_af
    #  first and then calibrate the log_amount_af value.  Also, note that
    #  because of the recursive nature of the imputation equations, the
    #  two additive factors for each itemexp variable must be calibrated
    #  in the order the equations are estimated.)
    logit_prob_af = dict(zip(iev_names, [0.0] * len(iev_names)))
    log_amount_af = dict(zip(iev_names, [0.0] * len(iev_names)))
    logit_prob_af["e18400"] = 1.40
    log_amount_af["e18400"] = -0.753
    logit_prob_af["e18500"] = -2.73
    log_amount_af["e18500"] = -0.93
    logit_prob_af["e19200"] = -2.90
    log_amount_af["e19200"] = -0.282
    logit_prob_af["e19800"] = -0.70
    log_amount_af["e19800"] = -1.47
    logit_prob_af["e20100"] = -0.73
    log_amount_af["e20100"] = -0.63
    logit_prob_af["e20400"] = -2.25
    log_amount_af["e20400"] = -0.28
    logit_prob_af["e17500"] = -2.70
    log_amount_af["e17500"] = -0.31

You should also read the code added in PR #279 (2018-09-05), and the discussion of that PR, to get familiar with this kind of iterative parameter calibration process and because you will also need to impute pension contributions to the 2014 PUF data.

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

No branches or pull requests

2 participants