Attribute VB_Name = "a07_Retirement_Decision" Option Explicit '************************************************************************************* '*** This module contains subroutines that simulates the retirement decision. '*** There are two versions of all subroutines - standard version and BabyBoom version. '*** A conditional compilation is performed that uses the BabyBoom version if the '*** conditional compilation constant BBPens (see Projekt->Properties->Make) equals 1 '*** and otherwise the standard version. TP050222 '************************************************************************************* #If BBPens = 1 Then '******* a07_Retirement_Decision - Calculates endogenous retirement age ******* '******* THIS MODULE IMPLEMENT THE BABY-BOOM VERSION OF THE PENSION DECISION ******** ' Endogenous pension decision is relevant for individuals in sector 2,3, and 4 ' in age groups 60-65. (changed by ME 050520) ' For blue collars (sector=1) we do not allow for early retirement. ' For individuals aged 65 (or older) we force retirement. ' (ME 041008) Sub Pension_Decision(ByVal indnr As Long) Dim status As Byte Dim y As Double status = 0 ' There are a small number of individuals marked as working (status=8) ' who has no average income over the last 5 years. These individuals do not ' fit the retirement model as this is based on the ratio between SSW ' and average income. Here we construct a "fix-up" such that these individuals ' do not retire before age 65. If f_avg_income(indnr) = 0 Then y = 0 ' ElseIf i_sector(indnr) = 1 And i_age(indnr) < 65 Then 'Blue collar workers are not allowed for early retirement ' y = 0 ' ElseIf i_sector(indnr) = 1 And i_age(indnr) > 64 Then 'Blue collar workers are forced to retire at age 65 ' y = 1 ElseIf i_age(indnr) > 64 Then ' Force retirement at age 65 y = 1 Else y = Retirement_Prob_BB(indnr) End If '-- Only assign a value to i_status if the individual retires! Dim slump As Double slump = Rnd() If slump < y Then status = 2 i_ap_pensmonth(indnr) = (i_age(indnr) - 65) * 12 End If If i_age(indnr) >= 65 And status <> 2 Then status = 8 End If i_status(indnr) = status End Sub
' Babyboom retirement probabilities Public Function Retirement_Prob_BB(ByVal indnr As Long) As Single ' Estimates are based on LINDA 1992--2000 ' We use an extended sample where sector affiliation is imputed for missing values ' Blue collars are allowed to retire eraly, but not to receive eraly retirement program offers. ' If a blue collar retires early, they must do so using the public pension system only. ' Estimates are separate for females (F) and males (M). ' // Table created at :24-11-2005 13:43:18 by Table-class (build:050822) (c) Matias Eklf 2005 ' TABLE FEMALES MALES ' -----------------+---------------+---------------+ ' XConstant | -16.815*** | -6.390*** | ' | (1.073)| (0.939)| ' | [-0.226]| [-0.157]| ' -----------------+---------------+---------------+ ' XNPV_ERP_Q | 0.785*** | 0.087 | ' | (0.078)| (0.064)| ' | [0.011]| [0.002]| ' -----------------+---------------+---------------+ ' XACC_ERP_Q | -2.834*** | -3.258*** | ' | (0.383)| (0.413)| ' | [-0.038]| [-0.080]| ' -----------------+---------------+---------------+ ' Xmid_educ | 0.966*** | 0.410*** | ' | (0.133)| (0.102)| ' | [0.013]| [0.010]| ' -----------------+---------------+---------------+ ' Xhigh_edu | 0.917*** | 0.934*** | ' | (0.153)| (0.159)| ' | [0.012]| [0.023]| ' -----------------+---------------+---------------+ ' Xspouse | -0.625*** | -0.222** | ' | (0.135)| (0.094)| ' | [-0.008]| [-0.005]| ' -----------------+---------------+---------------+ ' Xspouse_retired | 0.475*** | 0.254*** | ' | (0.112)| (0.088)| ' | [0.006]| [0.006]| ' -----------------+---------------+---------------+ ' Xborn_abr | -0.213 | -0.364** | ' | (0.288)| (0.179)| ' | [-0.003]| [-0.009]| ' -----------------+---------------+---------------+ ' X1(year=1994) | 0.757*** | 0.289** | ' | (0.154)| (0.121)| ' | [0.010]| [0.007]| ' -----------------+---------------+---------------+ ' X1(year=1995) | 0.949*** | 0.098 | ' | (0.170)| (0.130)| ' | [0.013]| [0.002]| ' -----------------+---------------+---------------+ ' X1(year=1996) | 1.118*** | 0.175 | ' | (0.173)| (0.129)| ' | [0.015]| [0.004]| ' -----------------+---------------+---------------+ ' X1(year=1997) | 1.394*** | 0.420*** | ' | (0.181)| (0.140)| ' | [0.019]| [0.010]| ' -----------------+---------------+---------------+ ' X1(year=1998) | 1.037*** | 0.215 | ' | (0.179)| (0.138)| ' | [0.014]| [0.005]| ' -----------------+---------------+---------------+ ' X1(year=1999) | 1.299*** | 0.383*** | ' | (0.175)| (0.147)| ' | [0.017]| [0.009]| ' -----------------+---------------+---------------+ ' X1(age=61) | 1.931*** | 1.207*** | ' | (0.166)| (0.163)| ' | [0.026]| [0.030]| ' -----------------+---------------+---------------+ ' X1(age=62) | 2.660*** | 1.332*** | ' | (0.221)| (0.214)| ' | [0.036]| [0.033]| ' -----------------+---------------+---------------+ ' X1(age=63) | 3.259*** | 1.290*** | ' | (0.271)| (0.243)| ' | [0.044]| [0.032]| ' -----------------+---------------+---------------+ ' X1(age=64) | 5.228*** | 1.796*** | ' | (0.315)| (0.277)| ' | [0.070]| [0.044]| ' -----------------+---------------+---------------+ ' WConstant | -1.853*** | -2.020*** | ' | (0.138)| (0.113)| ' | [0.000]| [0.000]| ' -----------------+---------------+---------------+ ' Wqualw | 0.023 | 0.019** | ' | (0.015)| (0.008)| ' | [0.000]| [0.000]| ' -----------------+---------------+---------------+ ' Wmid_educ | 0.228*** | 0.127** | ' | (0.063)| (0.064)| ' | [0.000]| [0.000]| ' -----------------+---------------+---------------+ ' Whigh_edu | 0.296*** | 0.161** | ' | (0.076)| (0.073)| ' | [0.000]| [0.000]| ' -----------------+---------------+---------------+ ' Wborn_abr | -0.044 | -0.136 | ' | (0.140)| (0.138)| ' | [0.000]| [0.000]| ' -----------------+---------------+---------------+ ' W1(isectnum=2) | 0.144* | 0.033 | ' | (0.082)| (0.062)| ' | [0.000]| [0.000]| ' -----------------+---------------+---------------+ ' W1(isectnum=3) | 0.033 | 0.185** | ' | (0.071)| (0.077)| ' | [0.000]| [0.000]| ' -----------------+---------------+---------------+ ' W1(isectnum=4) | -9000000000.000*** | -9000000000.000*** | ' | (0.000)| (0.000)| ' | [0.000]| [0.000]| ' -----------------+---------------+---------------+ ' W1(year=1994) | -0.562*** | -0.438*** | ' | (0.099)| (0.099)| ' | [0.000]| [0.000]| ' -----------------+---------------+---------------+ ' W1(year=1995) | -0.520*** | -0.302*** | ' | (0.095)| (0.097)| ' | [0.000]| [0.000]| ' -----------------+---------------+---------------+ ' W1(year=1996) | -0.637*** | -0.254*** | ' | (0.097)| (0.092)| ' | [0.000]| [0.000]| ' -----------------+---------------+---------------+ ' W1(year=1997) | -0.248*** | -0.233*** | ' | (0.084)| (0.089)| ' | [0.000]| [0.000]| ' -----------------+---------------+---------------+ ' W1(year=1998) | -0.368*** | -0.326*** | ' | (0.087)| (0.090)| ' | [0.000]| [0.000]| ' -----------------+---------------+---------------+ ' W1(year=1999) | -0.620*** | -0.323*** | ' | (0.091)| (0.087)| ' | [0.000]| [0.000]| ' -----------------+---------------+---------------+ ' W1(age=61) | 0.459*** | 0.476*** | ' | (0.083)| (0.070)| ' | [0.000]| [0.000]| ' -----------------+---------------+---------------+ ' W1(age=62) | 0.402*** | 0.491*** | ' | (0.091)| (0.079)| ' | [0.000]| [0.000]| ' -----------------+---------------+---------------+ ' W1(age=63) | 0.487*** | 0.726*** | ' | (0.096)| (0.092)| ' | [0.000]| [0.000]| ' -----------------+---------------+---------------+ ' W1(age=64) | 0.822*** | 1.107*** | ' | (0.091)| (0.093)| ' | [0.000]| [0.000]| ' -----------------+---------------+---------------+ ' SE(u_i) | 3.289*** | 1.706*** | ' | (0.193)| (0.242)| ' | | | ' -----------------+---------------+---------------+ ' Corr | 0.000 | 0.000 | ' | (0.000)| (0.000)| ' | | | ' -----------------+---------------+---------------+ ' lnL | -6656.953 | -5223.799 | ' | | | ' | | | ' -----------------+---------------+---------------+ ' Ind | 8170.000 | 8381.000 | ' | | | ' | | | ' -----------------+---------------+---------------+ ' Obs | 20425.000 | 20579.000 | ' | | | ' | | | ' -----------------+---------------+---------------+ ' #Par | 36.000 | 36.000 | ' | | | ' | | | ' -----------------+---------------+---------------+ ' DB:../data/estdataox61x_AFTER_TAX_SSW_NO_ERP_t+1 ' DEP: retired golden ' SE (Hessian) ' #Hermite:10 ' -----------------+---------------+---------------+ Dim betaXConstant As Double, _ betaXNPV_ERP_Q As Double, betaXACC_ERP_Q As Double, _ betaXmid_educ As Double, betaXhigh_educ As Double, _ betaXspouse As Double, betaXspouse_retired As Double, betaXborn_abr As Double, _ betaXyear1994 As Double, betaXyear1995 As Double, betaXyear1996 As Double, betaXyear1997 As Double, betaXyear1998 As Double, betaXyear1999 As Double, _ betaXage61 As Double, betaXage62 As Double, betaXage63 As Double, betaXage64 As Double, _ betaWConstant As Double, _ betaWqualw As Double, betaWmid_educ As Double, betaWhigh_educ As Double, betaWborn_abr As Double, _ betaWWhiteColl As Double, betaWLocalGov As Double, betaWBlueColl As Double, _ betaWyear1994 As Double, betaWyear1995 As Double, betaWyear1996 As Double, betaWyear1997 As Double, betaWyear1998 As Double, betaWyear1999 As Double, _ betaWage61 As Double, betaWage62 As Double, betaWage63 As Double, betaWage64 As Double, SEu_i As Double If i_sex(indnr) = 2 Then 'Females betaXConstant = -16.815114290948 betaXNPV_ERP_Q = 0.784860892145 betaXACC_ERP_Q = -2.834182228317 betaXmid_educ = 0.966481681888 betaXhigh_educ = 0.917301083637 betaXspouse = -0.625294571112 betaXspouse_retired = 0.475370578093 betaXborn_abr = -0.213349541168 betaXyear1994 = 0.756799603213 betaXyear1995 = 0.949101336087 betaXyear1996 = 1.117533649477 betaXyear1997 = 1.393773245174 betaXyear1998 = 1.037255903008 betaXyear1999 = 1.299081669468 betaXage61 = 1.930647569879 betaXage62 = 2.660469753264 betaXage63 = 3.258750963396 betaXage64 = 5.22804928624 betaWConstant = -1.852793988483 betaWqualw = 0.022650619398 betaWmid_educ = 0.228457457462 betaWhigh_educ = 0.295995512296 betaWborn_abr = -0.04406827935 betaWWhiteColl = 0.143628041995 betaWLocalGov = 0.033234158887 betaWBlueColl = -9000000000# betaWyear1994 = -0.561672113001 betaWyear1995 = -0.52022611836 betaWyear1996 = -0.637111709859 betaWyear1997 = -0.248041791298 betaWyear1998 = -0.368164352542 betaWyear1999 = -0.620119972765 betaWage61 = 0.459083401858 betaWage62 = 0.402310117761 betaWage63 = 0.487355799574 betaWage64 = 0.822186461154 SEu_i = 3.289151304921 Else betaXConstant = -6.390323624887 betaXNPV_ERP_Q = 0.086835361604 betaXACC_ERP_Q = -3.258435189021 betaXmid_educ = 0.409507438828 betaXhigh_educ = 0.933766479148 betaXspouse = -0.221833938933 betaXspouse_retired = 0.253831074745 betaXborn_abr = -0.36422247191 betaXyear1994 = 0.288825019144 betaXyear1995 = 0.098214656901 betaXyear1996 = 0.175342116114 betaXyear1997 = 0.419948150126 betaXyear1998 = 0.215087836764 betaXyear1999 = 0.382700136258 betaXage61 = 1.206521358646 betaXage62 = 1.332472409371 betaXage63 = 1.289821236842 betaXage64 = 1.796195334175 betaWConstant = -2.019768023276 betaWqualw = 0.018615840589 betaWmid_educ = 0.12662164542 betaWhigh_educ = 0.160578943854 betaWborn_abr = -0.13603496739 betaWWhiteColl = 0.033061101328 betaWLocalGov = 0.185204278024 betaWBlueColl = -9000000000# betaWyear1994 = -0.438264250998 betaWyear1995 = -0.301816791569 betaWyear1996 = -0.25400133161 betaWyear1997 = -0.233088774807 betaWyear1998 = -0.326193726274 betaWyear1999 = -0.323465186957 betaWage61 = 0.475646784334 betaWage62 = 0.491225487561 betaWage63 = 0.7263908426 betaWage64 = 1.107351673824 SEu_i = 1.706103570768 End If ' 1. *** EARLY RETIREMENT PROGRAM OFFERS *** ' First we simulate the ERP offers. The outcome of this will determine whether the ' individual will receive ERP offers or standard conditions in the calculations of the ssw and accruals ' The global variable i_op_erp(i) = 1 if an ERP is offered. Dim WConstant As Byte, Wqualw As Double, _ WWhiteColl As Byte, WBlueColl As Byte, WLocalGov As Byte, _ Wmid_educ As Byte, Whigh_educ As Byte, Wborn_abr As Byte, _ Wyear1994 As Byte, Wyear1995 As Byte, Wyear1996 As Byte, Wyear1997 As Byte, Wyear1998 As Byte, Wyear1999 As Byte, _ Wage61 As Byte, Wage62 As Byte, Wage63 As Byte, Wage64 As Byte ' Variable definitions in ERP equation. These are presented in the same order as in the table WConstant = 1 Wqualw = f_avg_income(indnr) / m_basbelopp 'qualifying wage in terms of basic amounts ' Sector affiliation (only white, central, local) If i_sector(indnr) = 1 Then WBlueColl = 1 Else WBlueColl = 0 If i_sector(indnr) = 2 Then WWhiteColl = 1 Else WWhiteColl = 0 If i_sector(indnr) = 4 Then WLocalGov = 1 Else WLocalGov = 0 'low_educ= 1 Frgymnasial utbildning kortare n 9 r, 2 Frgymnasial utbildning 9 (10) r; 'mid_educ= 3 Gymnasial utbildning, 4 Eftergymnasial utbildning kortare n tv r; 'high_educ= 5 Eftergymnasial utbildning tv r eller lngre, 6 Forskarutbildning; If i_edlevel(indnr) = 1 Then Wmid_educ = 1 Else Wmid_educ = 0 'mid_educ dummy If i_edlevel(indnr) = 2 Then Whigh_educ = 1 Else Whigh_educ = 0 'high_educ dummy Wborn_abr = i_born_abroad(indnr) Wyear1994 = 0 Wyear1995 = 0 Wyear1996 = 0 Wyear1997 = 0 Wyear1998 = 0 Wyear1999 = 1 If i_age(indnr) = 61 Then Wage61 = 1 Else Wage61 = 0 If i_age(indnr) = 62 Then Wage62 = 1 Else Wage62 = 0 If i_age(indnr) = 63 Then Wage63 = 1 Else Wage63 = 0 If i_age(indnr) = 64 Then Wage64 = 1 Else Wage64 = 0 Dim wb As Double wb = WConstant * betaWConstant _ + Wqualw * betaWqualw _ + WWhiteColl * betaWWhiteColl _ + WLocalGov * betaWLocalGov _ + WBlueColl * betaWBlueColl _ + Wmid_educ * betaWmid_educ _ + Whigh_educ * betaWhigh_educ _ + Wborn_abr * betaWborn_abr _ + Wyear1994 * betaWyear1994 _ + Wyear1995 * betaWyear1995 _ + Wyear1996 * betaWyear1996 _ + Wyear1997 * betaWyear1997 _ + Wyear1998 * betaWyear1998 _ + Wyear1999 * betaWyear1999 _ + Wage61 * betaWage61 _ + Wage62 * betaWage62 _ + Wage63 * betaWage63 _ + Wage64 * betaWage64 Dim ERP_PROB As Double ERP_PROB = PROBIT(wb) Dim slump As Double slump = Rnd() If slump < ERP_PROB Then i_op_erp(indnr) = 1 Else i_op_erp(indnr) = 0 ' Override ERP for blue collars as these are not allowed to have access to ERP If i_sector(indnr) = 1 Then i_op_erp(indnr) = 0 End If ' If active, the following line eliminates early retirement programs from the model! 'i_op_erp(indnr) = 0 ' 2. *** RETIREMENT DECISION *** ' Conditional on the outcome in the ERP section above, we simulate the decision to ' early retirement Dim XConstant As Byte, _ XNPV_ERP_Q As Double, XACC_ERP_Q As Double, _ Xmid_educ As Byte, Xhigh_educ As Byte, Xfemale As Byte, Xspouse As Byte, Xspouse_retired As Byte, Xborn_abr As Byte, _ Xyear1994 As Byte, Xyear1995 As Byte, Xyear1996 As Byte, Xyear1997 As Byte, Xyear1998 As Byte, Xyear1999 As Byte, _ Xage61 As Byte, Xage62 As Byte, Xage63 As Byte, Xage64 As Byte ' Variable definitions in retirement decision ' NB: some variable definitions are equivalent to Wxxx above XConstant = WConstant ' In the calculations of ssw we account for ERP when i_op_erp(i)=1 ' such that if i_op_erp(i)=1 (see above) ' a) individual receives 80% 0-7.5BA ,70% 7.5-20BA, and 40% 20-30BA of income until 65 ' b) after age 65, the standard conditions apply (sector specific) but without adjustments for early retirement ' The accrual values are calculated assuming that if there is an offer in period t there will ' NOT be an offer in period t+1. ' NB: ssw0 and ssw1 are based on net benefits (after tax) ME 2005-11-18 Dim ssw0 As Double, ssw1 As Double, accrual0 As Double ssw0 = ssw_Babyboom(indnr, 0, "ALL") 'ssw if retiring this year Dim op_erp As Double op_erp = i_op_erp(indnr) i_op_erp(indnr) = 0 ' Assuming no ERP in period t ssw1 = ssw_Babyboom(indnr, 1, "ALL") 'ssw if retiring next year, must be younger than 70 i_op_erp(indnr) = op_erp 'Resetting i_op_erp value 'calculating the accrual value, i.e., the growth in ssw if waiting another year with retirement accrual0 = ssw1 - ssw0 'the difference in ssw if retiering next year instead of this year 'Calculate the five year average annual income after tax using the simplified tax system Dim average_after_tax_income As Double average_after_tax_income = _ ( _ (i_inc_taxable1(indnr) - ssw_retirement_tax(indnr, i_inc_taxable1(indnr))) / m_basbelopp1 + _ (i_inc_taxable2(indnr) - ssw_retirement_tax(indnr, i_inc_taxable2(indnr))) / m_basbelopp2 + _ (i_inc_taxable3(indnr) - ssw_retirement_tax(indnr, i_inc_taxable3(indnr))) / m_basbelopp3 + _ (i_inc_taxable4(indnr) - ssw_retirement_tax(indnr, i_inc_taxable4(indnr))) / m_basbelopp4 + _ (i_inc_taxable5(indnr) - ssw_retirement_tax(indnr, i_inc_taxable5(indnr))) / m_basbelopp5 _ ) * m_basbelopp1 / 5 XNPV_ERP_Q = ssw0 / average_after_tax_income 'NPV/QW XACC_ERP_Q = (ssw1 - ssw0) / average_after_tax_income 'accr/QW ' Uncomment these lines and add i_ssw, i_accrual, i_ssw_q, and i_accrual_q as SESIM variables ' to extract this information. ' i_ssw(indnr) = ssw0 ' i_accrual(indnr) = accrual0 ' i_ssw_q(indnr) = XNPV_ERP_Q ' i_accrual_q(indnr) = XACC_ERP_Q Xmid_educ = Wmid_educ Xhigh_educ = Whigh_educ ' Create dummy_spouse_working=1 if spouse is working last year, i.e., i_status1(spouse)=4 ' dummy_have_spouse = 1 if there is a sV|žU=g#BrT}=6~}[Ϸ 뫕|O7T"j11 NI - }o>|}s@".@ P鎷TtFRN6П {]rx?gKIY+M&]NڊvEx k?P#yoax$dQSUt ?+7J w$ܝ* $څO1PS