Validation against TAXSIM

PolicyEngine compares the federal and state income tax that PolicyEngine US and NBER’s TAXSIM calculate for the same Enhanced CPS households. Each household contributes one record: the tax unit that contains the household head. The comparison is maintained in policyengine-taxsim. Its dashboard has state-by-state results, side-by-side outputs for a sample of households, and the complete comparison data for each year.

Results

The table below is loaded from the results the dashboard publishes, so it always matches the dashboard.

Loading the latest results from the TAXSIM dashboard…

How agreement is measured

Each test compares PolicyEngine with TAXSIM for one record at a time, separately for federal income tax and state income tax. A cell in the table is the share of records that pass.

  • Within 1% of income (the dashboard’s default view): the two amounts differ by less than 1% of the record’s gross income. Gross income here is wages, self-employment income, interest, dividends, other property income, non-property income, pensions and unemployment compensation, plus short- and long-term capital gains when positive and 85% of Social Security benefits. Records with zero or negative gross income use the $15 test instead.

  • Within 1%, net of rebates (state only): the same test applied to state income tax plus one-time state rebates on both sides. It is meant to remove a timing difference: TAXSIM counts a rebate in the year it is paid and PolicyEngine in the tax year it relates to. It is not exact, because TAXSIM also reports some rebates that its state tax does not reflect (Virginia’s in 2022 and 2025, for example), so this column can be lower than the plain 1% column.

  • Within $15: the two amounts differ by $15 or less.

These rules are implemented in match_flags in scripts/refresh_dashboard.py. Each year’s published summary records the commit and script hash that produced it.