diff --git a/tax_microdata_benchmarking/examination/results3.md b/tax_microdata_benchmarking/examination/results3.md index fbdc19dd..fb583751 100644 --- a/tax_microdata_benchmarking/examination/results3.md +++ b/tax_microdata_benchmarking/examination/results3.md @@ -41,7 +41,7 @@ merge of PR 2764 on 2024-07-04). | ---: | ---: | :--- | | 2512.3 | 2849.4 | CBO | | 2371.4 | 2999.4 | Tax-Calculator + phase 3 dataset | -| 2247.8 | 2742.1 | Tax-Calculator + taxdata dataset | +| 2247.9 | 2742.2 | Tax-Calculator + taxdata dataset |
@@ -52,7 +52,7 @@ merge of PR 2764 on 2024-07-04). | 122.1 | 57.6 | JCT | | 108.6 | 55.7 | TSY | | 73.5 | 26.7 | Tax-Calculator + phase 3 dataset | -| 126.2 | 43.1 | Tax-Calculator + taxdata dataset | +| 126.3 | 43.1 | Tax-Calculator + taxdata dataset |
diff --git a/tax_microdata_benchmarking/examination/taxcalculator/alt_ctc_taxexp.py b/tax_microdata_benchmarking/examination/taxcalculator/alt_ctc_taxexp.py new file mode 100644 index 00000000..a9cef7af --- /dev/null +++ b/tax_microdata_benchmarking/examination/taxcalculator/alt_ctc_taxexp.py @@ -0,0 +1,83 @@ +""" +Tabulate alternative CTC tax-expenditure estimate. +""" + +import os +import sys +import argparse +import pandas as pd + + +def main(): + """ + High-level script logic. + """ + # parse command-line arguments + usage_str = "python alt_ctc_taxexp.py INPUT YEAR [--help]" + parser = argparse.ArgumentParser( + prog="", usage=usage_str, description=__doc__ + ) + parser.add_argument( + "INPUT", + help="Name of CSV-formatted file containing the input dataset", + nargs="?", + default="", + ) + parser.add_argument( + "YEAR", + help="Tax policy calendar year of tax-expenditure results", + type=int, + nargs="?", + default=0, + ) + args = parser.parse_args() + + # check command-line argument values + args_ok = True + if args.INPUT.endswith(".csv"): + sys.stderr.write(f"ERROR: {args.INPUT} ends with .csv\n") + args_ok = False + if args.YEAR not in [23, 26]: + sys.stderr.write(f"ERROR: YEAR {args.YEAR} is neither 23 nor 26\n") + args_ok = False + if not args_ok: + sys.stderr.write(f"USAGE: {usage_str}\n") + return 1 + + # construct baseline and tax-expenditure reform dump output file names + generic = f"{args.INPUT}-{args.YEAR}-#-xxx-#.csv" + bas_fname = generic.replace("xxx", "clp") + ref_fname = generic.replace("xxx", "ctc") + args_ok = True + if not os.path.isfile(bas_fname): + sys.stderr.write(f"ERROR: {bas_fname} file does not exist\n") + args_ok = False + if not os.path.isfile(ref_fname): + sys.stderr.write(f"ERROR: {ref_fname} file does not exist\n") + args_ok = False + if not args_ok: + sys.stderr.write(f"USAGE: {usage_str}\n") + return 1 + + # read base and reform .csv dump output files + bdf = pd.read_csv(bas_fname) + rdf = pd.read_csv(ref_fname) + + # standard tax-expenditure tabulation using iitax + btax = (bdf.s006 * bdf.iitax).sum() * 1e-9 + rtax = (rdf.s006 * rdf.iitax).sum() * 1e-9 + std_te = rtax - btax + print(f"STD tax-expenditure($B)= {std_te:.3f}") + + # alternative tax-expenditure tabulation using ctc_total + bctc = (bdf.s006 * bdf.ctc_total).sum() * 1e-9 + rctc = (rdf.s006 * rdf.ctc_total).sum() * 1e-9 + alt_te = bctc - rctc + print(f"ALT tax-expenditure($B)= {alt_te:.3f}") + + # return no-error exit code + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/tax_microdata_benchmarking/examination/taxcalculator/clp.dvars b/tax_microdata_benchmarking/examination/taxcalculator/clp.dvars index 55c85ad3..1e160bbd 100644 --- a/tax_microdata_benchmarking/examination/taxcalculator/clp.dvars +++ b/tax_microdata_benchmarking/examination/taxcalculator/clp.dvars @@ -2,3 +2,6 @@ dwks43 e00650 p23250 taxbc +ctc_total +iitax +s006 diff --git a/tax_microdata_benchmarking/examination/taxcalculator/ctc.dvars b/tax_microdata_benchmarking/examination/taxcalculator/ctc.dvars index cdbaa967..1a396d70 100644 --- a/tax_microdata_benchmarking/examination/taxcalculator/ctc.dvars +++ b/tax_microdata_benchmarking/examination/taxcalculator/ctc.dvars @@ -1,5 +1,3 @@ -c07220 -c11070 -codtc_limited -odc -ctc_new +ctc_total +iitax +s006 diff --git a/tax_microdata_benchmarking/examination/taxcalculator/puf-23.res-expect b/tax_microdata_benchmarking/examination/taxcalculator/puf-23.res-expect index 9800c444..b2c24218 100644 --- a/tax_microdata_benchmarking/examination/taxcalculator/puf-23.res-expect +++ b/tax_microdata_benchmarking/examination/taxcalculator/puf-23.res-expect @@ -1,6 +1,6 @@ Weighted Tax Reform Totals by Baseline Expanded-Income Decile Returns ExpInc IncTax PayTax LSTax AllTax - A 208.42 18638.0 2247.8 1489.3 0.0 3737.1 + A 208.42 18638.0 2247.9 1489.3 0.0 3737.2 ==> puf-23-#-cgqd-#-tab.text <== A 208.42 18638.0 217.7 0.0 0.0 217.7 @@ -9,7 +9,7 @@ Weighted Tax Reform Totals by Baseline Expanded-Income Decile A 208.42 18638.0 0.0 0.0 0.0 0.0 ==> puf-23-#-ctc-#-tab.text <== - A 208.42 18638.0 126.2 0.0 0.0 126.2 + A 208.42 18638.0 126.3 0.0 0.0 126.3 ==> puf-23-#-eitc-#-tab.text <== A 208.42 18638.0 73.5 0.0 0.0 73.5 diff --git a/tax_microdata_benchmarking/examination/taxcalculator/puf-26.res-expect b/tax_microdata_benchmarking/examination/taxcalculator/puf-26.res-expect index 6fc3c0aa..a8afd37c 100644 --- a/tax_microdata_benchmarking/examination/taxcalculator/puf-26.res-expect +++ b/tax_microdata_benchmarking/examination/taxcalculator/puf-26.res-expect @@ -1,6 +1,6 @@ Weighted Tax Reform Totals by Baseline Expanded-Income Decile Returns ExpInc IncTax PayTax LSTax AllTax - A 216.75 21231.4 2742.1 1711.0 0.0 4453.1 + A 216.75 21231.4 2742.2 1711.0 0.0 4453.1 ==> puf-26-#-cgqd-#-tab.text <== A 216.75 21231.4 223.6 0.0 0.0 223.6 diff --git a/tax_microdata_benchmarking/examination/taxcalculator/runs.sh b/tax_microdata_benchmarking/examination/taxcalculator/runs.sh index 714ea5dc..c986ac67 100755 --- a/tax_microdata_benchmarking/examination/taxcalculator/runs.sh +++ b/tax_microdata_benchmarking/examination/taxcalculator/runs.sh @@ -63,6 +63,9 @@ echo CLP echo CTC ./execute.sh $1.csv 20$2 ctc +if [[ -v QUIT ]]; then + exit 1 +fi echo EITC ./execute.sh $1.csv 20$2 eitc