This implementation is based largely on the sparse verbal description given in Coale and Li (1991): calculate a two-stage 5-term moving average as a reference pattern, then take ratios with respect to this. Ratios for a given terminal digit can then be averaged to produce an index. This procedure was used in that paper for ages 65-100 for mortality rates. It is probably better suited to rates than counts, but that is not a hard rule.
check_heaping_coale_li( Value, Age, ageMin = 60, ageMax = max(Age), terms = 5, digit = 0 )
numeric. A vector of demographic counts by single age.
numeric. A vector of ages corresponding to the lower integer bound of the counts.
integer. The lowest age included in calculations. Default 25.
integer. The upper age bound used for calculations. Default 65.
integer. Length of the (centered) moving average be. Default 5.
integer. Any digit 0-9. Default 0.
The value of the index.
digit could also be a vector of digits, but the more digits one includes (excepting 0 and 5) the closer the index will get to 1.
It is therefore recommended for single digits, or else
ageMax is an inclusive upper bound, treated as interval.
If you want ages 20 to 89, then give
ageMin = 20 and
ageMax = 89, not 90. By default all available ages greater than or equal to
ageMin are used.
Coale AJ, Li S (1991). “The effect of age misreporting in China on the calculation of mortality rates at very high ages.” Demography, 28(2), 293--301.
Age <- 0:99 check_heaping_coale_li(pop1m_pasex, Age, 65, 95, 5, 0) # 3.7#>  3.707479check_heaping_coale_li(pop1m_pasex, Age, 65, 95, 5, 5) # 3.5 almost just as high#>  3.470823