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