PSLmodels / Tax-Calculator

USA Federal Individual Income and Payroll Tax Microsimulation Model
https://taxcalc.pslmodels.org
Other
255 stars 154 forks source link

Treatment of short-term capital gains realizations #2180

Closed ernietedeschi closed 5 years ago

ernietedeschi commented 5 years ago

How does Tax-Calculator treat the effects of a change in ordinary income tax rates on the realization of short-term capital gains? If the treatment is static (that is, no assumed reaction), has there been thought given to adding a short-term capital gains elasticity parameter? I ask because I suspect with the new Congress we should expect more and more analyses of proposals to raise certain marginal income tax rates.

martinholmer commented 5 years ago

@evtedeschi3 said in Tax-Calculator issue #2180:

How does Tax-Calculator treat the effects of a change in ordinary income tax rates on the realization of short-term capital gains? If the treatment is static (that is, no assumed reaction), has there been thought given to adding a short-term capital gains elasticity parameter? I ask because I suspect with the new Congress we should expect more and more analyses of proposals to raise certain marginal income tax rates.

These are good questions. The answers are:

"Yes" the default treatment is static and "no" I've not thought of this kind of behavioral-response analysis.

However, I believe the current version of Tax-Calculator can be used to conduct this kind of analysis. This is true because the Tax-Calculator design philosophy focuses on providing general tools that enable a wide range of analysis, including analysis that the Tax-Calculator developers have never thought of. For example, on the issue of how to analyze post-simulation output, the tc --dump capability is an example of this philosophy. There is no way the Tax-Calculator developers can anticipate how users want to tabulate or visualize output data, so we offer a few tables and graphs, but support any type of tabulation/visualization by allowing all the output to be written to a CSV-formatted file.

In this case, I believe a sophisticated analysis of responses in short-term capital gains and losses can be conducted using the Tax-Calculator quantity_response function. There is a recipe illustrating its use in estimating earnings responses in the Cookbook and the documentation in the utils.py file (reproduced below) is extensive.

@evtedeschi3, please raise an issue if the quantity_response function is not flexible enough to conduct your short-term gain/loss response analysis.

Function Signature and Documentation for the quantity_response Function

def quantity_response(quantity,
                      price_elasticity,
                      aftertax_price1,
                      aftertax_price2,
                      income_elasticity,
                      aftertax_income1,
                      aftertax_income2):
    """
    Calculate dollar change in quantity using a log-log response equation,
    which assumes that the proportional change in the quantity is equal to
    the sum of two terms:
    (1) the proportional change in the quanitity's marginal aftertax price
        times an assumed price elasticity, and
    (2) the proportional change in aftertax income
        times an assumed income elasticity.

    Parameters
    ----------
    quantity: numpy array
        pre-response quantity whose response is being calculated

    price_elasticity: float
        coefficient of the percentage change in aftertax price of
        the quantity in the log-log response equation

    aftertax_price1: numpy array
        marginal aftertax price of the quanitity under baseline policy
          Note that this function forces prices to be in [0.01, inf] range,
          but the caller of this function may want to constrain negative
          or very small prices to be somewhat larger in order to avoid extreme
          proportional changes in price.
          Note this is NOT an array of marginal tax rates (MTR), but rather
            usually 1-MTR (or in the case of quantities, like charitable
            giving, whose MTR values are non-positive, 1+MTR).

    aftertax_price2: numpy array
        marginal aftertax price of the quantity under reform policy
          Note that this function forces prices to be in [0.01, inf] range,
          but the caller of this function may want to constrain negative
          or very small prices to be somewhat larger in order to avoid extreme
          proportional changes in price.
          Note this is NOT an array of marginal tax rates (MTR), but rather
            usually 1-MTR (or in the case of quantities, like charitable
            giving, whose MTR values are non-positive, 1+MTR).

    income_elasticity: float
        coefficient of the percentage change in aftertax income in the
        log-log response equation

    aftertax_income1: numpy array
        aftertax income under baseline policy
          Note that this function forces income to be in [1, inf] range,
          but the caller of this function may want to constrain negative
          or small incomes to be somewhat larger in order to avoid extreme
          proportional changes in aftertax income.

    aftertax_income2: numpy array
        aftertax income under reform policy
          Note that this function forces income to be in [1, inf] range,
          but the caller of this function may want to constrain negative
          or small incomes to be somewhat larger in order to avoid extreme
          proportional changes in aftertax income.

    Returns
    -------
    response: numpy array
        dollar change in quantity calculated from log-log response equation
    """
ernietedeschi commented 5 years ago

Thanks for the response. This looks like it will handle the job nicely. Will dig in.