Pension Functions#

pensions.py modules

ogcore.pensions#

ogcore.pensions.DB_1dim_loop(w, e, n, S_ret, S, g_y, L_inc_avg_s, L_inc_avg, DB, avg_earn_num_years, alpha_db, yr_contr)[source]#

Calculate public pension from a defined benefits system.

Parameters:
  • w (array_like) – real wage rate

  • e (Numpy array) – effective labor units

  • n (Numpy array) – labor supply

  • S_ret (int) – retirement age

  • S (int) – number of periods in the model

  • g_y (array_like) – GDP growth rate

  • L_inc_avg_s (Numpy array) – average labor income

  • L_inc_avg (scalar) – average labor income

  • DB (Numpy array) – pension amount for each household

  • avg_earn_num_years (int) – number of years AIME is computed from

  • alpha_db (scalar) – replacement rate

  • yr_contr (scalar) – years of contribution

Returns:

pension amount for each household

Return type:

DB (Numpy array)

ogcore.pensions.DB_2dim_loop(w, e, n, S_ret, S, g_y, L_inc_avg_sj, L_inc_avg, DB, avg_earn_num_years, alpha_db, yr_contr)[source]#

Calculate public pension from a defined benefits system.

Parameters:
  • w (array_like) – real wage rate

  • e (Numpy array) – effective labor units

  • n (Numpy array) – labor supply

  • S_ret (int) – retirement age

  • S (int) – number of periods in the model

  • g_y (array_like) – GDP growth rate

  • L_inc_avg_sj (Numpy array) – average labor income

  • L_inc_avg (scalar) – average labor income

  • DB (Numpy array) – pension amount for each household

  • avg_earn_num_years (int) – number of years AIME is computed from

  • alpha_db (scalar) – replacement rate

  • yr_contr (scalar) – years of contribution

Returns:

pension amount for each household

Return type:

DB (Numpy array)

ogcore.pensions.DB_amount(w, e, n, j, p)[source]#

Calculate public pension from a defined benefits system.

\[pension{j,s,t} = \biggl[\frac{\sum_{s=R-ny}^{R-1}w_{t}e_{j,s,t} n_{j,s,t}}{ny}\biggr]\times Cy \times \alpha_{DB} \quad \forall s > R\]
Parameters:
  • w (array_like) – real wage rate

  • e (Numpy array) – effective labor units

  • n (Numpy array) – labor supply

  • j (int) – index of lifetime income group

  • p (OG-Core Specifications object) – model parameters

Returns:

pension amount for each household

Return type:

DB (Numpy array)

ogcore.pensions.NDC_1dim_loop(w, e, n, S_ret, S, g_y, tau_p, g_ndc, delta_ret, NDC_s, NDC)[source]#

Calculate public pension from a notional defined contribution

Parameters:
  • w (array_like) – real wage rate

  • e (Numpy array) – effective labor units

  • n (Numpy array) – labor supply

  • S_ret (int) – retirement age

  • S (int) – number of periods in the model

  • g_y (array_like) – GDP growth rate

  • tau_p (scalar) – tax rate

  • g_ndc (scalar) – growth rate of NDC pension

  • delta_ret (scalar) – conversion coefficient for the NDC pension amount

  • NDC_s (Numpy array) – average labor income

  • NDC (Numpy array) – pension amount for each household

Returns:

pension amount for each household

Return type:

NDC (Numpy array)

ogcore.pensions.NDC_2dim_loop(w, e, n, S_ret, S, g_y, tau_p, g_ndc, delta_ret, NDC_sj, NDC)[source]#

Calculate public pension from a notional defined contribution

Parameters:
  • w (array_like) – real wage rate

  • e (Numpy array) – effective labor units

  • n (Numpy array) – labor supply

  • S_ret (int) – retirement age

  • S (int) – number of periods in the model

  • g_y (array_like) – GDP growth rate

  • tau_p (scalar) – tax rate

  • g_ndc (scalar) – growth rate of NDC pension

  • delta_ret (scalar) – conversion coefficient for the NDC pension amount

  • NDC_sj (Numpy array) – average labor income

  • NDC (Numpy array) – pension amount for each household

Returns:

pension amount for each household

Return type:

NDC (Numpy array)

