This is a writeup on calculating percentage point contribution of an expenditure class to year-ended and year-average change in the Australian consumer price index (CPI) as published by the Australian Bureau of Statistics (ABS).

While this focuses on CPI specifically, the same method can be applied to any other chain-linked index that can be broken down to components where it is possible to calculate the percentage point contributions of those components for the base time unit (e.g. quarterly contributions for a quarterly series). The formulas can be modified slightly to work with monthly series by replacing 3’s with 11’s and 4’s with 12’s where appropriate. With a bit of imagination you should be able to modify them to calculate contributions to change over longer or shorter time periods too.

You can find spreadsheets in this GitHub repo for calculating the percentage point contributions in quarterly, year-ended and year-average terms for the capital cities and national CPI.

The short


  • \(\text{CPI}_t\) be the CPI in time period \(t\)
  • \(\text{EC}^j_t\) be the index for the expenditure class \(j\) in time period \(t\)
  • \(W^j_t\) be the weight of expenditure class \(j\) in time period \(t\) (see note below on weights)
  • \(\text{RP}_t\) be the reference period for time period \(t\) (see note below on reference periods)
  • \(\text{contrib}^{\text{qtr}\vert\text{ye}\vert\text{yavg}}_{j,t}\) be the percentage point contribution of an expenditure class \(j\) to the quarterly, year-ended and year-average change in CPI respectively in time period \(t\)

The contribution to quarterly change in CPI in time period \(t\) of the expenditure class \(j\)

$$ \text{contrib}_{j,t}^{\text{qtr}}=W^j_t\cdot \frac{\text{CPI}_{\text{RP}_t}}{\text{CPI}_{t-1}}\cdot \frac{\text{EC}^j_t-\text{EC}^j_{t-1}}{\text{EC}^j_{\text{RP}_t}}\tag{1} $$

The contribution to year-ended inflation in time period \(t\) of the expenditure class \(j\) is given by

$$ \text{contrib}_{j,t}^{\text{ye}}=\frac{1}{\text{CPI}_{t-4}}\sum_{i=0}^3 \text{CPI}_{t-i-1} \cdot \text{contrib}_{j,t-i}^{\text{qtr}}\tag{2} $$

The contribution to year-average change in the CPI in time period \(t\) of the expenditure class \(j\) is given by

$$ \text{contrib}_{j,t}^{\text{yavg}}=\frac{1}{\sum\limits_{i=0}^3\text{CPI}_{t-i-4}}\sum_{i=0}^3 \text{CPI}_{t-i-4} \cdot \text{contrib}_{j,t-i}^{\text{ye}}\tag{3} $$

Weights and reference periods

Each expenditure class of the CPI has a weight associated with it. These weights are updated from time to time by the ABS, which necessitates chaining. The weights for expenditure classes are fixed between weight updates, which are generally four quarters apart.

The reference period for a weight update is the quarter immediately prior to the first quarter in which that weight update takes effect. For example, the weights from the 2021 weight update took effect from December 2021, so the reference period for the 2021 weight update is September 2021 (the quarter before). Like the weights themselves, the reference period is fixed between weight updates.

The table below shows an example of the weights for a few expenditure classes and the reference periods between June 2022 and December 2023.

DateReference periodWeights

The long

The problem

Ordinarily, given a series that can be decomposed into a sum of components, for example \(I_t=A_t+B_t+C_t\), we can calculate the percentage point contributions to change of those components as below:

$$ \text{contrib}_{A,t}^{\text{qtr}}=\frac{A_t-A_{t-1}}{I_{t-1}}\tag{4} $$

$$ \text{contrib}_{A,t}^{\text{ye}}=\frac{A_t-A_{t-4}}{I_{t-4}}\tag{5} $$

$$ \text{contrib}_{A,t}^{\text{yavg}}=\frac{\sum\limits_{i=0}^3 (A_{t-i}-A_{t-i-4})}{\sum\limits_{i=0}^3I_{t-i-4}}\tag{6} $$

CPI can be decomposed into a sum of its components as follows:

$$ \text{CPI}_t=\sum\limits_{j} W_t^j\cdot \text{CPI}_{\text{RP}_t}\cdot \frac{\text{EC}^j_t}{\text{EC}^j_{\text{RP}_t}}\tag{7} $$

Trying to apply the year-ended contribution formula in (5) for an expenditure class \(j\) gives the following result:

$$ \text{contrib}_{j,t}^{\text{ye}}=\frac{1}{\text{CPI}_{t-4}}\cdot \left(W_t^j\cdot \text{CPI}_{\text{RP}_t}\cdot \frac{\text{EC}^j_t}{\text{EC}^j_{\text{RP}_t}}- W_{t-4}^j\cdot \text{CPI}_{\text{RP}_{t-4}}\cdot \frac{\text{EC}^j_{t-4}}{\text{EC}^j_{\text{RP}_{t-4}}}\right)\tag{8} $$

However this formula has a few undesirable properties. For example, consider the below table containing the year-ended percentage point contributions of the rents expenditure class to Australian CPI calculated using this method. The table shows that rents contributed negatively to year-ended change in CPI from December 2021 to September 2022, despite there not being a single quarter of negative rents growth from March 2021 onwards. There are also sudden changes in the year-ended contributions during weight updates in December 2021 and December 2022 that do not appear to be related to changes in the rents index.

IndexWeightYear-ended contribution

A solution

The CPI is a chain-linked series. This means it is actually several series that have been stitched together (“chain linked”). The underlying series overlap by one period to accommodate this, like in the below table:

Series 1100.0101.2102.9
Series 2100.0100.2101.1101.4101.9
Series 3100.0100.8

The reference periods discussed separately above correspond to the start of each new series (i.e. the overlapping period). Based on that fact, the following holds:

$$ \text{CPI}_{t-1}=\sum\limits_{j} W_t^j\cdot \text{CPI}_{\text{RP}_t}\cdot \frac{\text{EC}^j_{t-1}}{\text{EC}^j_{\text{RP}_t}}\tag{9} $$

This is clear when \(t-1\) is not a reference period, because in that case \(\text{RP}_t=\text{RP}_{t-1}\) and \(\text{W}_t=\text{W}_{t-1}\) which means (9) is just a restatement of (7). If \(t-1\) is a reference period we can note that \(\text{RP}_t=t-1\), and therefore the sum in (9) simplifies to \(\sum_j\text{W}^j_t\cdot\text{CPI}_{t-1}\). The weights sum to 1 and we are left with \(\text{CPI}_{t-1}\).

Given (9) we can write \(\Delta\text{CPI}_t=\text{CPI}_t-\text{CPI}_{t-1}\) as follows:

$$ \Delta\text{CPI}_t=\sum\limits_{j} W_t^j\cdot \text{CPI}_{\text{RP}_t}\cdot \frac{\text{EC}^j_t-\text{EC}^j_{t-1}}{\text{EC}^j_{\text{RP}_t}}\tag{10} $$

Using \(\text{CPI}_t=\text{CPI}_0+\sum_{i=1}^t\Delta\text{CPI}_i\), we can substitute in (10) and swap around the sums to get the following expression for \(\text{CPI}_t\):

$$ \text{CPI}_t=\text{CPI}_0+\sum\limits_{j}\left(\sum_{i=1}^t W_i^j\cdot \text{CPI}_{\text{RP}_i}\cdot \frac{\text{EC}^j_i-\text{EC}^j_{i-1}}{\text{EC}^j_{\text{RP}_i}}\right)\tag{11} $$

And we can then note that we’ve decomposed CPI into a sum of time series, which can be plugged into (4), (5) and (6) to give (1), (2) and (3) respectively.

Using these equations to recalculate the year-ended percentage point contributions for rents, we can see much nicer behaviour:

IndexWeightYear-ended contribution

Other reading

  • See this paper from the OECD for an equivalent method of calculating year-ended contributions for series with annually updated weights. Might need some extra work to apply this to the Australian CPI as the paper only covers the case of a single weight update in a year (noting the year to March 2024 has two weight changes due to an ad-hoc partial update for the September quarter 2023).