Given vectors for Deaths and Exposures, or Mx, or qx, or lx, calculate a full abridged lifetable.

  Deaths = NULL,
  Exposures = NULL,
  nMx = NULL,
  nqx = NULL,
  lx = NULL,
  AgeInt = age2int(Age = Age, OAvalue = 5),
  radix = 1e+05,
  axmethod = "pas",
  a0rule = "ak",
  Sex = "m",
  IMR = NA,
  region = "w",
  mod = TRUE,
  SRB = 1.05,
  OAnew = max(Age),
  extrapLaw = NULL,
  extrapFrom = max(Age),
  extrapFit = NULL,



numeric. Vector of death counts in abridged age classes.


numeric. Vector of population exposures in abridged age classes.


numeric. Vector of mortality rates in abridged age classes.


numeric. Vector of conditional death probabilities in abridged age classes.


numeric. Vector of lifetable survivorship at abridged ages.


integer. A vector of ages of the lower integer bound of the age classes.


integer. Vector of age class widths. Default inferAgeIntAbr(Age = Age).


numeric. Lifetable radix, l0. Default 100000.


character. Either "pas" or "un".


character. Either "ak" (default) or "cd".


character. Either male "m", female "f", or both "b".


numeric. Infant mortality rate q0, in case available and nqx is not specified. Default NA.


character. North, East, South, or West: code"n", code"e", code"s", code"w". Default code"w".


logical. If "un" specified for axmethod, whether or not to use Nan Li's modification for ages 5-14. Default TRUE.


the sex ratio at birth (boys / girls), default 1.05


logical. Whether or not the last element of nMx (or nqx or lx) is an open age group. Default TRUE.


integer. Desired open age group (5-year ages only). Default max(Age). If higher then rates are extrapolated.


character. If extrapolating, which parametric mortality law should be invoked? Options include "Kannisto", "Kannisto_Makeham", "Makeham", "Gompertz", "GGompertz", "Beard", "Beard_Makeham", "Quadratic". Default "Kannisto" if the highest age is at least 90, otherwise "makeham". See details.


integer. Age from which to impute extrapolated mortality.


integer vector. Ages to include in model fitting. Defaults to all ages > =60.


Other arguments to be passed on to the MortalityLaw function.


Lifetable in data.frame with columns

  • Ageinteger. Lower bound of abridged age class,

  • AgeIntinteger. Age class widths.

  • nMxnumeric. Age-specific central death rates.

  • nAxnumeric. Average time spent in interval by those deceased in interval.

  • nqxnumeric. Age-specific conditional death probabilities.

  • lxnumeric. Lifetable survivorship

  • ndxnumeric. Lifetable deaths distribution.

  • nLxnumeric. Lifetable exposure.

  • Sxnumeric. Survivor ratios in uniform 5-year age groups.

  • Txnumeric. Lifetable total years left to live above age x.

  • exnumeric. Age-specific remaining life expectancy.


The main variations here are in the treatment of nAx. In all cases, the lifetable is extended and closed out using one from a selection of mortality age extrapolation methods implemented in the MortalityLaws package rather than the common practice of taking the inverse of the final nMx value (if it's an open interval). For this, a desired open age must be specified, defaulting to the present open age group, but which can not exceed 110 in the present implementation. By default, the extrapolation model is fit to ages 60 and higher, but you can control this using the extrapFit argument (give the vector of ages, which must be a subset of Age). By default extrapolated values are used starting with the input open age, but you can lower this age using the extrapFrom argument. The Sx output column (survivor ratios) is aligned with the other columns in all 5-year age groups, but note the first two values have a slightly different age-interval interpretation: In Age 0, the interpretation is survival from birth until interval 0-4. In Age 1, it is survival from 0-4 into 5-9. Thereafter the age groups align. This column is required for population projections.


Greville TN (1977). “Short methods of constructing abridged life tables.” In Mathematical Demography, 53--60. Springer. United Nations (1982). Model Life Tables for Developing Countries. United Nations Department of International Economic and Social Affairs. Arriaga EE, Johnson PD, Jamison E (1994). Population analysis with microcomputers, volume 1. Bureau of the Census. United Nations (1988). Mortpak- The United Nations Software Package for Mortality Measurement. United Nations Department of International Economic and Social Affairs. United States Census Bureau (2017). “Population Analysis System (PAS) Software.”,


# trial code from PAS LTPOPDTH, North, Males, IMR = .1 Exposures <- c(100958,466275,624134,559559,446736,370653,301862,249409, 247473,223014,172260,149338,127242,105715,79614,53660, 31021,16805,8000,4000,2000,1000) Deaths <- c(8674,1592,618,411,755,1098,1100,1357, 1335,3257,2200,4023,2167,4578,2956,4212, 2887,2351,1500,900,500,300) # lower age bounds Age <- c(0, 1, seq(5, 100, by = 5)) AgeInt <- c(diff(Age), NA) PASLT <- lt_abridged(Deaths = Deaths, Exposures = Exposures, Age = Age, AgeInt =AgeInt, axmethod = "pas", IMR = .1, region = "n", Sex = "m", a0rule ="cd") # examples based on UN 1982 (p. 34) Mx <- c(.23669,.04672,.00982,.00511,.00697,.01036,.01169, .01332,.01528,.01757,.02092,.02517,.03225,.04241,.06056, .08574,.11840,.16226,.23745) excheckUN <- c(35.000,42.901,47.190,44.438, 40.523,36.868,33.691,30.567,27.500,24.485,21.504,18.599, 15.758,13.080,10.584,8.466,6.729,5.312,4.211) AgeInt <- inferAgeIntAbr(vec = Mx) # generate two variants: with and without PG's variants # for ages 5-14 UNLT1 <- lt_abridged(nMx = Mx, Age = c(0,1,seq(5,85,by=5)), AgeInt = AgeInt, axmethod = "un", Sex = "m", mod = FALSE) UNLT2 <- lt_abridged(nMx = Mx, Age = c(0,1,seq(5,85,by=5)), AgeInt = AgeInt, axmethod = "un", Sex = "m", mod = TRUE) # \dontrun{ # plot(UNLT2$ex - UNLT1$ex) # } # a Mortpak unit test: # data from p. 82 United Nations (1988) Mortpak - ... MPnMx <- c(0.12846,0.02477,0.00603,0.0034, 0.00417,0.00513,0.00581,0.00645,0.00725, 0.00813,0.00913,0.01199,0.01647, 0.0256,0.04047,0.06624,0.10638,0.19611) Age <- c(0,1,seq(5,80,by=5)) AgeInt <- age2int(Age,OAvalue = 5) MPexcheck <- c(49.997,55.675,57.245,53.921, 49.803,45.799,41.922,38.084,34.249, 30.420,26.578,22.701,18.945, 15.349,12.095,9.240,6.903,5.099) # First with lifetable extention to 100 MP_UNLT100 <- lt_abridged( nMx = MPnMx, Age = Age, AgeInt = AgeInt, axmethod = "un", Sex = "f", mod = FALSE, OAnew = 100, a0rule ="cd") #' #' # lifetable to original open age group MP_UNLT80 <- lt_abridged( nMx = MPnMx, Age = Age, AgeInt = AgeInt, axmethod = "un", Sex = "f", mod = FALSE, OAnew = 80, a0rule ="cd") # same, but truncated at 60 MP_UNLT60 <- lt_abridged( nMx = MPnMx, Age = Age, AgeInt = AgeInt, axmethod = "un", Sex = "f", mod = FALSE, OAnew = 60, a0rule ="cd")