ogcore.pensions.NDC_amount(w, e, n, r, Y, j, p)[source]#

Calculate public pension from a notional defined contribution system.

\[pension{j,s,t} = \biggl[\sum_{s=E}^{R-1}\tau^{p}_{t}w_{t} e_{j,s,t}n_{j,s,t}(1 + g_{NDC,t})^{R-s-1}\biggr]\delta_{R, t} \quad \forall s > R\]
Parameters:
  • w (array_like) – real wage rate

  • e (Numpy array) – effective labor units

  • n (Numpy array) – labor supply

  • r (array_like) – interest rate

  • Y (array_like) – GDP

  • j (int) – index of lifetime income group

  • p (OG-Core Specifications object) – model parameters

Returns:

pension amount for each household

Return type:

NDC (Numpy array)

ogcore.pensions.PS_1dim_loop(w, e, n, S_ret, S, g_y, vpoint, factor, L_inc_avg_s, PS)[source]#

Calculate public pension from a points system.

Parameters:
  • w (array_like) – real wage rate

  • e (Numpy array) – effective labor units

  • n (Numpy array) – labor supply

  • S_ret (int) – retirement age

  • S (int) – number of periods in the model

  • g_y (array_like) – GDP growth rate

  • vpoint (scalar) – value of points

  • factor (scalar) – scaling factor converting model units to local currency

  • L_inc_avg_s (Numpy array) – average labor income

  • PS (Numpy array) – pension amount for each household

Returns:

pension amount for each household

Return type:

PS (Numpy array)

ogcore.pensions.PS_2dim_loop(w, e, n, S_ret, S, J, g_y, vpoint, factor, L_inc_avg_sj, PS)[source]#

Calculate public pension from a points system.

Parameters:
  • w (array_like) – real wage rate

  • e (Numpy array) – effective labor units

  • n (Numpy array) – labor supply

  • S_ret (int) – retirement age

  • S (int) – number of periods in the model

  • J (int) – number of lifetime income groups

  • g_y (array_like) – GDP growth rate

  • vpoint (scalar) – value of points

  • factor (scalar) – scaling factor converting model units to local currency

  • L_inc_avg_sj (Numpy array) – average labor income

  • PS (Numpy array) – pension amount for each household

Returns:

pension amount for each household

Return type:

PS (Numpy array)

ogcore.pensions.PS_amount(w, e, n, j, factor, p)[source]#

Calculate public pension from a points system.

\[pension{j,s,t} = \sum_{s=E}^{R-1}w_{t}e_{j,s,t}n_{j,s,t}\times v_{t} \quad \forall s > R\]
Parameters:
  • w (array_like) – real wage rate

  • e (Numpy array) – effective labor units

  • n (Numpy array) – labor supply

  • j (int) – index of lifetime income group

  • factor (scalar) – scaling factor converting model units to dollars

  • p (OG-Core Specifications object) – model parameters

Returns:

pension amount for each household

Return type:

PS (Numpy array)

ogcore.pensions.SS_amount(w, n, theta, t, j, shift, method, e, p)[source]#

Calculate public pension benefit amounts for each household under a US-style social security system.

Parameters:
  • w (array_like) – real wage rate

  • n (Numpy array) – labor supply

  • theta (Numpy array) – social security replacement rate value for lifetime income group j

  • t (int) – time period

  • j (int) – index of lifetime income group

  • shift (bool) – whether computing for periods 0–s or 1–(s+1), =True for 1–(s+1)

  • method (str) – adjusts calculation dimensions based on ‘SS’ or ‘TPI’

  • e (Numpy array) – effective labor units

  • p (OG-Core Specifications object) – model parameters

Returns:

pension amount for each household

Return type:

pension (Numpy array)

ogcore.pensions.delta_point(r, Y, g_n, g_y, p)[source]#

Compute growth rate used for contributions to points system pension

Parameters:
  • r (array_like) – interest rate

  • Y (array_like) – GDP

  • g_n (array_like) – population growth rate

  • g_y (array_like) – GDP growth rate

  • p (OG-Core Specifications object) – model parameters

Returns:

growth rate used for contributions to

points

Return type:

delta_point (Numpy array)

ogcore.pensions.delta_ret(r, Y, p)[source]#

Compute conversion coefficient for the NDC pension amount

