PSLmodels / tax-microdata-benchmarking

A project to develop a benchmarked general-purpose dataset for tax reform impact analysis.
https://pslmodels.github.io/tax-microdata-benchmarking/
2 stars 6 forks source link

Making sure wage variables align properly with Tax-Calculator income tax and payroll tax concepts and treatment #8

Closed donboyd5 closed 1 month ago

donboyd5 commented 8 months ago

Please tell me if I got anything wrong in this thread and I will edit to correct.

Background on the issue - first of several comments

@martinholmer shared an email chain with me (Zotero link) that says, as I read it:

@MaxGhenis says that PolicyEngine uses an ASEC variable intended to capture total wages, before pre-tax contributions. Thus, while it makes sense for payroll taxes, he (and I expect @nikhilwoodruff ) will create an after-contributions variable to use for income tax calculations and this issue will fix it.

MaxGhenis commented 8 months ago

We're working on this in https://github.com/PolicyEngine/policyengine-us/pull/3840.

I haven't looked closely at Tax-Calculator but I think they have the same gap TAXSIM and PolicyEngine does today.

This is also now motivating us to distribute the ASEC retirement contributions variable (https://github.com/PolicyEngine/policyengine-us/issues/3842) and model the Saver's Credit (https://github.com/PolicyEngine/policyengine-us/issues/3841).

donboyd5 commented 8 months ago

Relevance for us

First, we need to be sure we know exactly what Tax-Calculator assumes for income tax and payroll tax. I believe that for income tax purposes, it uses e00200 for wages, which is wages after retirement contribution deductions (verification below). I have assumed but never verified that Tax-Calculator grosses up wages to add back relevant contribution deductions to arrive at proper wages for payroll-tax calculations (before caps where relevant) but @MaxGhenis just responded that he thinks Tax-Calculator does not do this (and therefore would be incorrect in a quite substantial way). @martinholmer or @nikhilwoodruff are you able to verify the Tax-Calculator treatment of wages for payroll tax purposes?

Second, we need to be sure of the wages we are feeding to Tax-Calculator in this project.

So I think our job is to (1) be 100% sure of how Tax-Calculator deals with this, (2) if it does not calculate the proper wage variables for income and payroll taxes ask that they do so, (3) make sure that our PE-based and PUF-based data files have the raw information needed to calculate proper wages for income and payroll tax purposes, and (4) make sure that we have variables in a form needed for Tax-Calculator (specifically, we'll want either two versions of wages, or probably preferably, a total wage concept, and information models can use to calculate proper income-tax and payroll-tax wages - but in any event, we'll need to work with what is needed for Tax-Calculator).

donboyd5 commented 8 months ago

Thank you @MaxGhenis we will want to stay in synch with you.

MaxGhenis commented 8 months ago

That Zotero link didn't work for me, but here's the file. Page 53 confirms your statement. 2015 Public Use Booklet.pdf

Are you intending to impute pre-tax contributions from the ASEC to the PUF? I don't think the PUF itself has this information. It also takes some imputation even within the ASEC as it only reports total retirement contributions and health insurance premiums.

donboyd5 commented 8 months ago

We haven't discussed that yet and need to. Would like to learn from you and cooperate with you.

Sent from my phone; please excuse brevity and speech-to-text errors.

On Sun, Feb 11, 2024, 1:45 PM Max Ghenis @.***> wrote:

That Zotero link didn't work for me, but here's the file. Page 53 confirms your statement. 2015 Public Use Booklet.pdf https://github.com/PSLmodels/tax-microdata-benchmarking/files/14233608/2015.Public.Use.Booklet.1.pdf

Are you intending to impute pre-tax contributions from the ASEC to the PUF? I don't think the PUF itself has this information. It also takes some imputation even within the ASEC as it only reports total retirement contributions and health insurance premiums.

— Reply to this email directly, view it on GitHub https://github.com/PSLmodels/tax-microdata-benchmarking/issues/8#issuecomment-1937835389, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABR4JGH5WMGTASEBFMBCCGDYTEGTRAVCNFSM6AAAAABDDWPNBGVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTSMZXHAZTKMZYHE . You are receiving this because you authored the thread.Message ID: @.***>

martinholmer commented 8 months ago

@MaxGhenis said in issue #8:

I haven't looked closely at Tax-Calculator but I think they have the same gap TAXSIM and PolicyEngine does today.

I don't think so. Anybody concerned with the issue should read this Tax-Calculator thread, which began in September 2017 and concluded a year later.

MaxGhenis commented 8 months ago

Thanks @martinholmer, and apologies for the wrong guess. If I'm understanding that thread correctly, you build a model of pension contributions in Tax-Data's impute_pencon.py, using SOI Tax Stats - Individual Information Return Form W-2 Statistics. You used the 2011 version of that data, and SOI has now released through 2018. IIUC, you use neither the SCF (as Dan suggested and which TPC does per https://github.com/PSLmodels/Tax-Calculator/issues/1549#issuecomment-336119755), nor the ASEC's pension contributions variable.

Do Tax-Data/Tax-Calculator also consider other pre-tax contributions like health insurance premiums and cafeteria plans?

cc @pavelmakarchuk

martinholmer commented 8 months ago

@MaxGhenis said in issue #8:

Thanks @martinholmer, and apologies for the wrong guess. If I'm understanding that thread correctly, you build a model of pension contributions in Tax-Data's impute_pencon.py, using SOI Tax Stats - Individual Information Return Form W-2 Statistics. You used the 2011 version of that data, and SOI has now released through 2018. IIUC, you use neither the SCF (as Dan suggested and which TPC does per https://github.com/PSLmodels/Tax-Calculator/issues/1549#issuecomment-336119755), nor the ASEC's pension contributions variable.

That's the way I remember it, but I did that work many years ago. You can double check Tax-Data's impute_pencon.py make sure my memory is correct. Most definitely did not use the SCF or ASEC data.

martinholmer commented 8 months ago

@MaxGhenis asked in issue #8:

Do Tax-Data/Tax-Calculator also consider other pre-tax contributions like health insurance premiums and cafeteria plans?

I don't think so.

Most "health insurance premiums" are paid directly by the employer as an in-kind part of the employee's total compensation package. So, employer-paid health insurance is not part of an employee's wages or salary.

However, in some cases the employer does not pay the whole premium and asks the employee to pay some of the premium out of the employee's wages or salary. That is always done via the employer's cafeteria plan, so that any employee payment of health insurance premiums is income-tax free.

And, of course, other employee contributions to the cafeteria plan (for child care expenses and out-of-pocket medical expenses, for example) come out of gross wages and salary, and are therefore, not part of taxable wages and salary from the point of view of the income tax.

feenberg commented 8 months ago

On Sun, 11 Feb 2024, Don Boyd wrote:

  • TAXSIM starts with W-2 box 1, which is wages after these various deductions. [Thus, it should be correct for income taxes.] The email thread suggests but does not verify that does not addback retirement contributions for purposes of payroll tax calculations, and thus might be wrong for payroll tax. [I don't know about this, and we should touch base with @feenberg about it.]

I was queried just last week about just this issue - the first time it has ever been brought up. I don't want to add multiple variables for something that is never available in survey data, so I suggested to the user that they run the data through taxsim twice, once for the income tax and once for FICA, with different notions of wage in the two runs.

Dan

MaxGhenis commented 8 months ago

@feenberg the ASEC has variables for retirement contributions and health insurance premiums. We've updated PolicyEngine to incorporate these into our tax model (noting that only a portion is subtracted from taxable wages and salaries). You can view the implementation at https://github.com/PolicyEngine/policyengine-us/pull/3840.

feenberg commented 8 months ago

On Tue, 13 Feb 2024, Max Ghenis wrote:

@feenberg the ASEC has variables for retirement contributions and health insurance premiums. We've updated PolicyEngine to incorporate these into our tax model. You can view the implementation at https://github.com/PolicyEngine/policyengine-us/pull/3840.

I am not very good with github - that link just leads to "There isn't anything to compare" and I couldn't find the relevant code.

But I did look at the CPS ASEC documentation, and I see employee contributions to a retirement account are present, but not to health insurance. Am I right that the former is exempt from income tax, but not from FICA, and the later is exempt from both?

I am not inclined to add variables for retirement contributions, and it doesn't seem like there is any problem with health insurance.

Dan

-- Reply to this email directly or view it on GitHub: https://github.com/PSLmodels/tax-microdata-benchmarking/issues/8#issuecomment-1942286887 You are receiving this because you were mentioned.

Message ID: @.***>

MaxGhenis commented 8 months ago

that link just leads to "There isn't anything to compare" and I couldn't find the relevant code.

Hmm the link takes me to the description, but you can see the code changes directly here: https://github.com/PolicyEngine/policyengine-us/pull/3840/files

The ASEC has both retirement contributions and out of pocket health insurance premiums. Some of each of these (contributions to traditional 401(k) and cafeteria plans) are pre-tax. I've also suggested opportunities to improve imputation of the latter in https://github.com/PolicyEngine/policyengine-us/issues/3873.

We now have a single pre_tax_contributions variable that users can input directly to include the true parts of retirement contributions and premiums that reduce taxable wages and salaries but still incur payroll tax. We impute those from signals in the ASEC, but users can also specify them themselves. If you wanted to avoid making those imputations in TAXSIM and keep it as a rules engine, you could consider a similar approach.

feenberg commented 8 months ago

On Tue, 13 Feb 2024, Max Ghenis wrote:

that link just leads to "There isn't anything to compare" and I couldn't find the relevant code.

Hmm the link takes me to the description, but you can see the code changes directly here: https://github.com/PolicyEngine/policyengine-us/pull/3840/files

That works. Thanks.

The ASEC has both retirement contributions and out of pocket health insurance premiums. Some of each of these are pre-tax. I've also suggested opportunities to improve imputation of the latter in https://github.com/PolicyEngine/policyengine-us/issues/3873.

We now have a single pre_tax_contributions variable that users can input directly to include the true parts of retirement contributions and premiums. We impute those from signals in the ASEC, but users can also specify them themselves. If you wanted to avoid making those imputations in TAXSIM and keep it as a rules engine, you could consider a similar approach.

I have avoided imputations in Taxsim because I have always thought of Taxsim as a way to generate variables for the RHS of a regression. In that case, adding a realistic imputation (a predicted value with noise) wouldn't help. The predicted value component would change the constant term in the regression, and the noise would reduce the precision of the estimated coefficient. Of course, an imputation would make tabs of liability more accurate, but I haven't expected Taxsim to be much used for that, and the imputations are both difficult and controversial.

Dan

MaxGhenis commented 8 months ago

Dan - understood. If you'd like you could avoid imputations by adding a variable for pre-tax contributions, and letting users do the imputations themselves. The rules given pre-tax contributions are unambiguous.

(Sorry Don for hijacking this thread for broader discussion.)

donboyd5 commented 8 months ago

No problem - very helpful!

On Wed, Feb 14, 2024 at 10:39 AM Max Ghenis @.***> wrote:

Dan - understood. If you'd like you could avoid imputations by adding a variable for pre-tax contributions, and letting users do the imputations themselves. The rules given pre-tax contributions are unambiguous.

(Sorry Don for hijacking this thread for broader discussion.)

— Reply to this email directly, view it on GitHub https://github.com/PSLmodels/tax-microdata-benchmarking/issues/8#issuecomment-1944085599, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABR4JGDXLY3EREJZU2UUCPLYTTLCXAVCNFSM6AAAAABDDWPNBGVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTSNBUGA4DKNJZHE . You are receiving this because you authored the thread.Message ID: @.***>

martinholmer commented 1 month ago

The problems with the tax-microdata handling of pretax pension contributions were fixed in pull request #173.

donboyd5 commented 1 month ago

Thank you @Martin Holmer @.***>

On Sun, Sep 1, 2024 at 1:22 PM Martin Holmer @.***> wrote:

The problems with the tax-microdata handling of pretax pension contributions were fixed in pull request #173 https://github.com/PSLmodels/tax-microdata-benchmarking/pull/173.

— Reply to this email directly, view it on GitHub https://github.com/PSLmodels/tax-microdata-benchmarking/issues/8#issuecomment-2323432450, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABR4JGHPBOPMYS7MJGON4RLZUNEPDAVCNFSM6AAAAABDDWPNBGVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDGMRTGQZTENBVGA . You are receiving this because you authored the thread.Message ID: @.***>