elemental_index {piar} | R Documentation |
Make elemental price indexes
Description
Compute period-over-period (chainable) or fixed-base (direct) elemental price indexes, with optional percent-change contributions.
Usage
elemental_index(x, ...)
## Default S3 method:
elemental_index(x, ...)
## S3 method for class 'numeric'
elemental_index(
x,
period = gl(1, length(x)),
ea = gl(1, length(x)),
weights = NULL,
...,
chainable = TRUE,
na.rm = FALSE,
contrib = FALSE,
r = 0
)
Arguments
x |
Period-over-period or fixed-base price relatives. Currently there
is only a method for numeric vectors; these can be made with
|
... |
Further arguments passed to or used by methods. |
period |
A factor, or something that can be coerced into one, giving
the time period associated with each price relative in |
ea |
A factor, or something that can be coerced into one, giving the
elemental aggregate associated with each price relative in |
weights |
A numeric vector of weights for the price relatives in |
chainable |
Are the price relatives in |
na.rm |
Should missing values be removed? By default, missing values
are not removed. Setting |
contrib |
Should percent-change contributions be calculated? The default does not calculate contributions. |
r |
Order of the generalized mean to aggregate price relatives. 0 for a
geometric index (the default for making elemental indexes), 1 for an
arithmetic index (the default for aggregating elemental indexes and
averaging indexes over subperiods), or -1 for a harmonic index (usually for
a Paasche index). Other values are possible; see
|
Details
When supplied with a numeric vector, elemental_index()
is a simple
wrapper that applies
gpindex::generalized_mean(r)()
and
gpindex::contributions(r)()
(if contrib = TRUE
)
to x
and weights
grouped by ea
and period
. That
is, for every combination of elemental aggregate and time period,
elemental_index()
calculates an index based on a generalized mean of
order r
and, optionally, percent-change contributions. The default
(r = 0
and no weights) makes Jevons elemental indexes. See chapter 8
(pp. 175–190) of the CPI manual (2020) for more detail about making
elemental indexes, and chapter 5 of Balk (2008).
The default method simply coerces x
to a numeric vector prior to
calling the method above.
Names for x
are used as product names when calculating percent-change
contributions. Product names should be unique within each time period, and,
if not, are passed to make.unique()
with a
warning. If x
has no names then elements of x
are given
sequential names within each elemental aggregate.
The interpretation of the index depends on how the price relatives in
x
are made. If these are period-over-period relatives, then the
result is a collection of period-over-period (chainable) elemental indexes;
if these are fixed-base relatives, then the result is a collection of
fixed-base (direct) elemental indexes. For the latter, chainable
should be set to FALSE
so that no subsequent methods assume that a
chained calculation should be used.
By default, missing price relatives in x
will propagate throughout
the index calculation. Ignoring missing values with na.rm = TRUE
is
the same as overall mean (parental) imputation, and needs to be explicitly
set in the call to elemental_index()
. Explicit imputation of missing
relatives, and especially imputation of missing prices, should be done prior
to calling elemental_index()
.
Indexes based on nested generalized means, like the Fisher index (and
superlative quadratic mean indexes more generally), can be calculated by
supplying the appropriate weights with gpindex::nested_transmute()
; see the
example below. It is important to note that there are several ways to
make these weights, and this affects how percent-change contributions
are calculated.
Value
A price index that inherits from piar_index
. If
chainable = TRUE
then this is a period-over-period index that also
inherits from chainable_piar_index
; otherwise, it is a
fixed-based index that inherits from direct_piar_index
.
References
Balk, B. M. (2008). Price and Quantity Index Numbers. Cambridge University Press.
ILO, IMF, OECD, Eurostat, UN, and World Bank. (2020). Consumer Price Index Manual: Theory and Practice. International Monetary Fund.
See Also
price_relative()
for making price relatives for the same products over
time, and carry_forward()
and shadow_price()
for
imputation of missing prices.
as_index()
to turn pre-computed (elemental) index values into an
index object.
chain()
for chaining period-over-period indexes, and
rebase()
for rebasing an index.
aggregate()
to aggregate elemental indexes
according to an aggregation structure.
as.matrix()
and
as.data.frame()
for coercing an index
into a tabular form.
Examples
library(gpindex)
prices <- data.frame(
rel = 1:8,
period = rep(1:2, each = 4),
ea = rep(letters[1:2], 4)
)
# Calculate Jevons elemental indexes
with(prices, elemental_index(rel, period, ea))
# Same as using lm() or tapply()
exp(coef(lm(log(rel) ~ ea:factor(period) - 1, prices)))
with(
prices,
t(tapply(rel, list(period, ea), geometric_mean, na.rm = TRUE))
)
# A general function to calculate weights to turn the geometric
# mean of the arithmetic and harmonic mean (i.e., Fisher mean)
# into an arithmetic mean
fw <- grouped(nested_transmute(0, c(1, -1), 1))
# Calculate a CSWD index (same as the Jevons in this example)
# as an arithmetic index by using the appropriate weights
with(
prices,
elemental_index(
rel, period, ea,
fw(rel, group = interaction(period, ea)),
r = 1
)
)