Nothing
## -----------------------------------------------------------------------------
library(piar)
library(gpindex)
prices <- data.frame(
period = rep(1:3, each = 6),
product = paste0("P", 1:6),
business = rep(c("B1", "B2"), each = 3),
price = 1:18,
quantity = 18:1
)
prices[c("back_price", "back_quantity")] <-
prices[back_period(prices$period, prices$product), c("price", "quantity")]
head(prices)
## -----------------------------------------------------------------------------
prices |>
elemental_index(price / back_price ~ period + business, r = 1)
## -----------------------------------------------------------------------------
prices |>
elemental_index(price / back_price ~ period + business, r = -1)
## -----------------------------------------------------------------------------
prices |>
elemental_index(
price / back_price ~ period + business,
weights = back_price * back_quantity
)
## -----------------------------------------------------------------------------
tw <- grouped(index_weights("Tornqvist"))
prices |>
elemental_index(
price / back_price ~ period + business,
weights = tw(
price, back_price, quantity, back_quantity,
group = interaction(period, business)
)
)
## -----------------------------------------------------------------------------
fw <- grouped(nested_transmute(0, c(1, -1), 0))
prices |>
elemental_index(
price / back_price ~ period + business,
weights = fw(
price / back_price, back_price * back_quantity, price * quantity,
group = interaction(period, business)
)
)
## -----------------------------------------------------------------------------
fisher_index <- prices |>
elemental_index(
price / back_price ~ period + business,
weights = fw(
price / back_price, back_price * back_quantity, price * quantity,
group = interaction(period, business)
),
contrib = TRUE
)
contrib(fisher_index, "B1")
## -----------------------------------------------------------------------------
diewert_contributions <- function(p1, p0, q1, q0) {
Pf <- fisher_index(p1, p0, q1, q0)
Pl <- laspeyres_index(p1, p0, q0)
wl <- scale_weights(index_weights("Laspeyres")(p0, q0))
wp <- scale_weights(index_weights("HybridPaasche")(p0, q1))
(1 / (1 + Pf) * wl + Pl / (1 + Pf) * wp) * (p1 / p0 - 1)
}
## -----------------------------------------------------------------------------
contrib(fisher_index, "B1") <- subset(prices, business == "B1") |>
split(~period) |>
sapply(
\(df) diewert_contributions(
df$price, df$back_price, df$quantity, df$back_quantity
)
)
contrib(fisher_index, "B1")
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.