Smooth population counts in 5-year age groups.

smooth_age_5_strong(Value, Age, OAG = TRUE, ageMin = 10, ageMax = 65)



numeric vector of counts in single, abridged, or 5-year age groups.


numeric vector of ages corresponding to the lower integer bound of the counts.


logical. Whether or not the top age group is open. Default TRUE.


integer. The lowest age included included in intermediate adjustment. Default 10.


integer. The highest age class included in intermediate adjustment. Default 65.


numeric vector of smoothed counts in 5-year age groups.


The open age group is aggregated down to be evenly divisible by 10. This method accounts for the youngest and oldest age groups. Age classes must be cleanly groupable to 5-year age groups. All age classes are returned, but the strongest adjustment occurs in ages bounded by ageMin and ageMax. To be clear ageMax refers to the lower bound of the highest age class, inclusive. So, if you want a ceiling of 70 (default), specify 65. Counts are not constrained within this range, but the youngest 10-year age group and penultimate 10-year age group are perturbed but constrained to their original totals. The oldest 10-year age group is unaffected.


Carrier NH, Farrag AM (1959). “The reduction of errors in census populations for statistically underdeveloped countries.” Population Studies, 12(3), 240--285.


Ages <- seq(0, 80, by = 5) strongtest <- c(646617,511270,386889,317345,273736,240058,218645,188297, 153931, 124347,93254,71858,53594,39721,27887,18092,34729 ) strong_result <- smooth_age_5_strong(pop5m_pasex,Ages,TRUE) # differences due to intermediate rounding in spreadsheet (bad practice IMO) all(abs(strong_result - strongtest) < 1, na.rm = TRUE)
#> [1] TRUE
if (FALSE) { plot(Ages, pop5m_pasex) lines(as.integer(names(strong_result)),strong_result) }