smooth_age_5_zigzag_inner: G. Feeney's method of removing the zigzag from counts in...

View source: R/ZIGZAG.R

smooth_age_5_zigzag_innerR Documentation

G. Feeney's method of removing the zigzag from counts in 5-year age groups.

Description

If age heaping is much worse on 0's than on 5's then even counts in 5-year age bins can preserve a sawtooth pattern. Most graduation techniques translate the zig-zag/sawtooth pattern to a wave pattern. It is not typically desired. This method redistributes counts 'from' every second 5-year age group in a specified range 'to' the adjacent age groups. How much to redistribute depends on a detection of roughness in the 5-year binned data, which follows the formulas recommended by Feeney.

Usage

smooth_age_5_zigzag_inner(
  Value,
  Age,
  OAG = TRUE,
  ageMin = 40,
  ageMax = max(Age) - max(Age)%%10 - 5
)

Arguments

Value

numeric vector of (presumably) counts in 5-year age groups.

Age

integer vector of age group lower bounds.

OAG

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

ageMin

integer. Lower age bound to adjust values.

ageMax

integer. Upper age bound to adjust values.

Details

Determining the degree to redistribute population counts is an optimization problem, so this function has two auxiliary functions, p_zigzag(), which redistributes counts according to a set of specified proportions p, and zigzag_min() which is the function minimized to determine the optimal vector of p. If data is not in 5-year age groups then it is grouped as necessary (unless abridged, in which case grouping is preserved). Only ages >= ageMin and <= ageMax will be adjusted. ageMax is inclusive and interpreted as the lower bound of the highest age group to include. The number of 5-year age groups adjusted must be odd, and ageMax may be reduced internally without warning in order to force this condition. The open age group is excluded from adjustment. This function also has a wrapper smooth_age_5_zigzag(), called by smooth_age_5().

Value

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

References

Feeney, G. 2013 "Removing "Zigzag" from Age Data," http://demographer.com/white-papers/2013-removing-zigzag-from-age-data/

Examples

Age <- c(0,1,seq(5,90,by=5))
# defaults
zz1 <- smooth_age_5_zigzag_inner(dth5_zigzag, Age, OAG = TRUE, ageMin = 40, ageMax = 80)
# shift age range up by 5
zz2 <- smooth_age_5_zigzag_inner(dth5_zigzag, Age, OAG = TRUE, ageMin = 45, ageMax = 85)
## Not run: 
plot(Age, dth5_zigzag,pch = 16)
lines(Age,zz1,col="red",lty=1)
lines(Age,zz2,col="blue",lty=1)
# even smoother:
lines(Age,(zz2+zz1)/2,col="green",lty=1)
legend("bottom",pch=c(16,NA,NA,NA),
		lty=c(NA,1,1,1),
		col = c("black","red","blue","green"),
		legend = c("Original","40-80","45-85","avg"))

## End(Not run)

timriffe/DemoTools documentation built on Jan. 28, 2024, 5:13 a.m.