* README * ** Not Laffer Curves ** * The Tables and Figures that are not related to Laffer curves are generated by running the following Jupyter notebooks in Julia: * not_laffer_curves/HLT_Replication_Package.ipynb * not_laffer_curves/GGLS_Replication_Package.ipynb * not_laffer_curves/GGLS_Make_Tables.ipynb * not_laffer_curves/Robustness_Replication_Package.ipynb * not_laffer_curves/SocSec_Reform_Replication_Package.ipynb ** Laffer Curves** * The Laffer curves are generated in the laffer_curves folder * Approximate run time for all Laffer curves: 5 hours with 7 cores (see below) ** Laffer key ** * Laffer 5 -- reform without transfer (PLS = 0, reform = true, r in GE) * Laffer 5s -- Laffer 5 + SoE (PLS = 0, reform = true, r = original interest rate) * Laffer 6 -- reform with transfer (PLS != 0, reform = true, r in GE) * Laffer 6s -- Laffer 6 + SoE (PLS != 0, reform = true, r = original interest rate) * Laffer 7 -- baseline without transfer (PLS = 0, reform = false, r in GE) * Laffer 7s -- Laffer 7 + SoE (PLS = 0, reform = false, r = original interest rate) * Laffer 8 -- baseline with transfer (PLS != 0, reform = false, r in GE) * Laffer 8s -- Laffer 8 + SoE (PLS != 0, reform = false, r = original interest rate) ** Inputs ** * The code works by reading in the equilibrium objects (prices/transfers/fraction of agents using ``mixed" retirement strategies) provided in the files in the `inputs` folder ** Code ** * `Time_Averaging_Spline_Convex.jl` is the main piece of code required for solving the model * The file `solve_laffers.jl` solves for the equilibrium given the inputs and tax rate and saves a variety of outcomes in the `outputs` folder. It confirms that all prices and transfers are indeed equilbria by checking and reporting the residuals * Choose which Laffer curve you want (described above) to solve for by setting the variables in lines 8-9 * With addprocs(7), takes around 30-50 seconds per tax rate, Julia 1.9.3 on a Mac * After running the above, run `laffer_charts.jl` to recreate any chart in the paper that shows outcomes as a function of the tax rate (except for the ones in Section 8) * The charts in Section 8 are recreated in `inequality_welfare_charts.jl`. For these, you only need to solve for Laffer 8. These figures require the entire equilibrium life-cycle paths, which are saved in the `.jld` files in `outputs` after running `solve_laffers.jl` * All figures are written to the `figures` folder ** Appendix G ** * For the model in Appendix G, the code in 'solve_laffer_noHC.jl' must be run. This must be done in a new instance of Julia, as it uses a slightly different version of the HLT container (in Time_Averaging_Spline_Convex_HC.jl rather than Time_Averaging_Spline_Convex.jl). * The figures are then generated using the 'no_HC_figures.ipynb' notebook * Finally, for the equivalent versions of Figures 15 and 17, the following code must be run. Again starting from a new instance of Julia: ### One-Time Setup 1. Open `preprocess_data.jl` 2. Uncomment the STAGE 1 section and run: `include("preprocess_data.jl")` 3. Restart Julia 4. Open `preprocess_data.jl` again 5. Comment out STAGE 1, uncomment STAGE 2, and run: `include("preprocess_data.jl")` This creates processed data files that can be reused without type conflicts. ### Running the Analysis After preprocessing is complete, generate all comparison plots by running: include("inequality_welfare_charts_noHC.jl")