Abridged Life Table
Menu location: Analysis_Survival_Abridged Life Table
This function provides a current life table (actuarial table) that displays the survival experience of a given population in abridged form.
The table is constructed by the following definitions of Greenwood (1922) and Chiang (1984):
- where qi hat is the probability that an individual will die in the ith interval, ni is the length of the interval, Mi is the death rate in the interval (i.e. the number of individuals dying in the interval [Di] divided by the mid-year population [Pi], which is the number of years lived in the interval by those alive at the start of the interval, i.e. it is the person-time denominator for the rate), and ai is the fraction of the last age interval of life.
To explain ai: When a person dies at a certain age they have lived only a fraction of the interval in which their age at death sits, the average of all of these fractions of the interval for all people dying in the interval is called the fraction of the last age interval of life, ai. Infant deaths tend to occur early in the first year of life (which is the usual first age interval for abridged life tables). The ai value for this interval is around 0.1 in developed countries and higher where infant mortality rates are higher. The values for young childhood intervals are around 0.4 and for adult intervals are around 0.5. The proper values for ai can be calculated from the full death records. If the full records are not available then the WHO guidelines are to use the following ai values for the first interval given the following infant mortality rates:
| Infant mortality rate per 1000 | ai |
| < 20 | 0.09 |
| 20 - 40 | 0.15 |
| 40 - 60 | 0.23 |
| > 60 | 0.30 |
The rest of the calculations proceed using the following formulae on a theoretical standard starting population of 100,000 (the radix value) living at the start. In other words, we are constructing an artificial cohort of 100,000 and overlaying current mortality experience on them in order to work out life expectancies.
- where w is the number of intervals, di is the number out of the artificial cohort dying in the ith interval, li is the number out of the artificial cohort alive at the start of the interval, Li is the number of years lived in the interval by the artificial cohort, Ti is the total number of years lived by those individuals from the artificial cohort attaining the age that starts the interval, and ei is the observed expectation of life at the age that starts the interval.
Note that the value for the last interval length is not important, since this is calculated as an open interval as above. When preparing your data you will therefore have one less row in the interval column than in the columns for mid-year population in the interval and the deaths in the interval. The conventional interval pattern is:
| Interval length | Interval |
| 1 | 0 to 1 |
| 4 | 1 to 4 |
| 5 | 5 to 9 |
| 5 | 10 to 14 |
| 5 | 15 to 19 |
| 5 | 20 to 24 |
| 5 | 25 to 29 |
| 5 | 30 to 34 |
| 5 | 35 to 39 |
| 5 | 40 to 44 |
| 5 | 45 to 49 |
| 5 | 50 to 54 |
| 5 | 55 to 59 |
| 5 | 60 to 64 |
| 5 | 65 to 69 |
| 5 | 70 to 74 |
| 5 | 75 to 79 |
| 5 | 80 to 84 |
| 85 up |
- which is extended to 90 nowadays.
Standard errors and confidence intervals for q and e are calculated using the formulae given by Chiang (1984):
- where s squared e hat alpha is the variance of the expectation of life at the age of the start of the interval alpha, and s squared q hat i is the variance of the probability of death for the ith interval.
The variance of e does not include the sampling variation of the death rate in the open interval, so the Monte Carlo interval can be wider than the Chiang interval when few deaths fall in that interval.
If you want to test whether or not the probability of death in one age interval is statistically significantly different from another interval, or compare the probability of death in a given age interval from two different populations (e.g. male vs. female), then you can use the following formulae:
- where z is a standard normal test statistic and SE is the standard error of the difference between the two (ith vs. jth) probabilities of death that you are comparing.
Comparison of two expectation of life statistics can be made in a similar way to the above, but the standard error for the difference between two e statistics is simply the square root of the sum of the squared standard errors of the e statistics being compared.
Adjusting life expectancy for a given utility
You can specify a weighting variable for utility to be applied to each interval. This is used, for example in the calculation of health adjusted life expectancy (HALE) by assuming that there is more health utility (sometimes defined by absence of disability) in some periods of life than in others. Wolfson (1996) describes the principles of health adjusted life expectancy.
StatsDirect simply multiplies Ti (the total number of years lived by those individuals from the artificial cohort attaining the age that starts the interval) by the given ith utility weight, then divides as usual by li (the number out of the artificial cohort alive at the start of the interval) in order to compute adjusted life expectancy.
Data preparation
Prepare your data in four columns as follows:
-
Length of age interval (w-1 rows corresponding to w intervals as described above)
-
Mid-year population, or number of years lived in the interval by those alive at its start (w rows)
-
Deaths in interval (w rows)
-
Fraction (a) of last age interval of life (w-1 rows)
-
(Utility weight [optional], e.g. proportion of the interval of life spent without disability in a given population)
If the fraction 'a' is not provided then it is assumed to be 0.1 for the infant interval, 0.4 for the early childhood interval and 0.5 for all other intervals. You should endeavour to supply the best estimate of 'a' possible.
Example
From Chiang (1984, p141): The total population of California in 1970.
Test workbook (Survival worksheet: Interval, Population, Deaths, Fraction a).
Abridged life table
| Interval | Population | Deaths | Death rate |
| 0 to 1 | 340483 | 6234 | 0.018309 |
| 1 to 4 | 1302198 | 1049 | 0.000806 |
| 5 to 9 | 1918117 | 723 | 0.000377 |
| 10 to 14 | 1963681 | 735 | 0.000374 |
| 15 to 19 | 1817379 | 2054 | 0.00113 |
| 20 to 24 | 1740966 | 2702 | 0.001552 |
| 25 to 29 | 1457614 | 2071 | 0.001421 |
| 30 to 34 | 1219389 | 1964 | 0.001611 |
| 35 to 39 | 1149999 | 2588 | 0.00225 |
| 40 to 44 | 1208550 | 4114 | 0.003404 |
| 45 to 49 | 1245903 | 6722 | 0.005395 |
| 50 to 54 | 1083852 | 8948 | 0.008256 |
| 55 to 59 | 933244 | 11942 | 0.012796 |
| 60 to 64 | 770770 | 14309 | 0.018565 |
| 65 to 69 | 620805 | 17088 | 0.027526 |
| 70 to 74 | 484431 | 19149 | 0.039529 |
| 75 to 79 | 342097 | 21325 | 0.062336 |
| 80 to 84 | 210953 | 20129 | 0.095419 |
| 85 up | 142691 | 22483 | 0.157564 |
| Interval | Probability of dying [qx] | SE of qx | 95% CI for qx |
| 0 to 1 | 0.018009 | 0.000226 | 0.017566 to 0.018452 |
| 1 to 4 | 0.003216 | 0.000099 | 0.003022 to 0.00341 |
| 5 to 9 | 0.001883 | 0.00007 | 0.001746 to 0.00202 |
| 10 to 14 | 0.00187 | 0.000069 | 0.001735 to 0.002005 |
| 15 to 19 | 0.005638 | 0.000124 | 0.005395 to 0.005881 |
| 20 to 24 | 0.007729 | 0.000148 | 0.007439 to 0.00802 |
| 25 to 29 | 0.007079 | 0.000155 | 0.006776 to 0.007383 |
| 30 to 34 | 0.008022 | 0.00018 | 0.007669 to 0.008376 |
| 35 to 39 | 0.011193 | 0.000219 | 0.010764 to 0.011622 |
| 40 to 44 | 0.016888 | 0.000261 | 0.016376 to 0.0174 |
| 45 to 49 | 0.026639 | 0.000321 | 0.02601 to 0.027267 |
| 50 to 54 | 0.040493 | 0.000419 | 0.039671 to 0.041315 |
| 55 to 59 | 0.062075 | 0.00055 | 0.060997 to 0.063153 |
| 60 to 64 | 0.088863 | 0.000709 | 0.087474 to 0.090253 |
| 65 to 69 | 0.128933 | 0.000921 | 0.127129 to 0.130737 |
| 70 to 74 | 0.180519 | 0.001181 | 0.178204 to 0.182833 |
| 75 to 79 | 0.270386 | 0.001582 | 0.267286 to 0.273486 |
| 80 to 84 | 0.385206 | 0.002129 | 0.381034 to 0.389379 |
| 85 up | 1 | * | * to * |
| Interval | Living at start [lx] | Dying [dx] | Fraction of last interval of life [ax] |
| 0 to 1 | 100000 | 1801 | 0.09 |
| 1 to 4 | 98199 | 316 | 0.41 |
| 5 to 9 | 97883 | 184 | 0.44 |
| 10 to 14 | 97699 | 183 | 0.54 |
| 15 to 19 | 97516 | 550 | 0.59 |
| 20 to 24 | 96966 | 749 | 0.49 |
| 25 to 29 | 96217 | 681 | 0.51 |
| 30 to 34 | 95536 | 766 | 0.52 |
| 35 to 39 | 94769 | 1061 | 0.53 |
| 40 to 44 | 93709 | 1583 | 0.54 |
| 45 to 49 | 92126 | 2454 | 0.53 |
| 50 to 54 | 89672 | 3631 | 0.53 |
| 55 to 59 | 86041 | 5341 | 0.52 |
| 60 to 64 | 80700 | 7171 | 0.52 |
| 65 to 69 | 73529 | 9480 | 0.51 |
| 70 to 74 | 64048 | 11562 | 0.52 |
| 75 to 79 | 52486 | 14192 | 0.51 |
| 80 to 84 | 38295 | 14751 | 0.5 |
| 85 up | 23543 | 23543 | * |
| Interval | Years in interval [Lx] | Years beyond start of interval [Tx] |
| 0 to 1 | 98361 | 7195231 |
| 1 to 4 | 392051 | 7096870 |
| 5 to 9 | 488900 | 6704819 |
| 10 to 14 | 488075 | 6215919 |
| 15 to 19 | 486454 | 5727844 |
| 20 to 24 | 482921 | 5241390 |
| 25 to 29 | 479416 | 4758468 |
| 30 to 34 | 475840 | 4279052 |
| 35 to 39 | 471354 | 3803213 |
| 40 to 44 | 464903 | 3331858 |
| 45 to 49 | 454863 | 2866955 |
| 50 to 54 | 439827 | 2412091 |
| 55 to 59 | 417386 | 1972264 |
| 60 to 64 | 386289 | 1554878 |
| 65 to 69 | 344417 | 1168590 |
| 70 to 74 | 292493 | 824173 |
| 75 to 79 | 227663 | 531680 |
| 80 to 84 | 154596 | 304017 |
| 85 up | 149421 | 149421 |
| Interval | Expectation of life [ex] | SE of ex | 95% CI for ex |
| 0 to 1 | 71.952313 | 0.037362 | 71.879085 to 72.025541 |
| 1 to 4 | 72.270232 | 0.034115 | 72.203367 to 72.337097 |
| 5 to 9 | 68.498121 | 0.033492 | 68.432478 to 68.563764 |
| 10 to 14 | 63.623174 | 0.033231 | 63.558043 to 63.688305 |
| 15 to 19 | 58.737306 | 0.033025 | 58.672578 to 58.802034 |
| 20 to 24 | 54.053615 | 0.032466 | 53.989981 to 54.117248 |
| 25 to 29 | 49.45559 | 0.031785 | 49.393293 to 49.517888 |
| 30 to 34 | 44.790023 | 0.031151 | 44.728969 to 44.851077 |
| 35 to 39 | 40.131217 | 0.030436 | 40.071563 to 40.190871 |
| 40 to 44 | 35.555493 | 0.029616 | 35.497446 to 35.613539 |
| 45 to 49 | 31.119893 | 0.028788 | 31.06347 to 31.176317 |
| 50 to 54 | 26.899049 | 0.027963 | 26.844242 to 26.953856 |
| 55 to 59 | 22.922407 | 0.02697 | 22.869548 to 22.975266 |
| 60 to 64 | 19.267406 | 0.025794 | 19.216851 to 19.31796 |
| 65 to 69 | 15.892984 | 0.024469 | 15.845026 to 15.940942 |
| 70 to 74 | 12.867973 | 0.022957 | 12.822978 to 12.912969 |
| 75 to 79 | 10.129843 | 0.021419 | 10.087862 to 10.171824 |
| 80 to 84 | 7.938844 | 0.018833 | 7.901931 to 7.975756 |
| 85 up | 6.346617 | * | * to * |
Median expectation of life (age at which half of original cohort survives) = 75.876035
95% CI by Monte Carlo (20000) simulation = 75.799707 to 75.951499
Expectation of life at birth = 71.952313
95% CI by Chiang variance estimate = 71.879085 to 72.025541
95% CI by Monte Carlo (20000) simulation = 71.877782 to 72.027161
The Monte Carlo limits depend on the random numbers drawn, so they differ a little from one run to the next.
R code
This R code reproduces the example above; its Monte Carlo limits differ a little from run to run, as those of StatsDirect do. It needs no packages and was checked with R 4.6.1. Paste it into R, or save it as a script and run it.
# Abridged life table: the StatsDirect help example (Chiang 1984, p. 141, the total
# population of California in 1970; the test workbook's Survival worksheet columns
# Interval, Population, Deaths and Fraction a) in R
n <- c(1, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5) # lengths, last is open
P <- c(340483, 1302198, 1918117, 1963681, 1817379, 1740966, 1457614, 1219389,
1149999, 1208550, 1245903, 1083852, 933244, 770770, 620805, 484431, 342097,
210953, 142691)
D <- c(6234, 1049, 723, 735, 2054, 2702, 2071, 1964, 2588, 4114, 6722, 8948, 11942,
14309, 17088, 19149, 21325, 20129, 22483)
a <- c(0.09, 0.41, 0.44, 0.54, 0.59, 0.49, 0.51, 0.52, 0.53, 0.54, 0.53, 0.53, 0.52,
0.52, 0.51, 0.52, 0.51, 0.5)
w <- length(P) # the number of intervals, the last open
x <- c(0, cumsum(n)) # the age at the start of each interval
label <- c(paste(x[1], "to", x[2]), paste(x[2:(w - 1)], "to", x[3:w] - 1),
paste(x[w], "up"))
# Base R has no current life table function, so the table is built by the formulae
# above: the death rate M, the probability of dying q in each interval (1 in the
# open last interval), then a cohort of 100000 followed through the intervals
M <- D / P
q <- c(n * M[-w] / (1 + (1 - a) * n * M[-w]), 1)
l <- 100000 * cumprod(c(1, 1 - q[-w])) # living at the start of each interval
d <- l * q # dying in each interval
L <- c(n * (l[-w] - d[-w]) + a * n * d[-w], l[w] / M[w]) # years lived in interval
Tx <- rev(cumsum(rev(L))) # years lived beyond the start of interval
e <- Tx / l # expectation of life at the start
# Chiang's variances: of q from the deaths, of e by accumulating the variances of
# the survival proportions from the last closed interval back to the first
z <- qnorm(0.975)
vq <- q^2 * (1 - q) / D
b <- (1 - a) * n + e[-1]
ve <- rev(cumsum(rev(l[-w]^2 * b^2 * vq[-w]))) / l[-w]^2
six <- function(x) formatC(x, digits = 6, format = "f", drop0trailing = TRUE)
whole <- function(x) formatC(round(x), format = "d") # the cohort counts, as integers
ci <- function(est, se) paste(six(est - z * se), "to", six(est + z * se))
cat("Interval Population Deaths Death rate\n")
for (i in 1:w) cat(label[i], P[i], D[i], six(M[i]), "\n")
cat("Interval Probability of dying [qx] SE of qx 95% CI for qx\n")
for (i in 1:(w - 1)) cat(label[i], six(q[i]), six(sqrt(vq[i])), ci(q[i], sqrt(vq[i])),
"\n")
cat(label[w], q[w], "* * to *\n")
cat("Interval Living at start [lx] Dying [dx] Fraction of last interval of life",
"[ax]\n")
for (i in 1:(w - 1)) cat(label[i], whole(l[i]), whole(d[i]), six(a[i]), "\n")
cat(label[w], whole(l[w]), whole(d[w]), "*\n")
cat("Interval Years in interval [Lx] Years beyond start of interval [Tx]\n")
for (i in 1:w) cat(label[i], whole(L[i]), whole(Tx[i]), "\n")
cat("Interval Expectation of life [ex] SE of ex 95% CI for ex\n")
for (i in 1:(w - 1)) cat(label[i], six(e[i]), six(sqrt(ve[i])), ci(e[i], sqrt(ve[i])),
"\n")
cat(label[w], six(e[w]), "* * to *\n")
# The median: the age at which the cohort has fallen to 50000, by linear
# interpolation within the interval where that happens (75 to 79 here; if the
# cohort never falls that far the median lies beyond the start of the last interval)
i <- which(l <= 50000)[1]
med <- x[i - 1] + n[i - 1] * (l[i - 1] - 50000) / (l[i - 1] - l[i])
# Monte Carlo limits for the median and the expectation of life at birth: the
# deaths in each interval are drawn from a Poisson distribution with the observed
# count as its mean and the table is rebuilt (the same steps again, compactly)
# 20000 times; the limits are the 2.5th and 97.5th percentiles of the simulated
# values, so they vary a little between runs
lifetable <- function(D) {
M <- D / P
q <- c(n * M[-w] / (1 + (1 - a) * n * M[-w]), 1)
l <- 100000 * cumprod(c(1, 1 - q[-w]))
L <- c(n * (l[-w] - l[-w] * q[-w]) + a * n * l[-w] * q[-w], l[w] / M[w])
i <- which(l <= 50000)[1]
c(e0 = sum(L) / l[1], median = x[i - 1] + n[i - 1] * (l[i - 1] - 50000) /
(l[i - 1] - l[i]))
}
set.seed(1)
sim <- replicate(20000, lifetable(rpois(w, D)))
mc <- function(v) paste(six(quantile(v, 0.025)), "to", six(quantile(v, 0.975)))
cat("Median expectation of life (age at which half of original cohort survives) =",
six(med), "\n")
cat("95% CI by Monte Carlo (20000) simulation =", mc(sim["median", ]), "\n")
cat("Expectation of life at birth =", six(e[1]), "\n")
cat("95% CI by Chiang variance estimate =", ci(e[1], sqrt(ve[1])), "\n")
cat("95% CI by Monte Carlo (20000) simulation =", mc(sim["e0", ]), "\n")