inst/doc/mortality_projection.R

### R code from vignette source 'mortality_projection.Rnw'

###################################################
### code chunk number 1: mortality_projection.Rnw:66-67
###################################################
options(width=80, prompt='R>')


###################################################
### code chunk number 2: load
###################################################
library(demography)
library(forecast)
library(lifecontingencies)


###################################################
### code chunk number 3: createDemogData
###################################################
#italyDemo<-hmd.mx(country="ITA", username="username@email.domain", 
#password="password", label="Italy")
load(file="mortalityDatasets.RData")


###################################################
### code chunk number 4: italyDemoFig
###################################################
par(mfrow=c(1,3))
plot(italyDemo,series="male",datatype="rate", main="Male rates")
plot(italyDemo,series="female",datatype="rate", main="Female rates")
plot(italyDemo,"total",datatype="rate", main="Total rates")


###################################################
### code chunk number 5: italyDemoFigTime
###################################################
par(mfrow=c(1,3))
plot(italyDemo,series="male",datatype="rate",
     plot.type="time", main="Male rates",xlab="Years")
plot(italyDemo,series="female",datatype="rate",
     plot.type="time", main="Female rates",xlab="Years")
plot(italyDemo,series="total",datatype="rate",
     plot.type="time", main="Total rates",xlab="Years")


###################################################
### code chunk number 6: fitLeeCarter
###################################################
italyLcaM<-lca(italyDemo,series="male",max.age=100)
italyLcaF<-lca(italyDemo,series="female",max.age=100)
italyLcaT<-lca(italyDemo,series="total",max.age=100)


###################################################
### code chunk number 7: leeCarterResultsFig
###################################################
  par(mfrow=c(1,3))
  plot(italyLcaT$ax, main="ax", xlab="Age",ylab="ax",type="l")
  lines(x=italyLcaF$age, y=italyLcaF$ax, main="ax", col="red")
  lines(x=italyLcaM$age, y=italyLcaM$ax, main="ax", col="blue")
  legend("topleft" , c("Male","Female","Total"),
  cex=0.8,col=c("blue","red","black"),lty=1);
  plot(italyLcaT$bx, main="bx", xlab="Age",ylab="bx",type="l")
  lines(x=italyLcaF$age, y=italyLcaF$bx, main="bx", col="red")
  lines(x=italyLcaM$age, y=italyLcaM$bx, main="bx", col="blue")
  legend("topright" , c("Male","Female","Total"),
  cex=0.8,col=c("blue","red","black"),lty=1);
  plot(italyLcaT$kt, main="kt", xlab="Year",ylab="kt",type="l")
  lines(x=italyLcaF$year, y=italyLcaF$kt, main="kt", col="red")
  lines(x=italyLcaM$year, y=italyLcaM$kt, main="kt", col="blue")
  legend("topright" , c("Male","Female","Total"),
  cex=0.8,col=c("blue","red","black"),lty=1);


###################################################
### code chunk number 8: ktProjections
###################################################
fM<-forecast(italyLcaM,h=110)
fF<-forecast(italyLcaF,h=110)
fT<-forecast(italyLcaT,h=110)


###################################################
### code chunk number 9: ktProjectionFig
###################################################
par(mfrow=c(1,3))
plot(fM$kt.f,main="Male")
plot(fF$kt.f,main="Female",)
plot(fT$kt.f,main="Total")


###################################################
### code chunk number 10: ktrates
###################################################
ratesM<-cbind(italyDemo$rate$male[1:100,],fM$rate$male[1:100,])
ratesF<-cbind(italyDemo$rate$female[1:100,],fF$rate$female[1:100,])
ratesT<-cbind(italyDemo$rate$total[1:100,],fT$rate$total[1:100,])


###################################################
### code chunk number 11: ktratesFig
###################################################
par(mfrow=c(1,1))
plot(seq(min(italyDemo$year),max(italyDemo$year)+110),ratesF[65,],
     col="red",xlab="Years",ylab="Death Rates",type="l")
lines(seq(min(italyDemo$year),max(italyDemo$year)+110),ratesM[65,],
      col="blue",xlab="Years",ylab="Death Rates")
lines(seq(min(italyDemo$year),max(italyDemo$year)+110),ratesT[65,],
      col="black",xlab="Years",ylab="Death Rates")
legend("topright" , c("Male","Female","Total"),
       cex=0.8,col=c("blue","red","black"),lty=1);


###################################################
### code chunk number 12: lifeTableProject
###################################################

