Post-retirement polynomial in Cagetti
@@ -83,7 +83,9 @@ def findPermGroFacs(age_min, age_max, age_ret, PolyCoefs, ReplRate):
def ParseIncomeSpec(age_min, age_max,
- age_ret = None, PolyCoefs = None, ReplRate = None,
+ age_ret = None,
+ PolyCoefs = None, ReplRate = None,
+ PolyRetir = None,
PermShkStd = None, TranShkStd = None,
**unused):
@@ -96,12 +98,31 @@ def ParseIncomeSpec(age_min, age_max,
# Growth factors
if PolyCoefs is not None:
+ if PolyRetir is None:
+
PermGroFac, P0 = findPermGroFacs(age_min, age_max, age_ret,
PolyCoefs, ReplRate)
+ else:
+
+ # Working period
+ PermGroWrk, P0 = findPermGroFacs(age_min, age_ret, None,
+ PolyCoefs, ReplRate)
+ PLast = findProfile(PermGroWrk, P0)[-1]
+
+ # Retirement period
+ PermGroRet, R0 = findPermGroFacs(age_ret+1, age_max, None,
+ PolyRetir, ReplRate)
+
+ # Input the replacement rate into the Work grow factors
+ PermGroWrk[-1] = R0/PLast
+ PermGroFac = PermGroWrk + PermGroRet
+
+
else:
pass
+
# Volatilities
if isinstance(PermShkStd, float) and isinstance(TranShkStd, float):
@@ -157,6 +178,7 @@ CGM_income = {
# - He uses volatilities from Carroll-Samwick (1997)
Cagetti_income = {
'NoHS' : {'PolyCoefs': [1.2430, 0.6941, 0.0361, -0.0259, 0.0018],
+ 'PolyRetir': [3.6872, -0.1034],
'age_ret': 65,
'ReplRate': 0.8344,
'PermShkStd': np.sqrt(0.0214), # Take 9-12 from CS
@@ -164,6 +186,7 @@ Cagetti_income = {
'BaseYear': 1992},
'HS' : {'PolyCoefs': [3.0551, -0.6925, 0.4339, -0.0703, 0.0035],
+ 'PolyRetir': [4.1631, -0.1378],
'age_ret': 65,
'ReplRate': 0.8033,
'PermShkStd': np.sqrt(0.0277), # Take HS diploma from CS
@@ -171,6 +194,7 @@ Cagetti_income = {
'BaseYear': 1992},
'College' : {'PolyCoefs': [2.1684, 0.5230, -0.0002, -0.0057, 0.0001],
+ 'PolyRetir': [3.7636, -0.0369],
'age_ret': 65,
'ReplRate': 0.7215,
'PermShkStd': np.sqrt(0.0146), # Take College degree from CS
