a)
require(dplyr)
## Loading required package: dplyr
## Warning: package 'dplyr' was built under R version 3.5.1
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
life0<-read.csv("C:/R/2010CompleteLifeTable.csv")
life<-life0[,c(1,9,10)]
samang_m<- exp(-9.860+0.090*100); samang_f<-exp(-11.677+0.105*100) # 100세인사람 사망확률 추정값
life[102,]<-life[101,]
life[101,1]<-100; life[102,1]<-101 #101세이상
life[101,2]<-round(life[101,2]*(1-samang_m), 0); life[101,3]<-round(life[101,3]*(1-samang_f), 0)
life[102,2]=life[102,2]-life[101,2]; life[102,3]=life[102,3]-life[101,3]
r=log(1.05) #when i=0.05
v=exp(-r)
dx_male=-diff(life$lx_male)
dx_female=-diff(life$lx_female)
life <- life %>%
mutate(Cx_male=v^(Age+1)*dx_male,
Cx_female=v^(Age+1)*dx_female,
Dx_male=(v^(Age))*life$lx_male,
Dx_female=(v^(Age))*life$lx_female)
## Warning in v^(Age + 1) * dx_male: 두 객체의 길이가 서로 배수관계에 있지 않
## 습니다
## Warning in v^(Age + 1) * dx_female: 두 객체의 길이가 서로 배수관계에 있지
## 않습니다
life$Mx.female<-c()
life$Mx.male<-c()
for (i in c(1:101)){
life$Mx.female[i]<-sum(life$Cx_female[i:101])
life$Mx.male[i]<-sum(life$Cx_male[i:101])
}
life<-life[c(1:101),]
Ax.male<-life$Mx.male/life$Dx_male
Ax.female<-life$Mx.female/life$Dx_female
A.bar.male=data.frame("Age"=seq(0,100,1),
"A.bar.male"=Ax.male*(0.05/r))
A.bar.female=data.frame("Age"=seq(0,100,1),
"A.bar.female"=Ax.female*(0.05/r))
p3.q1<-cbind(A.bar.male,A.bar.female)[,c(1,2,4)]
p3.q1<-p3.q1[which(c(p3.q1$Age==20 | p3.q1$Age==25 | p3.q1$Age==30 | p3.q1$Age==35 |
p3.q1$Age==40 | p3.q1$Age==45 | p3.q1$Age==50 | p3.q1$Age==55)|
p3.q1$Age==60 | p3.q1$Age==65),]
p3.q1
## Age A.bar.male A.bar.female
## 21 20 0.07994643 0.05574984
## 26 25 0.09909713 0.06935125
## 31 30 0.12269496 0.08604695
## 36 35 0.15213776 0.10704224
## 41 40 0.18820080 0.13307974
## 46 45 0.23040605 0.16536069
## 51 50 0.27926121 0.20476149
## 56 55 0.33551389 0.25311450
## 61 60 0.40024674 0.31262429
## 66 65 0.47496697 0.38391985
b)
i.m=(exp(r/12)-1)*12
Ax.12m.male=Ax.male*(0.05/i.m)
Ax.12m.female=Ax.female*(0.05/i.m)
ax.12m.male=data.frame("Age"=seq(0,100,1), "ax.12.m.male"=(1-Ax.12m.male)/(12*(1-exp(-r/12))))
ax.12m.female=data.frame("Age"=seq(0,100,1), "ax.12.m.female"=(1-Ax.12m.female)/(12*(1-exp(-r/12))))
p3.q2<-cbind(ax.12m.male,ax.12m.female)[,c(1,2,4)]
p3.q2<-p3.q2[which(c(p3.q2$Age==20 | p3.q2$Age==25 | p3.q2$Age==30 | p3.q2$Age==35 |
p3.q2$Age==40 | p3.q2$Age==45 | p3.q2$Age==50 | p3.q2$Age==55)|
p3.q2$Age==60 | p3.q2$Age==65),]
p3.q2
## Age ax.12.m.male ax.12.m.female
## 21 20 18.89905 19.39499
## 26 25 18.50654 19.11621
## 31 30 18.02288 18.77402
## 36 35 17.41943 18.34370
## 41 40 16.68028 17.81004
## 46 45 15.81525 17.14841
## 51 50 14.81392 16.34086
## 56 55 13.66097 15.34982
## 61 60 12.33421 14.13011
## 66 65 10.80275 12.66884
c)
ax.12m.male2=(1-Ax.12m.male)/(12*(1-exp(-r/12)))
ax.12m.female2=(1-Ax.12m.female)/(12*(1-exp(-r/12)))
px.12m.male=(Ax.male/ax.12m.male2)*100000000
px.12m.female=(Ax.female/ax.12m.female2)*100000000
p3.q3<-data.frame("Age"=seq(0,100,1),
"premium.m"=as.integer(px.12m.male/12),
"premuim.f"=as.integer(px.12m.female/12))
p3.q3<-p3.q3[which(c(p3.q3$Age==20 | p3.q3$Age==25 | p3.q3$Age==30 | p3.q3$Age==35 |
p3.q3$Age==40 | p3.q3$Age==45 | p3.q3$Age==50 | p3.q3$Age==55)|
p3.q3$Age==60 | p3.q3$Age==65),]
p3.q3
## Age premium.m premuim.f
## 21 20 34398 23374
## 26 25 43542 29500
## 31 30 55358 37269
## 36 35 71020 47451
## 41 40 91748 60761
## 46 45 118467 78413
## 51 50 153292 101895
## 56 55 199714 134089
## 61 60 263874 179911
## 66 65 357528 246424