createActuarialTable<-function(yearOfBirth,rate){

  mxcoh <- rate[1:nrow(rate),(yearOfBirth-min(italyDemo$year)+1):ncol(rate)]
  cohort.mx <- diag(mxcoh)
  cohort.px=exp(-cohort.mx)
  #get projected Px
  fittedPx=cohort.px #add px to table
	px4Completion=seq(from=cohort.px[length(fittedPx)], to=0, length=20)
	totalPx=c(fittedPx,px4Completion[2:length(px4Completion)])
	#create life table
	irate=1.04/1.02-1

	cohortLt=probs2lifetable(probs=totalPx, radix=100000,type="px", 
  name=paste("Cohort",yearOfBirth))
	cohortAct=new("actuarialtable",x=cohortLt@x, lx=cohortLt@lx, 
	interest=irate, name=cohortLt@name)
	return(cohortAct)
	}




###################################################
### code chunk number 13: annuityAPV
###################################################
	getAnnuityAPV<-function(yearOfBirth,rate) {
		actuarialTable<-createActuarialTable(yearOfBirth,rate)
		out=axn(actuarialTable,x=65,m=12)
		return(out)
	}
rate<-ratesM
for(i in seq(1920,2000,by=10)) {
		cat("For cohort ",i, "of males the e0 is",
		round(exn(createActuarialTable(i,rate)),2),
		" and the APV is :",round(getAnnuityAPV(i,rate),2),"\n")
		
	}
rate<-ratesF
for(i in seq(1920,2000,by=10)) {
  	cat("For cohort ",i, "of females the e0 at birth is",
	round(exn(createActuarialTable(i,rate)),2),
	" and the APV is :",round(getAnnuityAPV(i,rate),2),"\n")
		
	}
rate<-ratesT
for(i in seq(1920,2000,by=10)) {
    cat("For cohort ",i, "of total population the e0 is",
		round(exn(createActuarialTable(i,rate)),2),
		" and the APV is :",round(getAnnuityAPV(i,rate),2),"\n")
		
	}


###################################################
### code chunk number 14: r_stmomoconfig
###################################################
#loading StMoMo package
require(StMoMo) 
#get data
##use total death, mid year exposures
ita.StMoMoData<-StMoMoData(data=italyDemo, series = "total",type="central")
#bring to initial year
ita.StMoMoData.Ini<-central2initial(ita.StMoMoData)
#assume max age 103
ages.fit = 0:103
#generate weight matrix
wxt <- genWeightMat(ages = ages.fit,  years = ita.StMoMoData.Ini$years,clip = 3)


###################################################
### code chunk number 15: r_stmomofit (eval = FALSE)
###################################################
## #fitting the models
## ## LC
## LC <- lc(link = "logit")
## LCfit <- fit(LC, data = ita.StMoMoData.Ini, ages.fit = ages.fit, wxt = wxt)
## ## CBD
## CBD <- cbd()
## CBDfit <- fit(CBD, data = ita.StMoMoData.Ini, ages.fit = ages.fit, wxt = wxt)


###################################################
### code chunk number 16: stmomo_rh_fit (eval = FALSE)
###################################################
## ## RH
## RH <- rh(link = "logit", cohortAgeFun = "1")
## RHfit <- fit(RH, data = ita.StMoMoData.Ini, ages.fit = ages.fit,   wxt = wxt,start.ax = LCfit$ax,
##              start.bx = LCfit$bx, start.kt = LCfit$kt)


###################################################
### code chunk number 17: r_stmomosaveandload
###################################################
#save(list=c("LCfit","CBDfit"),file="StMoMoModels.RData",compress = "xz")
load(file="StMoMoModels.RData")


###################################################
### code chunk number 18: stmomo_lcplot
###################################################
plot(LCfit)


###################################################
### code chunk number 19: stmomo_cbdlot
###################################################
plot(CBDfit)


###################################################
### code chunk number 20: stmomo_rhplot (eval = FALSE)
###################################################
## plot(RHfit)


###################################################
### code chunk number 21: stmomo_cbdlot
###################################################
horizon=50
LCfor <- forecast(LCfit, h = horizon)
#assuming arima with drift
#RHfor <- forecast(RHfit, h = horizon, gc.order = c(1,1,0))
CBDfor <- forecast(CBDfit, h = horizon)


###################################################
### code chunk number 22: stmomo_simulate
###################################################
#simulazione & proiezione
##simulazione
nsims=100
#RHsim <- simulate(RHfit, nsim = nsims, h = 50, gc.order = c(1, 1, 0))
LCsim <- simulate(LCfit, nsim = nsims, h = 50)
CBDsim <- simulate(CBDfit, nsim = nsims, h = 50)


###################################################
### code chunk number 23: stmomo_lc_sims (eval = FALSE)
###################################################
## ##LC
## plot(LCfit$years, LCfit$kt[1, ], xlim = range(LCfit$years, LCsim$kt.s$years), ylim = range(LCfit$kt, LCsim$kt.s$sim[1, , 1:20]),type = "l", xlab = "year", ylab = "kt", main = "LC model simulations")
## matlines(LCsim$kt.s$years, LCsim$kt.s$sim[1, , 1:20], type = "l", lty = 1)