\[\delta_{R} = (dir_{R} + ind_{R} - k)^{-1}\]
Parameters:
  • r (array_like) – interest rate

  • Y (array_like) – GDP

  • p (OG-Core Specifications object) – model parameters

Returns:

conversion coefficient for the NDC

pension amount

Return type:

delta_ret (Numpy array)

ogcore.pensions.delta_ret_loop(S, S_ret, surv_rates, g_dir_value, dir_delta_s)[source]#

Compute conversion coefficient for the NDC pension amount

Parameters:
  • S (int) – number of periods in the model

  • S_ret (int) – retirement age

  • surv_rates (Numpy array) – survival rates

  • g_dir_value (scalar) – growth rate of NDC pension

  • dir_delta_s (Numpy array) – conversion coefficient for the NDC pension amount

Returns:

conversion coefficient for the NDC pension

amount

Return type:

dir_delta (scalar)

ogcore.pensions.deriv_DB(w, e, per_rmn, p)[source]#

Change in DB pension benefits for another unit of labor supply

\[\begin{split}\frac{\partial \theta_{j,u,t+u-s}}{\partial n_{j,s,t}} = \begin{cases} 0 , & \text{if}\ s < R - Cy \\ w_{t}e_{j,s}\alpha_{DB}\times \frac{Cy}{ny}, & \text{if}\ R - Cy <= s < R \\ 0, & \text{if}\ s \geq R \\ \end{cases}\end{split}\]
Parameters:
  • w (array_like) – real wage rate

  • e (Numpy array) – effective labor units

  • per_rmn (int) – number of periods remaining in the model

  • p (OG-Core Specifications object) – model parameters

Returns:

change in DB pension benefits for another unit of labor

supply

Return type:

d_theta

ogcore.pensions.deriv_DB_loop(w, e, S, S_ret, per_rmn, avg_earn_num_years, alpha_db, yr_contr)[source]#

Change in DB pension benefits for another unit of labor supply

Parameters:
  • w (array_like) – real wage rate

  • e (Numpy array) – effective labor units

  • S (int) – number of periods in the model

  • S_ret (int) – retirement age

  • per_rmn (int) – number of periods remaining in the model

  • avg_earn_num_years (int) – number of years AIME is computed from

  • alpha_db (scalar) – replacement rate

  • yr_contr (scalar) – years of contribution

Returns:

change in DB pension benefits for

another unit of labor supply

Return type:

d_theta (Numpy array)

ogcore.pensions.deriv_NDC(r, w, e, Y, per_rmn, p)[source]#

Change in NDC pension benefits for another unit of labor supply

\[\begin{split}\frac{\partial \theta_{j,u,t+u-s}}{\partial n_{j,s,t}} = \begin{cases} \tau^{p}_{t}w_{t}e_{j,s}(1+g_{NDC,t})^{u - s}\delta_{R,t}, & \text{if}\ s<R-1 \\ 0, & \text{if}\ s \geq R \\ \end{cases}\end{split}\]
Parameters:
  • r (array_like) – interest rate

  • w (array_like) – real wage rate

  • e (Numpy array) – effective labor units

  • Y (array_like) – GDP

  • per_rmn (int) – number of periods remaining in the model

  • p (OG-Core Specifications object) – model parameters

Returns:

change in NDC pension benefits for

another unit of labor supply

Return type:

d_theta (Numpy array)

ogcore.pensions.deriv_NDC_loop(w, e, per_rmn, S, S_ret, tau_p, g_ndc_value, delta_ret_value, d_theta)[source]#

Change in NDC pension benefits for another unit of labor supply

Parameters:
  • w (array_like) – real wage rate

  • e (Numpy array) – effective labor units

  • per_rmn (int) – number of periods remaining in the model

  • S (int) – number of periods in the model

  • S_ret (int) – retirement age

  • tau_p (scalar) – tax rate

  • g_ndc_value (scalar) – growth rate of NDC pension

  • delta_ret_value (scalar) – conversion coefficient for the NDC pension amount

  • d_theta (Numpy array) – change in NDC pension benefits for another unit of labor supply

Returns:

change in NDC pension benefits for

another unit of labor supply

Return type:

d_theta (Numpy array)

ogcore.pensions.deriv_PS(w, e, per_rmn, factor, p)[source]#

