Predict age-specific mortality rates using the Pattern of mortality decline (PMD) method (Andreev et al. 2013).
pmd(
e0,
mx0,
sex = c("male", "female"),
nx = 5,
interp.rho = FALSE,
kranges = c(0, 25),
keep.lt = FALSE,
keep.rho = FALSE,
...
)modpmd(
e0,
mx0,
sex = c("male", "female"),
nx = 5,
interp.rho = FALSE,
kranges = c(0, 25),
ax.index = NULL,
ax.smooth = FALSE,
ax.smooth.df = NULL,
keep.lt = FALSE,
keep.rho = FALSE,
...
)
copmd(
e0m,
e0f,
mxm0,
mxf0,
nx = 5,
interp.rho = FALSE,
keep.rho = FALSE,
use.modpmd = FALSE,
...
)
A vector of target life expectancy, one element for each predicted time point.
A vector with starting age-specific mortality rates. In case of modpmd it can be
a matrix where rows correspond to age groups
and columns correspond to time periods. Rownames define the starting ages of the age groups.
Either "male" or "female".
Size of age groups. Should be either 5 or 1.
Logical controlling if the \(\rho\) coefficients should be interpolated
(TRUE) or if the raw (binned) version should be used (FALSE), as stored in
the dataset PMDrho.
A vector of size two, giving the min and max of the \(k\) parameter which is
estimated to match the target e0 using the bisection method.
Logical. If TRUE additional life table columns are kept in the
resulting object.
Logical. If TRUE the \(\rho\) coefficients are included in the resulting object.
Additional arguments passed to the underlying functions. For copmd, in addition to
kranges and keep.lt, it can be sexratio.adjust which is
a logical controlling if a sex-ratio adjustment should be applied to prevent crossovers
between male and female mx. In such a case it uses coefficients from the PMDadjcoef dataset.
However, if the argument adjust.with.mxf is set to TRUE (in addition to sexratio.adjust),
the adjustment is done using the
female mortality rates as the lower constraint for male mortality rates.
If the argument adjust.sr.if.needed is set to TRUE, a sex-ratio adjustment
is performed dynamically, using the sex ratio in the previous time point.
In such a case, an adjustment in time t is applied only if there was a drop of sex ratio
below one at time t-1. Other arguments passed here in copmd can be ax.index, ax.smooth and
ax.smooth.df which control the estimation of the initial mx if use.modpmd is TRUE.
A vector of column indices of mx to be used to estimate the \(a_x = E[log(mx(t_0))]\) parameter.
By default it is estimated as the average over all observed time periods, but this argument can restrict the time periods
to use.
Logical allowing to smooth the \(a_x\) over ages.
Degree of freedom for smoothing if ax.smooth is TRUE.
Default is half the length of \(a_x\).
A time series of target male life expectancy.
A time series of target female life expectancy.
A vector with starting age-specific male/female mortality rates. If use.modpmd is TRUE,
this can be a matrix of historical mx (age x time) from which the starting values are estimated.
Logical determining if the modified version of PMD (modpmd) should be used.
In such a case the starting values of mortality rates are estimated similarly to \(a_x\) in
leecarter.estimate, possibly from more than one time periods. In addition, a smoothing can be applied.
Function pmd and modpmd return a list with the following elements: a matrix mx
with the predicted mortality rates. If keep.lt is TRUE, it also
contains matrices sr (survival rates), and life table quantities Lx and lx.
If keep.rho is TRUE, it contains a matrix rho where columns correpond
to the values in the e0 vector and rows correspond to age groups.
Function copmd returns a list with one element for each sex
(male and female) where each of them is a list as described above.
In addition if keep.rho is TRUE, element rho.sex
gives the sex-dependent (i.e. not averaged) \(\rho_x\) coefficient.
These functions implements the PMD method introduced in Andreev et al. (2013) and its modifications. It assumes that the future decline in age-specific mortality will follow a certain pattern with the increase in life expectancy at birth (e0): $$log[mx(t)] = log[mx(t-1)] - k(t) \rho_x(t)$$
Here, \(\rho_x(t)\) is the age-specific pattern of mortality decline between \(t-1\)
and \(t\). Such patterns for each sex and various levels of e0
are stored in the dataset PMDrho. The pmd function can be instructed
to interpolate between neighboring levels of e0 by setting the argument interp.rho
to TRUE. The \(k\) parameter is estimated to match the e0 level using the bisection
method.
Function pmd evaluates the method for a single sex, while copmd does it
coherently for both sexes. In the latter case, the same \(\rho_x\)
(namely the average over sex-specific \(\rho_x\)) is used
for both, male and female.
Function modpmd implements a modified version of pmd where the initial \(log[mx(t_0)]\)
is replaced by an \(a_x\) estimated as in leecarter.estimate, i.e. using possibly
multiple years of historical mx and optionally smoothed. Arguments ax.index, ax.smooth and
ax.smooth.df determine the estimation years and parameters of the smoothing.
Andreev, K., Gu, D., Gerland, P. (2013). Age Patterns of Mortality Improvement by Level of Life Expectancy at Birth with Applications to Mortality Projections. Paper presented at the Annual Meeting of the Population Association of America, New Orleans, LA. https://paa2013.princeton.edu/papers/132554.
Gu, D., Pelletier, F., Sawyer, C. (2017). Projecting Age-sex-specific Mortality: A Comparison of the Modified Lee-Carter and Pattern of Mortality Decline Methods, UN Population Division, Technical Paper No. 6. New York: United Nations. https://population.un.org/wpp/Publications/Files/WPP2017_TechnicalPaperNo6.pdf
# NOT RUN {
data(mxF, e0Fproj, package = "wpp2017")
country <- "Hungary"
# get initial mortality for the current year
mxf <- subset(mxF, name == country)[,"2010-2015"]
names(mxf) <- c(0,1, seq(5, 100, by=5))
# get target e0
e0f <- subset(e0Fproj, name == country)[-(1:2)]
# project into future
pred <- pmd(e0f, mxf, sex = "female")
# plot first projection in black and the remaining ones in grey
plot(pred$mx[,1], type = "l", log = "y", ylim = range(pred$mx),
ylab = "female mx", xlab = "Age", main = country)
for(i in 2:ncol(pred$mx)) lines(pred$mx[,i], col = "grey")
# }
Run the code above in your browser using DataLab