Title: | Parametric Mortality Models, Life Tables and HMD |
---|---|
Description: | Fit the most popular human mortality 'laws', and construct full and abridge life tables given various input indices. A mortality law is a parametric function that describes the dying-out process of individuals in a population during a significant portion of their life spans. For a comprehensive review of the most important mortality laws see Tabeau (2001) <doi:10.1007/0-306-47562-6_1>. Practical functions for downloading data from various human mortality databases are provided as well. |
Authors: | Marius D. Pascariu [aut, cre, cph] , Vladimir Canudas-Romo [ctb] |
Maintainer: | Marius D. Pascariu <[email protected]> |
License: | MIT + file LICENSE |
Version: | 2.1.0 |
Built: | 2024-11-10 03:14:38 UTC |
Source: | https://github.com/mpascariu/mortalitylaws |
Dataset containing altered death rates (mx), death counts (Dx)
and exposures (Ex) for the female population living in
England & Wales in four different years: 1850, 1900, 1950 and 2010.
The data-set is provided for testing purposes only.
Download the actual data free of charge from https://www.mortality.org.
Once a username and a password are created on the website the function
ReadHMD
can be used for downloading.
ahmd
ahmd
An object of class list
of length 3.
head(ahmd$mx)
head(ahmd$mx)
The function returns information about available data in the Human Mortality Database, HMD (period life tables etc.), with the range of years covered by the life tables.
availableHMD(link = "https://www.mortality.org/Data/DataAvailability")
availableHMD(link = "https://www.mortality.org/Data/DataAvailability")
link |
URL to the HMD available data. Default: "https://www.mortality.org/Data/DataAvailability" |
A tibble.
Marius D. Pascariu
availableHMD()
availableHMD()
The function returns information about the parametric models that can be
called and fitted in the MortalityLaw
function.
For a comprehensive review of the most important mortality laws,
Tabeau (2001) is a good starting point.
availableLaws(law = NULL)
availableLaws(law = NULL)
law |
Optional. Default: |
The output is of the "availableLaws"
class with the components:
table |
Table with mortality models and codes to be used in |
legend |
Table with details about the section of the mortality curve |
Marius D. Pascariu
Gompertz, B. (1825). On the Nature of the Function Expressive of the Law of Human Mortality, and on a New Mode of Determining the Value of Life Contingencies. Philosophical Transactions of the Royal Society of London, 115, 513-583.
Makeham, W. (1860). On the Law of Mortality and Construction of Annuity Tables. The Assurance Magazine and Journal of the Institute of Actuaries, 8(6), 301-310. doi:10.1017/S204616580000126X
Thiele, T. (1871). On a Mathematical Formula to express the Rate of Mortality throughout the whole of Life, tested by a Series of Observations made use of by the Danish Life Insurance Company of 1871. Journal of the Institute of Actuaries and Assurance Magazine, 16(5), 313-329. doi:10.1017/S2046167400043688
Oppermann, L. H. F. (1870). On the graduation of life tables, with special application to the rate of mortality in infancy and childhood. The Insurance Record Minutes from a meeting in the Institute of Actuaries, 42.
Wittstein, T. and D. Bumsted. (1883). The Mathematical Law of Mortality. Journal of the Institute of Actuaries and Assurance Magazine, 24(3), 153-173.
Steffensen, J. (1930). Infantile mortality from an actuarial point of view. Skandinavisk Aktuarietidskrift 13, 272-286. doi:10.1080/03461238.1930.10416902
Perks, W. (1932). On Some Experiments in the Graduation of Mortality Statistics. Journal of the Institute of Actuaries, 63(1), 12-57. doi:10.1017/S0020268100046680
Harper, F. S. (1936). An actuarial study of infant mortality. Scandinavian Actuarial Journal 1936 (3-4), 234-270. doi:10.1080/03461238.1936.10405113
Weibull, W. (1951). A statistical distribution function of wide applicability. Journal of applied mechanics 103, 293-297.
Beard, R. E. (1971). Some aspects of theories of mortality, cause of death analysis, forecasting and stochastic processes. Biological aspects of demography 999, 57-68.
Vaupel, J., Manton, K.G., and Stallard, E. (1979). The impact of heterogeneity in individual frailty on the dynamics of mortality. Demography 16(3): 439-454. doi:10.2307/2061224
Siler, W. (1979), A Competing-Risk Model for Animal Mortality. Ecology, 60: 750-757. doi:10.2307/1936612
Heligman, L., & Pollard, J. (1980). The age pattern of mortality. Journal of the Institute of Actuaries, 107(1), 49-80. doi:10.1017/S0020268100040257
Rogers A and Planck F (1983). MODEL: A General Program for Estimating Parametrized Model Schedules of Fertility, Mortality, Migration, and Marital and Labor Force Status Transitions. IIASA Working Paper. IIASA, Laxenburg, Austria: WP-83-102
Martinelle S. (1987). A generalized Perks formula for old-age mortality. Stockholm, Sweden, Statistiska Centralbyran, 1987. 55 p. (R&D Report, Research-Methods-Development, U/STM No. 38)
Carriere J.F. (1992). Parametric models for life tables. Transactions of the Society of Actuaries. Vol.44
Kostaki A. (1992). A nine-parameter version of the Heligman-Pollard formula. Mathematical Population Studies. Vol. 3 277-288. doi:10.1080/08898489209525346
Thatcher AR, Kannisto V and Vaupel JW (1998). The force of mortality at ages 80 to 120. Odense Monographs on Population Aging Vol. 5, Odense University Press, 1998. 104, 20 p. Odense, Denmark
Tabeau E. (2001). A Review of Demographic Forecasting Models for Mortality. In: Tabeau E., van den Berg Jeths A., Heathcote C. (eds) Forecasting Mortality in Developed Countries. European Studies of Population, vol 9. Springer, Dordrecht. doi:10.1007/0-306-47562-6_1
Finkelstein M. (2012) Discussing the Strehler-Mildvan model of mortality Demographic Research, Vol. 26(9), 191-206. doi:10.4054/DemRes.2012.26.9
availableLaws()
availableLaws()
The function returns information about the implemented loss function used by the
optimization procedure in the MortalityLaw
function.
availableLF()
availableLF()
A list of class availableLF
with the components:
table |
Table with loss functions and codes to be used in |
legend |
Table with details about the abbreviation used. |
Marius D. Pascariu
availableLF()
availableLF()
Easy conversion between the life table indicators. This function is based
on the LifeTable
function and methods behind it.
convertFx(x, data, from, to, ...)
convertFx(x, data, from, to, ...)
x |
Vector of ages at the beginning of the age interval. |
data |
Vector or data.frame/matrix containing the mortality indicators. |
from |
Specify the life table indicator in the input |
to |
What indicator would you like to obtain? Character.
Options: |
... |
Further arguments to be passed to the |
A matrix or array containing life table indicators.
Marius D. Pascariu
# Data --- x <- 0:110 mx <- ahmd$mx # mx to qx qx <- convertFx(x, data = mx, from = "mx", to = "qx") # mx to dx dx <- convertFx(x, data = mx, from = "mx", to = "dx") # mx to lx lx <- convertFx(x, data = mx, from = "mx", to = "lx") # There are 28 possible combinations -------------------------------- # Let generate all of them. from <- c("mx", "qx", "dx", "lx") to <- c("mx", "qx", "dx", "lx", "Lx", "Tx", "ex") K <- expand.grid(from = from, to = to) # all possible cases/combinations for (i in 1:nrow(K)) { In <- as.character(K[i, "from"]) Out <- as.character(K[i, "to"]) N <- paste0(Out, "_from_", In) cat(i, " Create", N, "\n") # Create the 28 sets of results assign(N, convertFx(x = x, data = get(In), from = In, to = Out)) }
# Data --- x <- 0:110 mx <- ahmd$mx # mx to qx qx <- convertFx(x, data = mx, from = "mx", to = "qx") # mx to dx dx <- convertFx(x, data = mx, from = "mx", to = "dx") # mx to lx lx <- convertFx(x, data = mx, from = "mx", to = "lx") # There are 28 possible combinations -------------------------------- # Let generate all of them. from <- c("mx", "qx", "dx", "lx") to <- c("mx", "qx", "dx", "lx", "Lx", "Tx", "ex") K <- expand.grid(from = from, to = to) # all possible cases/combinations for (i in 1:nrow(K)) { In <- as.character(K[i, "from"]) Out <- as.character(K[i, "to"]) N <- paste0(Out, "_from_", In) cat(i, " Create", N, "\n") # Create the 28 sets of results assign(N, convertFx(x = x, data = get(In), from = In, to = Out)) }
Compute Life Tables from Parameters of a Mortality Law
LawTable(x, par, law, sex = NULL, lx0 = 1e+05, ax = NULL)
LawTable(x, par, law, sex = NULL, lx0 = 1e+05, ax = NULL)
x |
Vector of ages at the beginning of the age interval. |
par |
The parameters of the mortality model. |
law |
The name of the mortality law/model to be used. e.g.
|
sex |
Sex of the population considered here. Default: |
lx0 |
Radix. Default: 100 000. |
ax |
Numeric scalar. Subject-time alive in age-interval for those who
die in the same interval. If |
The "life table" is also called "mortality table" or "actuarial table". This shows, for each age, what the probability is that a person of that age will die before his or her next birthday, the expectation of life across different age ranges or the survivorship of people from a certain population.
The output is of the "LifeTable"
class with the components:
lt |
Computed life table; |
call |
|
process_date |
Time stamp. |
Marius D. Pascariu
# Example 1 --- Makeham --- 4 tables ---------- x1 = 45:100 L1 = "makeham" C1 = matrix(c(0.00717, 0.07789, 0.00363, 0.01018, 0.07229, 0.00001, 0.00298, 0.09585, 0.00002, 0.00067, 0.11572, 0.00078), nrow = 4, dimnames = list(1:4, c("A", "B", "C"))) LawTable(x = 45:100, par = C1, law = L1) # WARNING!!! # It is important to know how the coefficients have been estimated. If the # fitting of the model was done over the [x, x+) age-range, the LawTable # function can be used to create a life table only for age x onward. # What can go wrong? # ** Example 1B - is OK. LawTable(x = 45:100, par = c(0.00717, 0.07789, 0.00363), law = L1) # ** Example 1C - Not OK, because the life expectancy at age 25 is # equal with life expectancy at age 45 in the previous example. LawTable(x = 25:100, par = c(0.00717, 0.07789, 0.00363), law = L1) # Why is this happening? # If we have a model that covers only a part of the human mortality curve # (e.g. adult mortality), in fitting the x vector is scaled down, meaning # age (x) becomes (x - min(x) + 1). And, the coefficients are estimated on # a scaled x in ordered to obtain meaningful estimates. Otherwise the # optimization process might not converge. # What can we do about it? # a). Know which mortality laws are rescaling the x vector in the fitting # process. If these models are fitted with the MortalityLaw() function, you # can find out like so: A <- availableLaws()$table A[, c("CODE", "SCALE_X")] # b). If you are using one of the models that are applying scaling, # be aware over what age-range the coefficients have been estimated. If they # have been estimated using, say, ages 50 to 80, you can use the # LawTable() to build a life tables from age 50 onwards. # Example 2 --- Heligman-Pollard -- 1 table ---- x2 = 0:110 L2 = "HP" C2 = c(0.00223, 0.01461, 0.12292, 0.00091, 2.75201, 29.01877, 0.00002, 1.11411) LawTable(x = x2, par = C2, law = L2) # Because "HP" is not scaling down the x vector, the output is not affected # by the problem described above. # Check LawTable(x = 3:110, par = C2, law = L2) # Note the e3 = 70.31 in both tables
# Example 1 --- Makeham --- 4 tables ---------- x1 = 45:100 L1 = "makeham" C1 = matrix(c(0.00717, 0.07789, 0.00363, 0.01018, 0.07229, 0.00001, 0.00298, 0.09585, 0.00002, 0.00067, 0.11572, 0.00078), nrow = 4, dimnames = list(1:4, c("A", "B", "C"))) LawTable(x = 45:100, par = C1, law = L1) # WARNING!!! # It is important to know how the coefficients have been estimated. If the # fitting of the model was done over the [x, x+) age-range, the LawTable # function can be used to create a life table only for age x onward. # What can go wrong? # ** Example 1B - is OK. LawTable(x = 45:100, par = c(0.00717, 0.07789, 0.00363), law = L1) # ** Example 1C - Not OK, because the life expectancy at age 25 is # equal with life expectancy at age 45 in the previous example. LawTable(x = 25:100, par = c(0.00717, 0.07789, 0.00363), law = L1) # Why is this happening? # If we have a model that covers only a part of the human mortality curve # (e.g. adult mortality), in fitting the x vector is scaled down, meaning # age (x) becomes (x - min(x) + 1). And, the coefficients are estimated on # a scaled x in ordered to obtain meaningful estimates. Otherwise the # optimization process might not converge. # What can we do about it? # a). Know which mortality laws are rescaling the x vector in the fitting # process. If these models are fitted with the MortalityLaw() function, you # can find out like so: A <- availableLaws()$table A[, c("CODE", "SCALE_X")] # b). If you are using one of the models that are applying scaling, # be aware over what age-range the coefficients have been estimated. If they # have been estimated using, say, ages 50 to 80, you can use the # LawTable() to build a life tables from age 50 onwards. # Example 2 --- Heligman-Pollard -- 1 table ---- x2 = 0:110 L2 = "HP" C2 = c(0.00223, 0.01461, 0.12292, 0.00091, 2.75201, 29.01877, 0.00002, 1.11411) LawTable(x = x2, par = C2, law = L2) # Because "HP" is not scaling down the x vector, the output is not affected # by the problem described above. # Check LawTable(x = 3:110, par = C2, law = L2) # Note the e3 = 70.31 in both tables
Construct either a full or abridged life table with various input choices
like: death counts and mid-interval population estimates (Dx, Ex)
or
age-specific death rates (mx)
or death probabilities (qx)
or survivorship curve (lx)
or a distribution of deaths (dx)
.
If one of these options is specified, the other can be ignored. The input
data can be an object of class: numerical vector
, matrix
or
data.frame
.
LifeTable(x, Dx = NULL, Ex = NULL, mx = NULL, qx = NULL, lx = NULL, dx = NULL, sex = NULL, lx0 = 1e5, ax = NULL)
LifeTable(x, Dx = NULL, Ex = NULL, mx = NULL, qx = NULL, lx = NULL, dx = NULL, sex = NULL, lx0 = 1e5, ax = NULL)
x |
Vector of ages at the beginning of the age interval. |
Dx |
Object containing death counts. An element of the |
Ex |
Exposure in the period. |
mx |
Life table death rate in age interval [x, x+n). |
qx |
Probability of dying in age interval [x, x+n). |
lx |
Probability of survival up until exact age x (if l(0) = 1), or the number of survivors at exact age x, assuming l(0) > 1. |
dx |
Deaths by life-table population in the age interval [x, x+n). |
sex |
Sex of the population considered here. Default: |
lx0 |
Radix. Default: 100 000. |
ax |
Numeric scalar. Subject-time alive in age-interval for those who
die in the same interval. If |
The "life table" is also called "mortality table" or "actuarial table". This shows, for each age, what the probability is that a person of that age will die before his or her next birthday, the expectation of life across different age ranges or the survivorship of people from a certain population.
The output is of the "LifeTable"
class with the components:
lt |
Computed life table; |
call |
|
process_date |
Time stamp. |
Marius D. Pascariu
# Example 1 --- Full life tables with different inputs --- y <- 1900 x <- as.numeric(rownames(ahmd$mx)) Dx <- ahmd$Dx[, paste(y)] Ex <- ahmd$Ex[, paste(y)] LT1 <- LifeTable(x, Dx = Dx, Ex = Ex) LT2 <- LifeTable(x, mx = LT1$lt$mx) LT3 <- LifeTable(x, qx = LT1$lt$qx) LT4 <- LifeTable(x, lx = LT1$lt$lx) LT5 <- LifeTable(x, dx = LT1$lt$dx) LT1 LT5 ls(LT5) # Example 2 --- Compute multiple life tables at once --- LTs = LifeTable(x, mx = ahmd$mx) LTs # A warning is printed if the input contains missing values. # Some of the missing values can be handled by the function. # Example 3 --- Abridged life table ------------ x <- c(0, 1, seq(5, 110, by = 5)) mx <- c(.053, .005, .001, .0012, .0018, .002, .003, .004, .004, .005, .006, .0093, .0129, .019, .031, .049, .084, .129, .180, .2354, .3085, .390, .478, .551) LT6 <- LifeTable(x, mx = mx, sex = "female") LT6 # Example 4 --- Abridged life table w using my own 'ax' ------------ # In this examples we are using the ages (x) and death rates (mx) from # example 3. Note that 'ax' must have the same length as the 'x' vector # otherwise an error message will be returned. my_ax <- c(0.1, 1.5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1) LT7 <- LifeTable(x = x, mx = mx, ax = my_ax)
# Example 1 --- Full life tables with different inputs --- y <- 1900 x <- as.numeric(rownames(ahmd$mx)) Dx <- ahmd$Dx[, paste(y)] Ex <- ahmd$Ex[, paste(y)] LT1 <- LifeTable(x, Dx = Dx, Ex = Ex) LT2 <- LifeTable(x, mx = LT1$lt$mx) LT3 <- LifeTable(x, qx = LT1$lt$qx) LT4 <- LifeTable(x, lx = LT1$lt$lx) LT5 <- LifeTable(x, dx = LT1$lt$dx) LT1 LT5 ls(LT5) # Example 2 --- Compute multiple life tables at once --- LTs = LifeTable(x, mx = ahmd$mx) LTs # A warning is printed if the input contains missing values. # Some of the missing values can be handled by the function. # Example 3 --- Abridged life table ------------ x <- c(0, 1, seq(5, 110, by = 5)) mx <- c(.053, .005, .001, .0012, .0018, .002, .003, .004, .004, .005, .006, .0093, .0129, .019, .031, .049, .084, .129, .180, .2354, .3085, .390, .478, .551) LT6 <- LifeTable(x, mx = mx, sex = "female") LT6 # Example 4 --- Abridged life table w using my own 'ax' ------------ # In this examples we are using the ages (x) and death rates (mx) from # example 3. Note that 'ax' must have the same length as the 'x' vector # otherwise an error message will be returned. my_ax <- c(0.1, 1.5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1) LT7 <- LifeTable(x = x, mx = mx, ax = my_ax)
Fit parametric mortality models given a set of input data which can be
represented by death counts and mid-interval population estimates
(Dx, Ex)
or age-specific death rates (mx)
or death
probabilities (qx)
. Using the argument law
one can specify
the model to be fitted. So far more than 27 parametric models have been
implemented; check the availableLaws
function to learn
about the available options. The models can be fitted under
the maximum likelihood methodology or by selecting a loss function to be
optimised. See the implemented loss function by running the
availableLF
function.
MortalityLaw(x, Dx = NULL, Ex = NULL, mx = NULL, qx = NULL, law = NULL, opt.method = "LF2", parS = NULL, fit.this.x = x, custom.law = NULL, show = FALSE, ...)
MortalityLaw(x, Dx = NULL, Ex = NULL, mx = NULL, qx = NULL, law = NULL, opt.method = "LF2", parS = NULL, fit.this.x = x, custom.law = NULL, show = FALSE, ...)
x |
Vector of ages at the beginning of the age interval. |
Dx |
Object containing death counts. An element of the |
Ex |
Exposure in the period. |
mx |
Life table death rate in age interval [x, x+n). |
qx |
Probability of dying in age interval [x, x+n). |
law |
The name of the mortality law/model to be used. e.g.
|
opt.method |
How would you like to find the parameters? Specify the
function to be optimize. Available options: the Poisson likelihood function
|
parS |
Starting parameters used in the optimization process (optional). |
fit.this.x |
Select the ages to be considered in model fitting.
By default |
custom.law |
Allows you to fit a model that is not defined in the package. Accepts as input a function. |
show |
Choose whether to display a progress bar during the fitting
process. Logical. Default: |
... |
Arguments to be passed to or from other methods. |
Depending on the complexity of the model, one of following optimization strategies is employed:
Nelder-Mead method: approximates a local optimum of a problem with n
variables when the objective function varies smoothly and is unimodal.
For details see optim
;
PORT routines: provides unconstrained optimization and optimization
subject to box constraints for complicated functions. For details check
nlminb
;
Levenberg-Marquardt algorithm: damped least-squares method.
For details check nls.lm
.
The output is of the "MortalityLaw"
class with the components:
input |
List with arguments provided in input. Saved for convenience. |
info |
Brief information about the model. |
coefficients |
Estimated coefficients. |
fitted.values |
Fitted values of the selected model. |
residuals |
Deviance residuals. |
goodness.of.fit |
List containing goodness of fit measures like AIC, BIC and log-Likelihood. |
opt.diagnosis |
Resultant optimization object useful for checking the convergence etc. |
Marius D. Pascariu
availableLaws
availableLF
LifeTable
ReadHMD
# Example 1: -------------------------- # Fit Makeham Model for Year of 1950. x <- 45:75 Dx <- ahmd$Dx[paste(x), "1950"] Ex <- ahmd$Ex[paste(x), "1950"] M1 <- MortalityLaw(x = x, Dx = Dx, Ex = Ex, law = 'makeham') M1 ls(M1) coef(M1) summary(M1) fitted(M1) predict(M1, x = 45:95) plot(M1) # Example 2: -------------------------- # We can fit the same model using a different data format # and a different optimization method. x <- 45:75 mx <- ahmd$mx[paste(x), ] M2 <- MortalityLaw(x = x, mx = mx, law = 'makeham', opt.method = 'LF1') M2 fitted(M2) predict(M2, x = 55:90) # Example 3: -------------------------- # Now let's fit a mortality law that is not defined # in the package, say a reparameterized Gompertz in # terms of modal age at death # hx = b*exp(b*(x-m)) (here b and m are the parameters to be estimated) # A function with 'x' and 'par' as input has to be defined, which returns # at least an object called 'hx' (hazard rate). my_gompertz <- function(x, par = c(b = 0.13, M = 45)){ hx <- with(as.list(par), b*exp(b*(x - M)) ) return(as.list(environment())) } M3 <- MortalityLaw(x = x, Dx = Dx, Ex = Ex, custom.law = my_gompertz) summary(M3) # predict M3 for different ages predict(M3, x = 85:130) # Example 4: -------------------------- # Fit Heligman-Pollard model for a single # year in the dataset between age 0 and 100 and build a life table. x <- 0:100 mx <- ahmd$mx[paste(x), "1950"] # select data M4 <- MortalityLaw(x = x, mx = mx, law = 'HP', opt.method = 'LF2') M4 plot(M4) LifeTable(x = x, qx = fitted(M4))
# Example 1: -------------------------- # Fit Makeham Model for Year of 1950. x <- 45:75 Dx <- ahmd$Dx[paste(x), "1950"] Ex <- ahmd$Ex[paste(x), "1950"] M1 <- MortalityLaw(x = x, Dx = Dx, Ex = Ex, law = 'makeham') M1 ls(M1) coef(M1) summary(M1) fitted(M1) predict(M1, x = 45:95) plot(M1) # Example 2: -------------------------- # We can fit the same model using a different data format # and a different optimization method. x <- 45:75 mx <- ahmd$mx[paste(x), ] M2 <- MortalityLaw(x = x, mx = mx, law = 'makeham', opt.method = 'LF1') M2 fitted(M2) predict(M2, x = 55:90) # Example 3: -------------------------- # Now let's fit a mortality law that is not defined # in the package, say a reparameterized Gompertz in # terms of modal age at death # hx = b*exp(b*(x-m)) (here b and m are the parameters to be estimated) # A function with 'x' and 'par' as input has to be defined, which returns # at least an object called 'hx' (hazard rate). my_gompertz <- function(x, par = c(b = 0.13, M = 45)){ hx <- with(as.list(par), b*exp(b*(x - M)) ) return(as.list(environment())) } M3 <- MortalityLaw(x = x, Dx = Dx, Ex = Ex, custom.law = my_gompertz) summary(M3) # predict M3 for different ages predict(M3, x = 85:130) # Example 4: -------------------------- # Fit Heligman-Pollard model for a single # year in the dataset between age 0 and 100 and build a life table. x <- 0:100 mx <- ahmd$mx[paste(x), "1950"] # select data M4 <- MortalityLaw(x = x, mx = mx, law = 'HP', opt.method = 'LF2') M4 plot(M4) LifeTable(x = x, qx = fitted(M4))
Fit the most popular human mortality 'laws', and construct full and abridge life tables given various input indices. A mortality law is a parametric function that describes the dying-out process of individuals in a population during a significant portion of their life spans. For a comprehensive review of the most important mortality laws see Tabeau (2001) doi:10.1007/0-306-47562-6_1. Practical functions for downloading data from various human mortality databases are provided as well.
To learn more about the package, start with the vignettes:
browseVignettes(package = "MortalityLaws")
Maintainer: Marius D. Pascariu [email protected] (ORCID) [copyright holder]
Other contributors:
Vladimir Canudas-Romo [contributor]
Useful links:
Report bugs at https://github.com/mpascariu/MortalityLaws/issues
Plot Function for MortalityLaw
## S3 method for class 'MortalityLaw' plot(x, ...)
## S3 method for class 'MortalityLaw' plot(x, ...)
x |
An object of class MortalityLaw |
... |
Arguments to be passed to methods, such as graphical
parameters (see |
generate a plot
Marius D. Pascariu
# See complete example in MortalityLaw help page
# See complete example in MortalityLaw help page
Predict function for MortalityLaw
## S3 method for class 'MortalityLaw' predict(object, x, ...)
## S3 method for class 'MortalityLaw' predict(object, x, ...)
object |
An object of class |
x |
Vector of ages to be considered in prediction |
... |
Additional arguments affecting the predictions produced. |
A vector of predicted hazard rates
Marius D. Pascariu
# Extrapolate old-age mortality with the Kannisto model # Fit ages 80-94 and extrapolate up to 120. Mx <- ahmd$mx[paste(80:94), "1950"] M1 <- MortalityLaw(x = 80:94, mx = Mx, law = 'kannisto') fitted(M1) predict(M1, x = 80:120) # See more examples in MortalityLaw function help page.
# Extrapolate old-age mortality with the Kannisto model # Fit ages 80-94 and extrapolate up to 120. Mx <- ahmd$mx[paste(80:94), "1950"] M1 <- MortalityLaw(x = 80:94, mx = Mx, law = 'kannisto') fitted(M1) predict(M1, x = 80:120) # See more examples in MortalityLaw function help page.
Download detailed mortality and population data for different provinces and territories in Australia, in a single object from the Australian Human Mortality Database.
ReadAHMD(what, regions = NULL, interval = "1x1", save = FALSE, show = TRUE)
ReadAHMD(what, regions = NULL, interval = "1x1", save = FALSE, show = TRUE)
what |
What type of data are you looking for? The following options might be available for some or all the countries and regions:
|
regions |
Specify the region specific data you want to download by adding the AHMD region code/s. Options:
|
interval |
Datasets are given in various age and time formats based on which the records are agregated. Interval options:
|
save |
Do you want to save a copy of the dataset on your local machine?
Logical. Default: |
show |
Choose whether to display a progress bar. Logical.
Default: |
(Description taken from the AHMD website).
The Australian Human Mortality Database (AHMD) was created to provide detailed Australian mortality and population data to researchers, students, journalists, policy analysts, and others interested in the history of human longevity. The project is an achievement of the Mortality, Ageing & Health research team in the ANU School of Demography under the supervision of Associate Professor Vladimir Canudas-Romo, in collaboration with demographers at the Max Plank Institute for Demographic Research (Rostock, Germany) and the Department of Demography, University of California at Berkeley.
The AHMD is a "satellite" of the Human Mortality Database (HMD), an international database which currently holds detailed data for multiple countries or regions. Consequently, the AHMD's underlying methodology corresponds to the one used for the HMD.
The AHMD gathers all required data (deaths counts, births counts, population size, exposure-to-risk, death rates) to compute life tables for Australia, its states and its territories. One of the great advantages of the database is to include data that is validated and corrected, when required, and rendered comparable, if possible, for the period ranging from 1971 thru 2016. For comparison purposes, various life tables published by governmental organizations are also available for download in PDF format.
A ReadAHMD
object that contains:
input |
List with the input values; |
data |
Data downloaded from AHMD; |
download.date |
Time stamp; |
years |
Numerical vector with the years covered in the data; |
ages |
Numerical vector with ages covered in the data. |
Marius D. Pascariu
# Download demographic data for Australian Capital Territory and # Tasmania regions in 5x1 format # Death counts. We don't want to export data outside R. AHMD_Dx <- ReadAHMD(what = "Dx", regions = c('ACT', 'TAS'), interval = "5x1", save = FALSE) AHMD_Dx # Download life tables for female population in all the states and export data. LTF <- ReadAHMD(what = "LT_f", interval = "5x1", save = FALSE) LTF
# Download demographic data for Australian Capital Territory and # Tasmania regions in 5x1 format # Death counts. We don't want to export data outside R. AHMD_Dx <- ReadAHMD(what = "Dx", regions = c('ACT', 'TAS'), interval = "5x1", save = FALSE) AHMD_Dx # Download life tables for female population in all the states and export data. LTF <- ReadAHMD(what = "LT_f", interval = "5x1", save = FALSE) LTF
Download detailed mortality and population data for different provinces and territories in Canada, in a single object from the Canadian Human Mortality Database.
ReadCHMD(what, regions = NULL, interval = "1x1", save = FALSE, show = TRUE)
ReadCHMD(what, regions = NULL, interval = "1x1", save = FALSE, show = TRUE)
what |
What type of data are you looking for? The following options are available:
|
regions |
Specify the region specific data you want to download by adding the CHMD region code/s. Options:
|
interval |
Datasets are given in various age and time formats based on which the records are agregated. Interval options:
|
save |
Do you want to save a copy of the dataset on your local machine?
Logical. Default: |
show |
Choose whether to display a progress bar. Logical.
Default: |
(Description taken from the CHMD website).
The Canadian Human Mortality Database (CHMD) was created to provide detailed Canadian mortality and population data to researchers, students, journalists, policy analysts, and others interested in the history of human longevity. The project is an achievement of the Mortality and Longevity research team at the Department of Demography, Universite de Montreal, under the supervision of Professor Robert Bourbeau, in collaboration with demographers at the Max Plank Institute for Demographic Research (Rostock, Germany) and the Department of Demography, University of California at Berkeley. Nadine Ouellette, researcher at the Institut national d'etudes demographiques in Paris and member of the Mortality and Longevity research team at the Universite de Montreal, is in charge of computing all CHMD life tables and updating the CHMD web site.
The CHMD is a "satellite" of the Human Mortality Database (HMD), an international database which currently holds detailed data for multiple countries or regions. Consequently, the CHMD's underlying methodology corresponds to the one used for the HMD.
The CHMD gathers all required data (deaths counts, births counts, population size, exposure-to-risk, death rates) to compute life tables for Canada, its provinces and its territories. One of the great advantages of the database is to include data that is validated and corrected, when required, and rendered comparable, if possible, for the period ranging from 1921 thru 2011. For comparison purposes, various life tables published by governmental organizations are also available for download in PDF format.
A ReadCHMD
object that contains:
input |
List with the input values; |
data |
Data downloaded from CHMD; |
download.date |
Time stamp; |
years |
Numerical vector with the years covered in the data; |
ages |
Numerical vector with ages covered in the data. |
Marius D. Pascariu
# Download demographic data for Quebec and Saskatchewan regions in 1x1 format # Death counts. We don't want to export data outside R. CHMD_Dx <- ReadCHMD(what = "Dx", regions = c('QUE', 'SAS'), interval = "1x1", save = FALSE) # Download life tables for female population. To export data use save = TRUE. LTF <- ReadCHMD(what = "LT_f", regions = c('QUE', 'SAS'), interval = "1x1", save = FALSE)
# Download demographic data for Quebec and Saskatchewan regions in 1x1 format # Death counts. We don't want to export data outside R. CHMD_Dx <- ReadCHMD(what = "Dx", regions = c('QUE', 'SAS'), interval = "1x1", save = FALSE) # Download life tables for female population. To export data use save = TRUE. LTF <- ReadCHMD(what = "LT_f", regions = c('QUE', 'SAS'), interval = "1x1", save = FALSE)
Download detailed mortality and population data for different countries and regions in a single object from the Human Mortality Database.
ReadHMD( what, countries = NULL, interval = "1x1", username, password, save = FALSE, show = TRUE )
ReadHMD( what, countries = NULL, interval = "1x1", username, password, save = FALSE, show = TRUE )
what |
What type of data are you looking for? The following options might be available for some or all the countries and regions:
|
countries |
Specify the country data you want to download by adding the
HMD country code/s. Options:
|
interval |
Datasets are given in various age and time formats based on which the records are agregated. Interval options:
|
username |
Your HMD username. If you don't have one you can sign up for free on the Human Mortality Database website. |
password |
Your HMD password. |
save |
Do you want to save a copy of the dataset on your local machine?
Logical. Default: |
show |
Choose whether to display a progress bar. Logical.
Default: |
The Human Mortality Database (HMD) was created to provide detailed mortality and population data to researchers, students, journalists, policy analysts, and others interested in the history of human longevity. The project began as an outgrowth of earlier projects in the Department of Demography at the University of California, Berkeley, USA, and at the Max Planck Institute for Demographic Research in Rostock, Germany (see history). It is the work of two teams of researchers in the USA and Germany (see research teams), with the help of financial backers and scientific collaborators from around the world (see acknowledgements). The Center on the Economics and Development of Aging (CEDA) French Institute for Demographic Studies (INED) has also supported the further development of the database in recent years.
A ReadHMD
object that contains:
input |
List with the input values (except the password). |
data |
Data downloaded from HMD. |
download.date |
Time stamp. |
years |
Numerical vector with the years covered in the data. |
ages |
Numerical vector with ages covered in the data. |
Marius D. Pascariu
## Not run: # Download demographic data for 3 countries in 1x1 format age_int <- 1 # age interval: 1,5 year_int <- 1 # year interval: 1,5,10 interval <- paste0(age_int, "x", year_int) # --> 1x1 # And the 3 countries: Sweden Denmark and USA. We have to use the HMD codes cntr <- c('SWE', 'DNK', 'USA') # Download death counts. We don't want to export data outside R. HMD_Dx <- ReadHMD(what = "Dx", countries = cntr, interval = interval, username = "[email protected]", password = "password", save = FALSE) HMD_Dx # Download life tables for female population and export data. LTF <- ReadHMD(what = "LT_f", countries = cntr, interval = interval, username = "[email protected]", password = "password", save = TRUE) LTF ## End(Not run)
## Not run: # Download demographic data for 3 countries in 1x1 format age_int <- 1 # age interval: 1,5 year_int <- 1 # year interval: 1,5,10 interval <- paste0(age_int, "x", year_int) # --> 1x1 # And the 3 countries: Sweden Denmark and USA. We have to use the HMD codes cntr <- c('SWE', 'DNK', 'USA') # Download death counts. We don't want to export data outside R. HMD_Dx <- ReadHMD(what = "Dx", countries = cntr, interval = interval, username = "[email protected]", password = "password", save = FALSE) HMD_Dx # Download life tables for female population and export data. LTF <- ReadHMD(what = "LT_f", countries = cntr, interval = interval, username = "[email protected]", password = "password", save = TRUE) LTF ## End(Not run)
Download detailed mortality and population data of the 47 prefectures in Japan, in a single object. The source of data is the Japanese Mortality Database.
ReadJMD(what, regions = NULL, interval = "1x1", save = FALSE, show = TRUE)
ReadJMD(what, regions = NULL, interval = "1x1", save = FALSE, show = TRUE)
what |
What type of data are you looking for? The following options might be available for some or all the countries and regions:
|
regions |
Specify the region specific data you want to download by
adding the JMD region code/s. Options: |
interval |
Datasets are given in various age and time formats based on which the records are agregated. Interval options:
|
save |
Do you want to save a copy of the dataset on your local machine?
Logical. Default: |
show |
Choose whether to display a progress bar. Logical.
Default: |
(Description taken from the JMD website).
The Japanese Mortality Database is a comprehensively-reorganized mortality database that is optimized for mortality research and consistent with the Human Mortality Database. This database is provided as a part of the research project "Demographic research on the causes and the socio-economic consequence of longetivity extension in Japan" (2011-2013), "Demographic research on longevity extension, population aging, and their effects on the social security and socio-economic structures in Japan" (2014-2016), and "Comprehensive research from a demographic viewpoint on the longevity revolution" (2017-2019) at the National Institute of Population and Social Security Research.
The Japanese Mortality Database is designed to provide the life tables to all the people who are interested in Japanese mortality including domestic and foreign mortality researchers for the purpose of mortality research. Especially because we have structured it to conform with the HMD, our database is suitable for international comparison, we put emphasis on the compatibility with the HMD more than our country's particular characteristics. Therefore, the life tables by JMD do not necessarily exhibit the same values as ones by the official life tables prepared and released by the Statistics and Information Department, Minister's Secretariat, Ministry of Health, Labor and Welfare according to the different base population or the methods for estimating the tables. When doing things other than mortality research, if life table that statistically displays our country's mortality situation is necessary, please use the official life table that has been prepared by the Statistics and Information Department, Minister's Secretariat, Ministry of Health, Labor and Welfare.
At the present time, we offer the data for All Japan and by prefecture. The project team is studying the methodology for estimating life tables along with data preparation. Therefore, the data may be updated when a new methodology is adopted. Please refer to "Methods" for further information.
A ReadJMD
object that contains:
input |
List with the input values; |
data |
Data downloaded from JMD; |
download.date |
Time stamp; |
years |
Numerical vector with the years covered in the data; |
ages |
Numerical vector with ages covered in the data. |
Marius D. Pascariu
# Download demographic data for Fukushima and Tokyo regions in 1x1 format # Death counts. We don't want to export data outside R. JMD_Dx <- ReadJMD(what = "Dx", regions = c('Fukushima', 'Tokyo'), interval = "1x1", save = FALSE) JMD_Dx # Download life tables for female population in all the states and export data. LTF <- ReadJMD(what = "LT_f", interval = "5x5", save = FALSE) LTF
# Download demographic data for Fukushima and Tokyo regions in 1x1 format # Death counts. We don't want to export data outside R. JMD_Dx <- ReadJMD(what = "Dx", regions = c('Fukushima', 'Tokyo'), interval = "1x1", save = FALSE) JMD_Dx # Download life tables for female population in all the states and export data. LTF <- ReadJMD(what = "LT_f", interval = "5x5", save = FALSE) LTF