Skip to contents

GRP is a method which explicitly preserves the period-to-period growth rates of the preliminary series. It corresponds to the method of Cauley and Trager (1981), using the solution proposed by Di Fonzo and Marini (2011). BFGS is used as line-search algorithm for the reduced unconstrained minimization problem.

Usage

grp(
  s,
  t,
  conversion = c("Sum", "Average", "Last", "First", "UserDefined"),
  obsposition = 1,
  eps = 1e-12,
  iter = 500,
  dentoninitialization = TRUE
)

Arguments

s

Preliminary series. Mandatory. It must be a ts object.

t

Aggregation constraint. Mandatory. It must be a ts object.

conversion

Conversion rule. "Sum" by default.

obsposition

Position of the observation in the aggregated period (only used with "UserDefined" conversion)

eps

Numeric. Defines the convergence precision. BFGS algorithm is run until the reduction in the objective is within this eps value (1e-12 is the default) or until the maximum number of iterations is hit.

iter

Integer. Maximum number of iterations in BFGS algorithm (500 is the default).

dentoninitialization

indicate whether the series benchmarked via modified Denton PFD is used as starting values of the GRP optimization procedure (TRUE/FALSE, TRUE by default). If FALSE, the average benchmark is used for flow variables (e.g. t/4 for quarterly series with annual constraints and conversion = 'Sum'), or the benchmark for stock variables.

Value

The benchmarked series is returned

References

Causey, B., and Trager, M.L. (1981). Derivation of Solution to the Benchmarking Problem: Trend Revision. Unpublished research notes, U.S. Census Bureau, Washington D.C. Available as an appendix in Bozik and Otto (1988).

Di Fonzo, T., and Marini, M. (2011). A Newton's Method for Benchmarking Time Series according to a Growth Rates Preservation Principle. *IMF WP/11/179*.

Examples

data("qna_data")
Y <- ts(qna_data$B1G_Y_data[,"B1G_FF"], frequency=1, start=c(2009,1))
x <- rjd3bench::denton(t=Y, nfreq=4) + rnorm(n=length(Y)*4, mean=0, sd=10)
y_grp <- rjd3bench::grp(s=x, t=Y)