Skip to content

Custom margin for mtr function #2580

@MaxGhenis

Description

@MaxGhenis

mtr() currently adds one cent to income to determine marginal tax rates, with an arg negative_finite_diff=False to make that negative one cent instead:

def mtr(self, variable_str='e00200p',
negative_finite_diff=False,
zero_out_calculated_vars=False,
calc_all_already_called=False,
wrt_full_compensation=True):

This is the most precise approach, but larger margins can have some advantages:

  1. Actual marginal labor supply decisions occur on margins larger than one cent (e.g. a raise or adding an hour per week; the range of likely margins could potentially be empirically determined)
  2. Tiny margins can miss discontinuities if not present in the microdata; for example, suppose a tax provision produced a cliff where going from $40,000 to $40,001 income raised tax liabilities by $1,000. If nobody in the microdata has income of exactly $40,000, this will show up as having no effect on labor supply, even though it would affect decisionmaking of people around the ~$39,000 to $41,000 income range deciding whether to cross that threshold.
  3. Smoother MTR curves can work better with general equilibrium models like OG-USA.

Some precedent:

  • @nikhilwoodruff has found that UK analyses sometimes consider the "participation tax rate" in addition to MTRs, which add a larger amount to earnings for people currently with zero earnings
  • @jpycroft mentioned that the EC has added a percentage to income (IIRC 0.5% or 3%) when calculating MTRs

I'd suggest adding an arg defaulting to 0.01, named something like finite_diff, margin, or marginal_amount. Over time this could also potentially replace the existing negative_finite_diff arg.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions