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

EITC parametrization to capture Romney's Family Security Act #2546

Open
MaxGhenis opened this issue Feb 8, 2021 · 4 comments
Open

EITC parametrization to capture Romney's Family Security Act #2546

MaxGhenis opened this issue Feb 8, 2021 · 4 comments

Comments

@MaxGhenis
Copy link
Contributor

Under Romney's Family Security Act, "The Earned Income Tax Credit (EITC) is replaced by a simplified earnings credit with a maximum value of $1,000 for single households and $2,000 for married households filing jointly, independent of the number of child dependents. The EITC for adult dependents is preserved."

This requires additional parameterization to reform the core EITC while preserving it for adult dependents.

cc @Thirdhuman

@jdebacker
Copy link
Member

Some more info on this:

  • Romney's office writeup on the FSA here
  • EITC trapezoids under the FSA:

Screen Shot 2021-02-16 at 4 07 21 PM

* Compare to EITC trapezoids in 2017:

Screen Shot 2021-02-16 at 4 07 21 PM

@JackLandry
Copy link

Hi @MaxGhenis, @jdebacker and @Thirdhuman,

I'm having the same issue where I'd like to test the effect of different benefit amounts for people filing jointly vs. single filiers, but the tax calculator only allows for a different phase out threshold for married filiers. Any timeline on getting this implemented? Thanks!

@jdebacker
Copy link
Member

@hdoupe I'm trying to think about how to implement this without breaking backwards compatibility of the EITC parameters. Do you have thoughts on whether it's possible add a dimension to the EITC parameters (martial status) that could allow one to enter the same list as one would enter currently if they wanted the parameters to be constant over this new dimension, but vary of an existing dimension (e.g., number of kids)?

@hdoupe
Copy link
Collaborator

hdoupe commented Jul 25, 2021

@jdebacker, a couple quick thoughts on this:

  • Using the ParamTools adjustment format is backwards compatible. Here's a notebook showing how this would work: https://github.com/hdoupe/Tax-Calculator/blob/eitc-mars/TC%20with%20EITC%20MARS%20param.ipynb
  • Using the Tax-Calculator format would not be backwards compatible, unless we do some work to this method:
    yearval = np.array(yearval)
    if (
    getattr(val, "shape", None) and
    yearval.shape != val[0].shape
    ):
    exp_dims = val[0].shape
    if exp_dims == tuple():
    msg = (
    f"{param} is not an array "
    f"parameter."
    )
    elif yearval.shape:
    msg = (
    f"{param} has {yearval.shape[0]} elements "
    f"but should only have {exp_dims[0]} "
    f"elements."
    )
    else:
    msg = (
    f"{param} is an array parameter with "
    f"{exp_dims[0]} elements."
    )
    raise pt.ValidationError(
    {"errors": {"schema": msg}},
    None
    )
    value_objects = self.from_array(
    param,
    yearval.reshape((1, *yearval.shape)),
    year=year
    )
    new_params[param] += value_objects
  • Another option is to create a new set of EITC parameters like EITC_mars_* that are kind of like aliases to the EITC_* parameters, but would support the MARS dimension. This seems like the least elegant solution but is worth mentioning.

I don't have a strong feeling for how this should work yet. How do you think the user experience should look if we are able to support this in a backwards compatible way? Like how would the Tax-Calculator style JSON reform look?

Code for updating the `EITC_c` parameter:
import json

import taxcalc as tc


with open("taxcalc/policy_current_law.json", "r") as f:
    data = json.load(f)


pol = tc.Policy()
pol.clear_state()

mars_vals = pol.label_grid["MARS"]
new_vals = []
for val in pol.sel["EITC_c"].missing("_auto"):
    for mars_val in mars_vals:
        new_vals.append({
            "year": val["year"],
            "EIC": val["EIC"],
            "MARS": mars_val,
            "value": val["value"]
        })

data["EITC_c"]["value"] = new_vals


with open("taxcalc/policy_current_law.json", "w") as f:
    json.dump(data, f, indent=4)

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

No branches or pull requests

4 participants