## -----------------------------------------------------------------------------
library(piar)

# Make an aggregation structure.
ms_weights[c("level1", "level2")] <- 
  expand_classification(ms_weights$classification)

pias <- ms_weights[c("level1", "level2", "business", "weight")] |>
  as_aggregation_structure()

# Make a fixed-base index.
elementals <- ms_prices |>
  transform(
    relative = price_relative(price, period = period, product = product),
    business = factor(business, levels = ms_weights$business)
  ) |>
  elemental_index(relative ~ period + business, na.rm = TRUE)

index <- elementals |>
  aggregate(pias, na.rm = TRUE) |>
  chain()

index

## -----------------------------------------------------------------------------
pias_matrix <- as.matrix(pias)

pias_matrix

## -----------------------------------------------------------------------------
pias_matrix %*% as.matrix(index[levels(pias)$business])

## -----------------------------------------------------------------------------
pias_matrix <- as.matrix(pias) > 0 

pias_matrix %*% is.na(elementals) / rowSums(pias_matrix)

## -----------------------------------------------------------------------------
as.matrix(pias, sparse = TRUE)