Change in points system pension benefits for another unit of labor supply

\[\begin{split}\frac{\partial \theta_{j,u,t+u-s}}{\partial n_{j,s,t}} = \begin{cases} 0 , & \text{if}\ s < R \\ w_{t}e_{j,s}v_{t}, & \text{if}\ s \geq R \\ \end{cases}\end{split}\]
Parameters:
  • w (array_like) – real wage rate

  • e (Numpy array) – effective labor units

  • per_rmn (int) – number of periods remaining in the model

  • factor (scalar) – scaling factor converting model units to

  • p (OG-Core Specifications object) – model parameters

Returns:

change in points system pension benefits

for another unit of labor supply

Return type:

d_theta (Numpy array)

ogcore.pensions.deriv_PS_loop(w, e, S, S_ret, per_rmn, d_theta, vpoint, factor)[source]#

Change in points system pension benefits for another unit of labor supply

Parameters:
  • w (array_like) – real wage rate

  • e (Numpy array) – effective labor units

  • S (int) – number of periods in the model

  • S_ret (int) – retirement age

  • per_rmn (int) – number of periods remaining in the model

  • d_theta (Numpy array) – change in points system pension benefits for another unit of labor supply

  • vpoint (scalar) – value of points

  • factor (scalar) – scaling factor converting model units to local currency

Returns:

change in points system pension benefits

for another unit of labor supply

Return type:

d_theta (Numpy array)

ogcore.pensions.deriv_theta(r, w, e, Y, per_rmn, factor, p)[source]#

Change in pension benefits for another unit of labor supply for pension system selected

Parameters:
  • r (array_like) – interest rate

  • w (array_like) – real wage rate

  • e (Numpy array) – effective labor units

  • Y (array_like) – GDP

  • per_rmn (int) – number of periods remaining in the model

  • factor (scalar) – scaling factor converting model units to

Returns:

change in pension benefits for another

unit of labor supply

Return type:

d_theta (Numpy array)

ogcore.pensions.g_dir(r, Y, g_y, g_n, dir_growth_rate)[source]#

Compute growth rate used for contributions to NDC pension

Parameters:
  • r (array_like) – interest rate

  • Y (array_like) – GDP

  • g_y (array_like) – GDP growth rate

  • g_n (array_like) – population growth rate

  • dir_growth_rate (str) – growth rate used for contributions to NDC

Returns:

growth rate used for contributions to NDC

Return type:

g_dir (Numpy array)

ogcore.pensions.g_ndc(r, Y, p)[source]#

Compute growth rate used for contributions to NDC pension

Parameters:
  • r (array_like) – interest rate

  • Y (array_like) – GDP

  • p (OG-Core Specifications object) – model parameters

Returns:

growth rate used for contributions to NDC

Return type:

g_ndc (Numpy array)

ogcore.pensions.pension_amount(r, w, n, Y, theta, t, j, shift, method, e, factor, p)[source]#

Calculate public pension benefit amounts for each household.

Parameters:
  • w (array_like) – real wage rate

  • n (Numpy array) – labor supply

  • theta (Numpy array) – social security replacement rate value for lifetime income group j

  • t (int) – time period

  • j (int) – index of lifetime income group

  • shift (bool) – whether computing for periods 0–s or 1–(s+1), =True for 1–(s+1)

  • method (str) – adjusts calculation dimensions based on ‘SS’ or ‘TPI’

  • e (Numpy array) – effective labor units

  • p (OG-Core Specifications object) – model parameters

Returns:

pension amount for each household

Return type:

pension (Numpy array)

ogcore.pensions.replacement_rate_vals(nssmat, wss, factor_ss, j, p)[source]#

Calculates replacement rate values for the social security system.

\[\theta_{j,R,t+R} = \frac{PIA_{j,R,t+R} \times 12}{factor \times w_{t+R}}\]
Parameters:
  • nssmat (Numpy array) – initial guess at labor supply, size = SxJ

  • new_w (scalar) – steady state real wage rate

  • factor_ss (scalar) – scaling factor converting model units to dollars

  • j (int) – index of lifetime income group

  • p (OG-Core Specifications object) – model parameters

Returns:

social security replacement rate value for

lifetime income group j

Return type:

theta (Numpy array)