本ポストはこちらの続きです。

固定基準方式(同じ年の数量をウェイトにする方式)では、時間が経てば経つほど「昔の買い物の仕方」と「今の買い物の仕方」がズレていくため、バイアスが拡大してしまいます。
その解決のために、「毎年ウェイトを最新のものに更新し(毎期基準改定)、隣り合う年同士の物価上昇率を掛け合わせていく」のが連鎖指数です。
以下に固定基準方式の指数と連鎖指数方式を比較するシミュレーションを示します。
実務の消費者物価指数(CPI)などでよく使われる「連鎖ラスパイレス指数」を実装しています。
シミュレーションコード
# 必要なパッケージの読み込み
library(ggplot2)
library(tidyr)
# ==========================================
# 1. パラメータとデータの生成
# ==========================================
years <- 0:20
# 価格の変化
price_A <- 100 * (1.05)^years # 年5%上昇
price_B <- 100 * (1.01)^years # 年1%上昇
# 数量の変化:代替効果(価格と数量の負の相関)
budget <- 20000
qty_A <- (budget / 2) / price_A
qty_B <- (budget / 2) / price_B
# ==========================================
# 2. 指数の計算
# ==========================================
# (1) 固定基準方式(基準年 t=0 の数量や価格を固定)
p0_A <- price_A[1]
p0_B <- price_B[1]
q0_A <- qty_A[1]
q0_B <- qty_B[1]
Laspeyres_Fixed <- (price_A * q0_A + price_B * q0_B) / (p0_A * q0_A + p0_B * q0_B) * 100
Paasche_Fixed <- (price_A * qty_A + price_B * qty_B) / (p0_A * qty_A + p0_B * qty_B) * 100
Fisher_Fixed <- sqrt(Laspeyres_Fixed * Paasche_Fixed)
# (2) 連鎖指数方式(連鎖ラスパイレス指数)
# 毎期、前年(t-1)を基準として指数(リンク)を計算し、掛け合わせる
Chain_Laspeyres <- numeric(length(years))
Chain_Laspeyres[1] <- 100 # 基準年は100
for (t in 2:length(years)) {
# 前期(t-1)の価格と数量(毎期アップデートされる)
p_prev_A <- price_A[t - 1]
p_prev_B <- price_B[t - 1]
q_prev_A <- qty_A[t - 1]
q_prev_B <- qty_B[t - 1]
# 当期(t)の価格
p_curr_A <- price_A[t]
p_curr_B <- price_B[t]
# 前期に対する当期の物価上昇率(リンク指数)
link_index <- (p_curr_A * q_prev_A + p_curr_B * q_prev_B) /
(p_prev_A * q_prev_A + p_prev_B * q_prev_B)
# 連鎖させる:当期の指数 = 前期の連鎖指数 × リンク指数
Chain_Laspeyres[t] <- Chain_Laspeyres[t - 1] * link_index
}
# ==========================================
# 3. データの整理と可視化
# ==========================================
df <- data.frame(
Year = years,
Laspeyres_Fixed,
Paasche_Fixed,
Fisher_Fixed,
Chain_Laspeyres
)
df_long <- pivot_longer(df,
cols = -Year,
names_to = "Index_Type", values_to = "Value"
)
# グラフの描画
ggplot(df_long, aes(x = Year, y = Value, color = Index_Type, linetype = Index_Type)) +
geom_line(linewidth = 0.5) +
geom_point(size = 2) +
labs(
title = "固定基準方式 vs 連鎖方式のバイアス比較",
x = "経過年数",
y = "物価指数 (基準年 = 100)"
) +
theme_minimal() +
scale_color_manual(values = c(
"Laspeyres_Fixed" = "#E41A1C",
"Paasche_Fixed" = "#377EB8",
"Fisher_Fixed" = "#4DAF4A",
"Chain_Laspeyres" = "#984EA3"
)) +
scale_linetype_manual(values = c(
"Laspeyres_Fixed" = "solid",
"Paasche_Fixed" = "solid",
"Fisher_Fixed" = "dashed",
"Chain_Laspeyres" = "solid"
))Figure 1 から、赤い線(固定ラスパイレス)が上振れし、青い線(固定パーシェ)が下振れするのに対し、紫の線(連鎖ラスパイレス指数)が、緑の点線(フィッシャー指数=真の物価変動の目安)にほぼ一致して推移することが確認できます。
固定基準方式でバイアスが大きくなる理由
20年前の基準年(\(t=0\))の「購入数量」を20年後もずっと使い続けると、現在の消費者の「高いものを避けて安いものを買う」という代替行動が完全に無視されてしまうため、時間が経つほどバイアス(誤差)が雪だるま式に膨らみます。
連鎖指数がバイアスを打ち消すメカニズム
連鎖指数は、20年前と今を直接比較するのではなく、「1年前と今年の比較(リンク指数)」を20回掛け合わせるというアプローチをとります。
数式で表すと、ある年 \(t\) のリンク指数 \(L_{t-1, t}\) は以下のように計算されます。 \[ L_{t-1, t} = \dfrac{\displaystyle\sum p_{ti} q_{t-1, i}}{\displaystyle\sum p_{t-1, i} q_{t-1, i}} \]
上式の結果を毎年掛け合わせます(連鎖)。 \[ \text{連鎖指数}_t = \text{連鎖指数}_{t-1} \times L_{t-1, t} \]
指数式のポイントは、ウェイトとなる数量が \(q_0\) ではなく \(q_{t-1}\) になっている点です。
計算に使う「購入数量」のデータが常に直近の1年前のものにアップデート(毎期基準改定)されます。
そのため、「消費者が高いものを避けて別のものを買った」という最新の消費行動が毎年ウェイトに織り込まれていきます。
連鎖指数を用いることで、「隣接する2時点(去年と今年)」という相対価格の変化があまり起きていない短い期間でのみ固定指数を計算することになります。
そのため、代替バイアスがほとんど生じない、物価指数を作ることができます。
以上です。

