中断時系列分析における多重共線性の考察
Interrupted Time Series Analysis(中断時系列分析)でよく利用される segmented regression のパラメータについて、なぜ従来のモデル(Equation 1)が多重共線性の問題を引き起こすのか、そしてその問題をどのように解決するのかを数学的な観点から解説します。
以下のアンサー記事のようなものになっています。
本記事作成にあたって以下の論文を参考にしています。(この論文には多重共線性ではなく、モデルのバイアスについて記載されています)
モデルの定式化と問題の概要
まず、一般的なモデル設定として、次の Equation 1 を考えます。
ここで、
多重共線性とランク落ちの数学的意味
交互作用項の性質
介入前は
となりますが、介入後
となります。
すなわち、介入後のデータにおいては、変数
より形式的には、介入後の観測に対して
となります。このため、モデル内でこれら二つの変数は同じ情報を持つことになり、数学的には
ただし介入後
となるので介入前
rank落ちによる問題
回帰分析では、デザイン行列が
具体的には、Equation 1 の場合、説明変数として
定数項
時間変数
介入ダミー
交互作用項
が含まれますが、介入後では
その結果、行列のランクが本来の列数よりも低くなり、逆行列を求められなくなります。
このrank落ちは、回帰係数が一意に推定できない(識別できない)状態を招き、推定の信頼性に深刻な影響を与えます。
再パラメータ化による解決策
上記の問題を解決するため、交互作用項を介入開始時点
これを Equation 1 に代入すると、
となり、整理すると、
となります。ここで新たに、
と定義すると、モデルは以下の Equation 2 として書き換えられます。
この形式では、介入直後(
となるため、即時効果が正しく
シミュレーション
library(car)
# シミュレーションパラメータ
T <- 0:150 # 0から150までの時間
T_i <- 75 # 介入開始時刻
X <- ifelse(T >= T_i, 1, 0) # 介入ダミー:T < T_i は 0、T >= T_i は 1
# Equation 1 の交互作用項: T * X
interaction1 <- T * X
# Equation 2 の交互作用項: (T - T_i) * X
interaction2 <- (T - T_i) * X
# Equation 1 のデザイン行列 (Intercept は lm() が自動で追加)
df_eq1 <- data.frame(
T = T,
X = X,
Interaction = interaction1
)
# Equation 2 のデザイン行列
df_eq2 <- data.frame(
T = T,
X = X,
Interaction = interaction2
)
# ダミーの応答変数を生成(例:正規乱数)
set.seed(123)
df_eq1$Y <- rnorm(nrow(df_eq1))
df_eq2$Y <- rnorm(nrow(df_eq2))
# 線形モデルのフィッティング
model_eq1 <- lm(Y ~ T + X + Interaction, data = df_eq1)
model_eq2 <- lm(Y ~ T + X + Interaction, data = df_eq2)
# VIF の計算
vif_eq1 <- vif(model_eq1)
vif_eq2 <- vif(model_eq2)
cat("Equation 1 の VIF:\n")
print(vif_eq1)
cat("\nEquation 2 の VIF:\n")
print(vif_eq2)

以上からEquation2ではVIFが改善されているのが分かると思います。
まとめ
以上、Interrupted Time-Series Analysisにおける多重共線性について考察しました。
すごく簡単な式展開でわかる話でしたが、知らないと間違えたモデリングをしてしまいそうですね。
ジャーナルに乗ってるからと言ってそれが正しい保証はない典型的な例でした。
自戒。
Discussion