Skip to contents

1 Abstract

A Divisia aggregate depends on two choices besides the data: the benchmark rate that prices the user costs, and the index formula. This vignette shows on the simulated data money_sim how much each matters, and when the Divisia aggregate and the simple sum part ways.

2 The benchmark rate

data(money_sim)
bench <- list(
    `largest component rate` = NULL
  , `bond yield (rb)`        = "rb"
  , `bond yield + 1 point`   = money_sim$rb + 1
  , `bond yield + 3 points`  = money_sim$rb + 3
  )
growth <-
  vapply(
      X         = bench
    , FUN       = function(b) {
        d <-
          dmai(
              .data     = money_sim
            , method    = "Barnett"
            , logbase   = NULL
            , date      = "Date"
            , x         = NULL
            , r         = NULL
            , user_cost = NULL
            , benchmark = b
            , percent   = TRUE
            , base      = 100
            , as_dt     = TRUE
            )
        100 * ((d$index[nrow(d)] / d$index[1L])^(12 / (nrow(d) - 1)) - 1)
      }
    , FUN.VALUE = numeric(length = 1)
    )
round(x = growth, digits = 2)
largest component rate        bond yield (rb)   bond yield + 1 point
                 10.21                  11.27                  11.50
 bond yield + 3 points
                 11.81 

With the largest component rate as the benchmark the aggregate grows 10.2% a year, against 11.3% with the bond yield. The component with the largest rate, the time deposits over one year, then has a user cost of zero at most dates and almost no weight, although it grows fastest. A benchmark above every component rate gives every component some weight; raising it further raises the weights of the interest-bearing deposits (their user costs rise proportionally more than that of currency), so the aggregate moves towards the simple sum.

w <- function(b) {
  u <-
    dmai_user_cost(
        .data     = money_sim
      , date      = "Date"
      , x         = NULL
      , r         = NULL
      , benchmark = b
      , percent   = TRUE
      )$components
  u[, .(share = mean(share)), by = component]
}
merge(w(NULL), w("rb"), by = "component", suffixes = c("_largest_rate", "_bond_yield"))
Key: <component>
   component share_largest_rate share_bond_yield
      <fctr>              <num>            <num>
1:        x1       2.805158e-01       0.22913505
2:        x2       2.501846e-01       0.20365800
3:        x3       3.224848e-01       0.30779144
4:        x4       5.656506e-02       0.07485756
5:        x5       3.116176e-02       0.05075692
6:        x6       2.595011e-02       0.06106372
7:        x7       4.671874e-05       0.04325079
8:        x8       3.309113e-02       0.02948652

3 The index formula

cmp <-
  dmai_compare(
      .data     = money_sim
    , methods   = c("Barnett", "Hancock", "Fisher", "SimpleSum", "CE")
    , logbase   = NULL
    , date      = "Date"
    , x         = NULL
    , r         = NULL
    , user_cost = NULL
    , benchmark = "rb"
    , percent   = TRUE
    , base      = 100
    )
cmp$summary
      method mean_growth annual_growth sd_growth last_index
      <fctr>       <num>         <num>     <num>      <num>
1:   Barnett   0.8896048      11.26589 0.5902133   838.2578
2:   Hancock   0.9043824      11.38584 0.5953797   856.4399
3:    Fisher   0.8895995      11.26582 0.5902227   838.2471
4: SimpleSum   1.0055352      12.82460 0.5725592  1105.8829
5:        CE   0.8347407      10.53576 2.6929846   735.2426
plot(
    x     = cmp
  , which = "growth"
  )

Divisia and Fisher differ by less than a thousandth of the index; the choice between superlative formulas hardly matters. The simple-sum aggregate grows about one and a half points a year faster. The currency equivalent index moves with the level of the rates: when the benchmark falls, the deposits count as more money-like and the index jumps.

4 When the simple sum misleads

The gap between the growth of the simple sum and of the Divisia aggregate comes from the components that grow faster or slower than the others. The Divisia second moment measures that spread:

fit <-
  dmai(
      .data     = money_sim
    , method    = c("Barnett", "Hancock", "Fisher", "SimpleSum", "CE")
    , logbase   = NULL
    , date      = "Date"
    , x         = NULL
    , r         = NULL
    , user_cost = NULL
    , benchmark = "rb"
    , percent   = TRUE
    , base      = 100
    , as_dt     = FALSE
    )
gap <- fit$simple_sum$growth - fit$index$DMAI
sd  <-
  dmai_moments(
      .data = fit
    )$moments$sd
cor(x = abs(gap), y = sd, use = "complete.obs")
[1] 0.3556961
d <- data.table::data.table(Date = fit$index$Date, gap = gap, sd = sd)[!is.na(gap)]
ggplot2::ggplot(data = d, mapping = ggplot2::aes(x = sd, y = abs(gap))) +
  ggplot2::geom_point(colour = "#1f4e9e", alpha = 0.6) +
  ggplot2::labs(x = "Divisia standard deviation of component growth (percent)",
                y = "|simple sum - Divisia growth| (points)") +
  dmai_theme(
      base_size       = 11
    , base_family     = "serif"
    , ticks_inward    = TRUE
    , legend_position = "bottom"
    )

The correlation is 0.36: months with a larger spread of component growth tend to be months in which the two aggregates disagree more, the diagnostic of Barnett and Serletis (1990). In these simulated data much of the gap is the steady trend difference between the components, which the spread of a single month does not capture.

5 References

Barnett, W. A. (1980). Economic monetary aggregates: an application of index number and aggregation theory. Journal of Econometrics, 14(1), 11–48.

Barnett, W. A. and Serletis, A. (1990). A dispersion-dependency diagnostic test for aggregation error: with applications to monetary economics and income distribution. Journal of Econometrics, 43(1–2), 5–34.

Rotemberg, J. J., Driscoll, J. C. and Poterba, J. M. (1995). Money, output, and prices: evidence from a new monetary aggregate. Journal of Business and Economic Statistics, 13(1), 67–83.