View source: R/price_indexes.R
index_weights | R Documentation |
Calculate weights for a variety of different price indexes.
index_weights(
type = c("Carli", "Jevons", "Coggeshall", "Dutot", "Laspeyres", "HybridLaspeyres",
"LloydMoulton", "Palgrave", "Paasche", "HybridPaasche", "Drobisch", "Unnamed",
"Tornqvist", "Walsh1", "Walsh2", "MarshallEdgeworth", "GearyKhamis", "Vartia1",
"MontgomeryVartia", "Vartia2", "SatoVartia", "Theil", "Rao", "Lowe", "Young")
)
type |
The name of the index. See details for the possible types of indexes. |
The index_weights()
function returns a function to calculate weights
for a variety of price indexes. Weights for the following types of indexes
can be calculated.
Carli / Jevons / Coggeshall
Dutot
Laspeyres / Lloyd-Moulton
Hybrid Laspeyres (for use in a harmonic mean)
Paasche / Palgrave
Hybrid Paasche (for use in an arithmetic mean)
Törnqvist / Unnamed
Drobisch
Walsh-I (for an arithmetic Walsh index)
Walsh-II (for a geometric Walsh index)
Marshall-Edgeworth
Geary-Khamis
Montgomery-Vartia / Vartia-I
Sato-Vartia / Vartia-II
Theil
Rao
Lowe
Young
The weights need not sum to 1, as this normalization isn't always appropriate (i.e., for the Vartia-I weights).
A function of current and base period prices/quantities that calculates the relevant weights.
Naming for the indexes and weights generally follows the CPI manual (2020), Balk (2008), and Selvanathan and Rao (1994). In several cases two or more names correspond to the same weights (e.g., Paasche and Palgrave, or Sato-Vartia and Vartia-II). The calculations are given in the examples.
update_weights()
for price-updating weights.
quantity_index()
to remap the arguments in these functions for a
quantity index.
Other price-indexes:
geks()
,
price_indexes
p0 <- price6[[2]]
p1 <- price6[[3]]
q0 <- quantity6[[2]]
q1 <- quantity6[[3]]
pb <- price6[[1]]
qb <- quantity6[[1]]
#---- Making the weights for different indexes ----
# Explicit calculation for each of the different weights
# Carli/Jevons/Coggeshall
all.equal(index_weights("Carli")(p1), rep(1, length(p0)))
# Dutot
all.equal(index_weights("Dutot")(p0), p0)
# Laspeyres / Lloyd-Moulton
all.equal(index_weights("Laspeyres")(p0, q0), p0 * q0)
# Hybrid Laspeyres
all.equal(index_weights("HybridLaspeyres")(p1, q0), p1 * q0)
# Paasche / Palgrave
all.equal(index_weights("Paasche")(p1, q1), p1 * q1)
# Hybrid Paasche
all.equal(index_weights("HybridPaasche")(p0, q1), p0 * q1)
# Tornqvist / Unnamed
all.equal(
index_weights("Tornqvist")(p1, p0, q1, q0),
0.5 * p0 * q0 / sum(p0 * q0) + 0.5 * p1 * q1 / sum(p1 * q1)
)
# Drobisch
all.equal(
index_weights("Drobisch")(p1, p0, q1, q0),
0.5 * p0 * q0 / sum(p0 * q0) + 0.5 * p0 * q1 / sum(p0 * q1)
)
# Walsh-I
all.equal(
index_weights("Walsh1")(p0, q1, q0),
p0 * sqrt(q0 * q1)
)
# Marshall-Edgeworth
all.equal(
index_weights("MarshallEdgeworth")(p0, q1, q0),
p0 * (q0 + q1)
)
# Geary-Khamis
all.equal(
index_weights("GearyKhamis")(p0, q1, q0),
p0 / (1 / q0 + 1 / q1)
)
# Montgomery-Vartia / Vartia-I
all.equal(
index_weights("MontgomeryVartia")(p1, p0, q1, q0),
logmean(p0 * q0, p1 * q1) / logmean(sum(p0 * q0), sum(p1 * q1))
)
# Sato-Vartia / Vartia-II
all.equal(
index_weights("SatoVartia")(p1, p0, q1, q0),
logmean(p0 * q0 / sum(p0 * q0), p1 * q1 / sum(p1 * q1))
)
# Walsh-II
all.equal(
index_weights("Walsh2")(p1, p0, q1, q0),
sqrt(p0 * q0 * p1 * q1)
)
# Theil
all.equal(index_weights("Theil")(p1, p0, q1, q0), {
w0 <- scale_weights(p0 * q0)
w1 <- scale_weights(p1 * q1)
(w0 * w1 * (w0 + w1) / 2)^(1 / 3)
})
# Rao
all.equal(index_weights("Rao")(p1, p0, q1, q0), {
w0 <- scale_weights(p0 * q0)
w1 <- scale_weights(p1 * q1)
w0 * w1 / (w0 + w1)
})
# Lowe
all.equal(index_weights("Lowe")(p0, qb), p0 * qb)
# Young
all.equal(index_weights("Young")(pb, qb), pb * qb)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.