Parameter Plotting Functions#

parameter_plots.py modules

ogcore.parameter_plots#

ogcore.parameter_plots.gen_3Dscatters_hist(df, s, t, output_dir)[source]#

Create 3-D scatterplots and corresponding 3D histogram of ETR, MTRx, and MTRy as functions of labor income and capital income with truncated data in the income dimension

Parameters:
  • df (Pandas DataFrame) – 11 variables with N observations of tax rates

  • s (int) – age of individual, >= 21

  • t (int) – year of analysis, >= 2016

  • path (str) – output directory for saving plot files

Returns:

None

ogcore.parameter_plots.plot_2D_taxfunc(year, start_year, tax_param_list, age=None, E=21, tax_func_type=['DEP'], rate_type='etr', over_labinc=True, other_inc_val=1000, max_inc_amt=1000000, data_list=None, labels=['1st Functions'], title=None, path=None)[source]#

This function plots OG-Core tax functions in two dimensions. The tax rates are plotted over capital or labor income, as entered by the user.

Parameters:
  • year (int) – year of policy tax functions represent

  • start_year (int) – first year tax functions estimated for in tax_param_list elements

  • tax_param_list (list) – list of arrays containing tax function parameters

  • age (int) – age for tax functions to plot, use None if tax function parameters were not age specific

  • tax_func_type (list) – list of strings in [“DEP”, “DEP_totalinc”, “GS”, “linear”] and specifies functional form of tax functions in tax_param_list

  • rate_type (str) – string that is in [“etr”, “mtrx”, “mtry”] and determines the type of tax rate that is plotted

  • over_labinc (bool) – indicates that x-axis of the plot is over labor income, if False then plot is over capital income

  • other_inc_val (scalar) – dollar value at which to hold constant the amount of income that is not represented on the x-axis

  • max_inc_amt (scalar) – largest income amount to represent on the x-axis of the plot

  • data_list (list) – list of DataFrames with data to scatter plot with tax functions, needs to be of format output from ogcore.get_micro_data.get_data

  • labels (list) – list of labels for tax function parameters

  • title (str) – title for the plot

  • path (str) – path to which to save plot, if None then figure returned

Returns:

plot of tax functions

Return type:

fig (Matplotlib plot object)

ogcore.parameter_plots.plot_ability_profiles(p, p2=None, t=None, log_scale=False, include_title=False, path=None)[source]#

Create a plot of earnings ability profiles.

Parameters:
  • p (OG-Core Specifications class) – parameters object

  • t (int) – model period for year, if None, then plot ability matrix for SS

  • log_scale (bool) – whether to plot in log points

  • include_title (bool) – whether to include a title in the plot

  • path (string) – path to save figure to

Returns:

plot of earnings ability profiles

Return type:

fig (Matplotlib plot object)

ogcore.parameter_plots.plot_chi_n(p_list, labels=[''], years_to_plot=[2025], include_title=False, path=None)[source]#

Create a plot of showing the values of the chi_n parameters.

Parameters:
  • p_list (list) – parameters objects

  • labels (list) – labels for legend

  • years_to_plot (list) – list of years to plot

  • include_title (boolean) – whether to include a title in the plot

  • path (string) – path to save figure to

Returns:

plot of chi_n parameters

Return type:

fig (Matplotlib plot object)

ogcore.parameter_plots.plot_elliptical_u(p, plot_MU=True, include_title=False, path=None)[source]#

Create a plot of showing the fit of the elliptical utility function.

Parameters:
  • p (OG-Core Specifications class) – parameters object

  • plot_MU (boolean) – whether plot marginal utility or utility in levels

  • path (string) – path to save figure to

Returns:

plot of elliptical vs CFE utility

Return type:

fig (Matplotlib plot object)

ogcore.parameter_plots.plot_fert_rates(fert_rates_list, labels=[''], include_title=False, source='United Nations, World Population Prospects', path=None, by_J=False, omega_list=None)[source]#

Plot fertility rates from the data

Parameters:
  • fert_rates_list (list) – list of Numpy arrays of fertility rates by age (S,) or by age and income group (S x J), one array per series (e.g., per year)

  • labels (list) – list of labels for the legend

  • include_title (bool) – whether to include a title in the plot

  • source (str) – data source for fertility rates

  • path (str) – path to save figure to, if None then figure is returned

  • by_J (bool) – if the fertility rates have an income-group dimension, plot a separate line for each income group j (labeled by j). If False, the rates are averaged across income groups so that one line is plotted per series.

  • omega_list (list) – list of Numpy arrays of the population distribution, each with the same shape as the corresponding element of fert_rates_list, used to weight the average across income groups when by_J is False. If None, a simple mean across income groups is used.

Returns:

plot of fertility rates

Return type:

fig (Matplotlib plot object)

ogcore.parameter_plots.plot_g_n(p_list, label_list=[''], include_title=False, path=None)[source]#

Create a plot of population growth rates from OG-Core parameterization.