###################################################
### code chunk number 24: stmomo_lc_sims2
###################################################
##LC
plot(LCfit$years, LCfit$kt[1, ], xlim = range(LCfit$years, LCsim$kt.s$years), ylim = range(LCfit$kt, LCsim$kt.s$sim[1, , 1:20]),type = "l", xlab = "year", ylab = "kt", main = "LC model simulations")
matlines(LCsim$kt.s$years, LCsim$kt.s$sim[1, , 1:20], type = "l", lty = 1)


###################################################
### code chunk number 25: stmomo_lifetable (eval = FALSE)
###################################################
## #plotting historical fitted rates, until 2014
## chosen_cohort=1950
## plot(0:64, extractCohort(fitted(LCfit, type = "rates"), cohort = chosen_cohort),
## type = "l", log = "y", xlab = "age", ylab = "q(x)",
## main = "Cohort 1950 mortality rate", xlim = c(0,103), ylim = c(0.0005, 0.07))
## #adding fitted projections
## lines(65:103, extractCohort(LCfor$rates, cohort = chosen_cohort), lty = 2, lwd=2, col="red")


###################################################
### code chunk number 26: stmomo_lifetable2
###################################################
#plotting historical fitted rates, until 2014
chosen_cohort=1950
plot(0:64, extractCohort(fitted(LCfit, type = "rates"), cohort = chosen_cohort),
type = "l", log = "y", xlab = "age", ylab = "q(x)",
main = "Cohort 1950 mortality rate", xlim = c(0,103), ylim = c(0.0005, 0.07))
#adding fitted projections
lines(65:103, extractCohort(LCfor$rates, cohort = chosen_cohort), lty = 2, lwd=2, col="red")


###################################################
### code chunk number 27: stmomo_mortality_rates
###################################################
#LC
lc_historical_rates <- extractCohort(fitted(LCfit, type = "rates"), 
  cohort = chosen_cohort)
lc_forecasted_rates <- extractCohort(LCfor$rates, 
  cohort = chosen_cohort)
lc_rates_1950 <- c(lc_historical_rates,lc_forecasted_rates)
#RH
#rh_historical_rates <- extractCohort(fitted(RHfit, type = "rates"), cohort = chosen_cohort)
#rh_forecasted_rates <- extractCohort(RHfor$rates, cohort = chosen_cohort)
#rh_rates_1950 <- c(rh_historical_rates,rh_forecasted_rates)
#CBD
cbd_historical_rates <- extractCohort(fitted(CBDfit, type = "rates"), cohort = chosen_cohort)
cbd_forecasted_rates <- extractCohort(CBDfor$rates, cohort = chosen_cohort)
cbd_rates_1950 <- c(cbd_historical_rates,cbd_forecasted_rates)


###################################################
### code chunk number 28: rates_to_prob_1950
###################################################
lc_qx_1950<-mx2qx(lc_rates_1950)
#rh_qx_1950<-mx2qx(rh_rates_1950)
cbd_qx_1950<-mx2qx(cbd_rates_1950)


###################################################
### code chunk number 29: qx_to_lifetable
###################################################
lc_lifetable_1950<-probs2lifetable(probs=lc_qx_1950,type = "qx",
  name = paste("LC","1950","lt",sep="_"))
#rh_lifetable_1950<-probs2lifetable(probs=rh_qx_1950,type = "qx",name = paste("RH","1950","lt",sep="_"))
cbd_lifetable_1950<-probs2lifetable(probs=cbd_qx_1950,type = "qx",
  name = paste("CDB","1950","lt",sep="_"))


###################################################
### code chunk number 30: mortality_projection.Rnw:510-513
###################################################
exn(lc_lifetable_1950,x=65)
#exn(rh_lifetable_1950,x=65)
exn(cbd_lifetable_1950,x=65)


###################################################
### code chunk number 31: stmomo_act
###################################################
lc_acttbl_1950<-new("actuarialtable",x=lc_lifetable_1950@x,lx=lc_lifetable_1950@lx, interest=0.015,name="LC ActTbl")
#rh_acttbl_1950<-new("actuarialtable",x=rh_lifetable_1950@x,lx=rh_lifetable_1950@lx, interest=0.015,name="RH ActTbl")
cdb_acttbl_1950<-new("actuarialtable",x=cbd_lifetable_1950@x,lx=cbd_lifetable_1950@lx, interest=0.015,name="CBD ActTbl")


###################################################
### code chunk number 32: stmomo_axn
###################################################
axn(actuarialtable = lc_acttbl_1950,x=65)
#axn(actuarialtable = rh_acttbl_1950,x=65)
axn(actuarialtable = cdb_acttbl_1950,x=65)

Try the lifecontingencies package in your browser

Any scripts or data that you put into this service are public.

lifecontingencies documentation built on July 9, 2023, 6:10 p.m.