View source: R/contributions.R
contributions | R Documentation |
Calculate additive percent-change contributions for generalized-mean price indexes, and indexes that nest two levels of generalized means consisting of an outer generalized mean and two inner generalized means (e.g., the Fisher index).
contributions(r)
arithmetic_contributions(x, w = NULL)
geometric_contributions(x, w = NULL)
harmonic_contributions(x, w = NULL)
nested_contributions(r1, r2, t = c(1, 1))
nested_contributions2(r1, r2, t = c(1, 1))
fisher_contributions(x, w1 = NULL, w2 = NULL)
fisher_contributions2(x, w1 = NULL, w2 = NULL)
r |
A finite number giving the order of the generalized mean. |
x |
A strictly positive numeric vector. |
w , w1 , w2 |
A strictly positive numeric vector of weights, the same length
as |
r1 |
A finite number giving the order of the outer generalized mean. |
r2 |
A pair of finite numbers giving the order of the inner generalized means. |
t |
A pair of strictly positive weights for the inner generalized means. The default is equal weights. |
The function contributions()
is a simple wrapper for
transmute_weights(r, 1)()
to calculate
(additive) percent-change contributions for a price index based on a
generalized mean of order r
. It returns a function to compute a
vector v(x, w)
such that
generalized_mean(r)(x, w) - 1 == sum(v(x, w))
The arithmetic_contributions()
, geometric_contributions()
and
harmonic_contributions()
functions cover the most important cases
(i.e., r = 1
, r = 0
, and r = -1
).
The nested_contributions()
and nested_contributions2()
functions are the analog of contributions()
for an index based on a
nested generalized mean with two levels, like a Fisher index. They are
wrappers around nested_transmute()
and nested_transmute2()
, respectively.
The fisher_contributions()
and fisher_contributions2()
functions correspond to nested_contributions(0, c(1, -1))()
and
nested_contributions2(0, c(1, -1))()
, and are appropriate for
calculating percent-change contributions for a Fisher index.
contributions()
returns a function:
function(x, w = NULL){...}
nested_contributions()
and nested_contributions2()
return a
function:
function(x, w1 = NULL, w2 = NULL){...}
arithmetic_contributions()
, geometric_contributions()
,
harmonic_contributions()
, fisher_contributions()
, and
fisher_contributions2()
each return a numeric vector, the same
length as x
.
Balk, B. M. (2008). Price and Quantity Index Numbers. Cambridge University Press.
Hallerbach, W. G. (2005). An alternative decomposition of the Fisher index. Economics Letters, 86(2):147–152
Reinsdorf, M. B., Diewert, W. E., and Ehemann, C. (2002). Additive decompositions for Fisher, Törnqvist and geometric mean indexes. Journal of Economic and Social Measurement, 28(1-2):51–61.
transmute_weights()
for the underlying implementation.
p2 <- price6[[2]]
p1 <- price6[[1]]
q2 <- quantity6[[2]]
q1 <- quantity6[[1]]
# Percent-change contributions for the Jevons index.
geometric_mean(p2 / p1) - 1
geometric_contributions(p2 / p1)
all.equal(
geometric_mean(p2 / p1) - 1,
sum(geometric_contributions(p2 / p1))
)
# Percent-change contributions for the Fisher index in section 6 of
# Reinsdorf et al. (2002).
(con <- fisher_contributions(p2 / p1, p1 * q1, p2 * q2))
all.equal(sum(con), fisher_index(p2, p1, q2, q1) - 1)
# Not the only way.
(con2 <- fisher_contributions2(p2 / p1, p1 * q1, p2 * q2))
all.equal(sum(con2), fisher_index(p2, p1, q2, q1) - 1)
# The same as the van IJzeren decomposition in section 4.2.2 of
# Balk (2008).
Qf <- quantity_index(fisher_index)(q2, q1, p2, p1)
Ql <- quantity_index(laspeyres_index)(q2, q1, p1)
wl <- scale_weights(p1 * q1)
wp <- scale_weights(p1 * q2)
(Qf / (Qf + Ql) * wl + Ql / (Qf + Ql) * wp) * (p2 / p1 - 1)
# Similar to the method in section 2 of Reinsdorf et al. (2002),
# although those contributions aren't based on weights that sum to 1.
Pf <- fisher_index(p2, p1, q2, q1)
Pl <- laspeyres_index(p2, p1, q1)
(1 / (1 + Pf) * wl + Pl / (1 + Pf) * wp) * (p2 / p1 - 1)
# Also similar to the decomposition by Hallerbach (2005), noting that
# the Euler weights are close to unity.
Pp <- paasche_index(p2, p1, q2)
(0.5 * sqrt(Pp / Pl) * wl + 0.5 * sqrt(Pl / Pp) * wp) * (p2 / p1 - 1)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.