Parameters:
  • p_list (list) – list of OG-Core Specifications objects

  • label_list (list) – list of labels for the legend

  • include_title (bool) – whether to include a title in the plot

  • path (string) – path to save figure to

Returns:

plot of immigration rates

Return type:

fig (Matplotlib plot object)

ogcore.parameter_plots.plot_imm_fixed(age_per_EpS, imm_rates_orig, imm_rates_adj, E, S, path=None, by_J=False, omega=None)[source]#

Plot the immigration rates implied by the data on population, mortality, and fertility versus the adjusted immigration rates needed to achieve a stationary distribution of the population in a reasonable number of model periods.

Parameters:
  • age_per_EpS (array_like) – list of ages over which to plot population distribution

  • imm_rates_orig (Numpy array) – immigration rates by age (E+S,) or by age and income group (E+S x J)

  • imm_rates_adj (Numpy array) – adjusted immigration rates by age (E+S,) or by age and income group (E+S x J)

  • E (int) – age at which household becomes economically active

  • S (int) – number of years which household is economically active

  • path (str) – path to save figure to, if None then figure is returned

  • by_J (bool) – if the immigration rates have an income-group dimension, plot a separate line for each income group j (labeled by j). If False, the rates are averaged across income groups so that one line is plotted for each set of rates.

  • omega (NumPy array) – population distribution with the same shape as the immigration rates, used to weight the average across income groups when by_J is False. If None, a simple mean across income groups is used.

Returns:

plot of immigration rates found

from residuals and the adjusted rates to hit SS sooner

Return type:

fig (Matplotlib plot object)

ogcore.parameter_plots.plot_imm_rates(imm_rates, start_year=2025, years_to_plot=[2025], include_title=False, source='United Nations, World Population Prospects', path=None, by_J=False, omega=None)[source]#

Plot immigration rates from the data

Parameters:
  • imm_rates (NumPy array) – immigration rates for each year and age (T x S) or for each year, age, and income group (T x S x J)

  • start_year (int) – first year of data

  • years_to_plot (list) – list of years to plot

  • include_title (bool) – whether to include a title in the plot

  • source (str) – data source for immigration rates

  • path (str) – path to save figure to, if None then figure is returned

  • by_J (bool) – if imm_rates has an income-group dimension, plot a separate line for each income group j (labeled by j). If False, the rates are averaged across income groups so that one line is plotted per year.

  • omega (NumPy array) – population distribution with the same shape as imm_rates, used to weight the average across income groups when by_J is False. If None, a simple mean across income groups is used.

Returns:

plot of immigration rates

Return type:

fig (Matplotlib plot object)

ogcore.parameter_plots.plot_income_data(ages, abil_midp, abil_pcts, emat, t=None, path=None, filesuffix='')[source]#

This function graphs ability matrix in 3D, 2D, log, and nolog

Parameters:
  • ages (Numpy array)

  • abil_midp (Numpy array) – midpoints of income percentile bins in each ability group

  • abil_pcts (Numpy array) – percent of population in each lifetime income group, length J

  • emat (Numpy array) – effective labor units by age and lifetime income group, size TxSxJ

  • t (int) – model period for year, if None, then plot SS values

  • filesuffix (str) – suffix to be added to plot files

Returns:

None

ogcore.parameter_plots.plot_mort_rates(p_list, labels=[''], years=[2025], survival_rates=False, include_title=False, path=None, by_J=False)[source]#

Create a plot of mortality rates from OG-Core parameterization.

Parameters:
  • p_list (list) – list of parameters objects

  • labels (list) – list of labels for the legend

  • years (list) – list of years to plot

  • survival_rates (bool) – whether to plot survival rates instead of mortality rates

  • include_title (bool) – whether to include a title in the plot

  • path (string) – path to save figure to

  • by_J (bool) – if mortality rates vary by income group, plot a separate line for each income group j (labeled by j). If False, the rates are averaged across income groups using the population weights in omega so that one line is plotted per year and parameters object.

Returns:

plot of mortality rates

Return type:

fig (Matplotlib plot object)

ogcore.parameter_plots.plot_mort_rates_data(mort_rates, start_year=2025, years_to_plot=[2025], source='United Nations, World Population Prospects', path=None, by_J=False, omega=None)[source]#

Plots mortality rates from the data.

Parameters:
  • mort_rates (array_like) – mortality rates for each year and age (T x S) or for each year, age, and income group (T x S x J)

  • start_year (int) – first year of data

  • years_to_plot (list) – list of years to plot

  • source (str) – data source for mortality rates

  • path (str) – path to save figure to, if None then figure is returned

  • by_J (bool) – if mort_rates has an income-group dimension, plot a separate line for each income group j (labeled by j). If False, the rates are averaged across income groups so that one line is plotted per year.

  • omega (NumPy array) – population distribution with the same shape as mort_rates, used to weight the average across income groups when by_J is False. If None, a simple mean across income groups is used.

Returns:

plot of mortality rates

Return type:

fig (Matplotlib plot object)

ogcore.parameter_plots.plot_omega_fixed(age_per_EpS, omega_SS_orig, omega_SSfx, E, S, path=None, by_J=False)[source]#

Plot the steady-state population distribution implied by the data on fertility and mortality rates versus the the steady-state population distribution after adjusting immigration rates so that the stationary distribution is achieved a reasonable number of model periods.

Parameters:
  • age_per_EpS (array_like) – list of ages over which to plot population distribution

  • omega_SS_orig (Numpy array) – population distribution in SS without adjustment to immigration rates, by age (E+S,) or by age and income group (E+S x J)

  • omega_SSfx (Numpy array) – population distribution in SS after adjustment to immigration rates, by age (E+S,) or by age and income group (E+S x J)

  • E (int) – age at which household becomes economically active

  • S (int) – number of years which household is economically active

  • path (str) – path to save figure to, if None then figure is returned

  • by_J (bool) – if the distributions have an income-group dimension, plot a separate line for each income group j (labeled by j). If False, the distributions are summed across income groups so that one line is plotted for each distribution.

Returns:

plot of SS population distribution

before and after adjustment to immigration rates

Return type:

fig (Matplotlib plot object)

ogcore.parameter_plots.plot_pop_growth(p, start_year=2025, num_years_to_plot=150, include_title=False, path=None)[source]#

Create a plot of population growth rates by year.

Parameters:
  • p (OG-Core Specifications class) – parameters object

  • start_year (integer) – year to begin plotting

  • num_years_to_plot (integer) – number of years to plot

  • include_title (bool) – whether to include a title in the plot

  • path (string) – path to save figure to

Returns:

plot of immigration rates

Return type:

fig (Matplotlib plot object)

ogcore.parameter_plots.plot_population(p, years_to_plot=['SS'], include_title=False, path=None, by_J=False)[source]#

Plot the distribution of the population over age for various years.

Parameters:
  • p (OG-Core Specifications class) – parameters object

  • years_to_plot (list) – list of years to plot, ‘SS’ will denote the steady-state period

  • include_title (bool) – whether to include a title in the plot

  • path (string) – path to save figure to

  • by_J (bool) – if the population distribution has an income-group dimension, plot a separate line for each income group j (labeled by j). If False, the distribution is summed across income groups so that one line showing the overall population distribution by age is plotted per year.

Returns:

plot of population distribution

Return type:

fig (Matplotlib plot object)

ogcore.parameter_plots.plot_population_path(age_per_EpS, omega_path_lev, omega_SSfx, start_year, year1, year2, S, path=None, by_J=False)[source]#

Plot the distribution of the population over age for various years.

Parameters:
  • age_per_EpS (array_like) – list of ages over which to plot population distribution

  • omega_path_lev (Numpy array) – number of households by age (T+S x E+S) or by age and income group (T+S x E+S x J) over the transition path

  • omega_SSfx (Numpy array) – population distribution by age (E+S,) or by age and income group (E+S x J) in the SS

  • start_year (int) – first year of data (so can get index of year1 and year2)

  • year1 (int) – first year of data to plot

  • year2 (int) – second year of data to plot

  • S (int) – number of years which household is economically active

  • path (str) – path to save figure to, if None then figure is returned

  • by_J (bool) – if the population distributions have an income-group dimension, plot a separate line for each income group j (labeled by j). If False, the distributions are summed across income groups so that one line showing the overall population distribution by age is plotted for each point in time.

Returns:

plot of population distribution

at points along the time path

Return type:

fig (Matplotlib plot object)

ogcore.parameter_plots.txfunc_graph(s, t, df, X, Y, txrates, rate_type, tax_func_type, params_to_plot, output_dir)[source]#

This function creates a 3D plot of the fitted tax function against the data.

Parameters:
  • s (int) – age of individual, >= 21

  • t (int) – year of analysis, >= 2016

  • df (Pandas DataFrame) – 11 variables with N observations of tax rates

  • X (Pandas DataSeries) – labor income

  • Y (Pandas DataSeries) – capital income

  • Y – tax rates from the data

  • rate_type (str) – type of tax rate: mtrx, mtry, etr

  • tax_func_type (str) – functional form of tax functions

  • params_to_plot (array_like or function) – tax function parameters or nonparametric function

  • path (str) – output directory for saving plot files

Returns:

None

ogcore.parameter_plots.txfunc_sse_plot(age_vec, sse_mat, start_year, varstr, output_dir, round)[source]#

Plot sum of squared errors of tax functions over age for each year of budget window.

Parameters:
  • age_vec (numpy array) – vector of ages, length S

  • sse_mat (Numpy array) – SSE for each estimated tax function, size is BW x S

  • start_year (int) – first year of budget window

  • varstr (str) – name of tax function being evaluated

  • path (str) – path to save graph to

  • round (int) – which round of sweeping for outliers (0, 1, or 2)

Returns:

None