The UN a(x) formula uses Coale-Demeny for ages 0, and 1-4, values of 2.5 for ages 5-9 and 10-14, and the Greville formula thereafter. In the original sources these are referred to as separation factors.
lt_id_morq_a_greville( nMx, nqx, lx, Age, AgeInt = age2int(Age, OAvalue = 5), a0rule = "ak", IMR = NA, Sex = "m", region = "w", mod = TRUE, SRB = 1.05, closeout = TRUE, extrapLaw = "kannisto", extrapFrom = max(Age), extrapFit = Age[Age >= 60], ... )
nMx | numeric. Event exposure mortality rates. |
---|---|
nqx | numeric. Vector of age specific death probabilities in standard abridged age groups. |
lx | numeric. Vector of lifetable survivorship in standard abridged age groups. |
Age | integer. Vector of lower bounds of abridged age groups. |
AgeInt | integer. Vector of age group intervals. |
a0rule | character. Either |
IMR | numeric. Optional. q0, the death probability in first year of life, in case available separately. |
Sex | character. |
region | character. |
mod | logical. Whether or not to use Gerland's modification for ages 5-14. Default |
SRB | numeric. The sex ratio at birth (boys/girls), default 1.05. |
closeout | logical. Whether or not to estimate open age a(x) via extrapolation. Default |
extrapLaw | character. The following options are available:
|
extrapFrom | integer. Age from which to impute extrapolated mortality. |
extrapFit | integer vector. Ages to include in model fitting. Defaults to all ages |
... | Other arguments to be passed on to the
|
nax average contribution to exposure of those dying in the interval.
\(a(x)\) for age 0 and age group 1-4 are based on Coale-Demeny q0-based lookup tables. An approximation to get from M(0) to q0 for the sake of generating a(0) and 4a1 is used. The final a(x) value is closed out using the lt_a_closeout()
method (reciprocal and Mortpak methods are deprecated). Age groups must be standard abridged. No check on age groups is done.
There are different vectors one can specify for this method: ultimately it's either nMx
or nqx
, and the nax
, but nax
results should be reasonably close. For full convergence implying transitivity, instead use lt_a_un()
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.
#Example witn Mexican data from UN nMx <- c(0.11621,0.02268,0.00409,0.00212,0.00295,0.00418,0.00509,0.00609, 0.00714,0.00808,0.00971,0.0125,0.0175,0.02551,0.03809,0.05595,0.08098, 0.15353,0.2557) nqx <- c(0.10793,0.08554,0.02025,0.01053,0.01463,0.02071,0.02515,0.02999, 0.03507, 0.03958,0.04742,0.0606,0.08381,0.11992,0.17391,0.2454,0.33672, 0.54723,NA) lx <- c(100000,89207,81577,79924,79083,77925,76312,74393,72162,69631,66875, 63704,59843,54828,48253,39861,30079,19951,9033) Age <- c(0,1,seq(5,85,by = 5)) AgeInt <- age2int(Age, OAvalue = 5) # two quite different results depending whether you start with mx or qx lt_id_morq_a_greville(nMx = nMx, Age = Age, AgeInt = AgeInt, Sex = 'f', region = 'w')#> [1] 0.314110 1.361000 1.971728 2.427513 2.635291 2.604932 2.567799 2.557820 #> [9] 2.544030 2.547217 2.570674 2.596676 2.612155 2.608886 2.584268 2.540573 #> [17] 2.541591 2.419688 3.537193lt_id_morq_a_greville(nqx = nqx, Age = Age, AgeInt = AgeInt, Sex = 'f', region = 'w')#> [1] 0.314100 1.361000 1.998436 2.410337 2.610435 2.569726 2.524739 2.506789 #> [9] 2.484742 2.480395 2.489952 2.492398 2.467590 2.402247 2.286868 2.126399 #> [17] 1.829551 1.480824 1.560036# same, qx comes from lx (Except OAG, because qx closed above w NA) lt_id_morq_a_greville(lx = lx, Age = Age, AgeInt = AgeInt, Sex = 'f', region = 'w')#> [1] 0.314100 1.361000 1.998275 2.410401 2.610450 2.569538 2.524848 2.506840 #> [9] 2.484738 2.480358 2.489988 2.492376 2.467577 2.402272 2.286855 2.126381 #> [17] 1.829564 1.480808 1.384313# both qx and lx given, but lx not used for anything = same as qx lt_id_morq_a_greville(nqx = nqx, lx = lx, Age = Age, AgeInt = AgeInt, Sex = 'f', region = 'w')#> [1] 0.314100 1.361000 1.998436 2.410337 2.610435 2.569726 2.524739 2.506789 #> [9] 2.484742 2.480395 2.489952 2.492398 2.467590 2.402247 2.286868 2.126399 #> [17] 1.829551 1.480824 1.560036#' # nMx taken over lx. lt_id_morq_a_greville(nMx = nMx, lx = lx, Sex = 'f', Age = Age, AgeInt = AgeInt, region = 'w')#> [1] 0.314110 1.361000 1.971728 2.427513 2.635291 2.604932 2.567799 2.557820 #> [9] 2.544030 2.547217 2.570674 2.596676 2.612155 2.608886 2.584268 2.540573 #> [17] 2.541591 2.419688 3.537193# example of transitivity. UN ax method is iterative # and used greville on the inside nMx <- c(0.11621,0.02268,0.00409,0.00212,0.00295, 0.00418,0.00509,0.00609,0.00714,0.00808, 0.00971,0.0125,0.0175,0.02551,0.03809, 0.05595,0.0809,0.15353,0.2557) AgeInt <- inferAgeIntAbr(vec = nMx) Age <- int2age(AgeInt) nAx1 <- lt_a_un(nMx, Age = Age, AgeInt = AgeInt, a0rule = "ak", mod = TRUE, closeout = TRUE) nqx <- lt_id_ma_q(nMx = nMx, nax = nAx1, AgeInt = AgeInt, closeout = FALSE) nAx2 <- lt_a_un(nqx = nqx, Age = Age, AgeInt = AgeInt, a0rule = "ak", mod= TRUE, closeout = TRUE) stopifnot(all(abs(nAx1[Age<75] - nAx2[Age<75]) < 1e-7))