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