問いと設定
時系列に使える因果推論の方法は、手法名の一覧だけでは選べません。知りたいこと(Question)、置ける仮定(Assumptions)、得られるデータ(Data)を順に確認します。ここではQADという観点を出発点に、自分の解析で確認する項目を整理します。
Rungeらのレビューは、因果構造の探索と因果効果の推定を区別し、同時刻の因果、未観測交絡、非定常性などを扱っています。元図を転載・翻訳する記事ではなく、以下の表と例は独自に作成しました。
実行できるコード
Python 3.12.14で実行しました。解析はすべて合成データを使う研究・学習用の例です。
専用の仮想環境で、次の版をインストールして実行します。数値は2026-10-02の実行結果です。
python -m pip install numpy==2.4.6 statsmodels==0.15.0
次のコードは上から一括実行できます。seedを固定していますが、依存ライブラリや実装の変更で細かな数値は変わり得ます。
import numpy as np
import statsmodels.api as sm
# No X -> Y effect. The observed Z is a lagged common cause.
rng = np.random.default_rng(20261002)
n = 10000
z,x,y = np.zeros((3,n))
for t in range(1,n):
z[t] = .7*z[t-1]+rng.normal()
x[t] = .5*x[t-1]+.8*z[t-1]+rng.normal()
y[t] = .6*y[t-1]+.8*z[t-1]+rng.normal()
start = 500
target = y[start:]
lag_y,lag_x,lag_z = y[start-1:-1],x[start-1:-1],z[start-1:-1]
for name,design in [('Ylag + Xlag',np.column_stack([lag_y,lag_x])),
('Ylag + Xlag + Zlag',np.column_stack([lag_y,lag_x,lag_z]))]:
fit = sm.OLS(target,sm.add_constant(design)).fit(cov_type='HAC',cov_kwds={'maxlags':5})
print(name,'Xlag coefficient:',round(fit.params[2],4),'p:',format(fit.pvalues[2],'.4g'))
print('True direct lagged X -> Y effect: 0')
実行結果
| 問い | 考えられる方法 | 先に確認すること |
|---|---|---|
| 過去のXはYの予測を改善するか | Granger型の比較 | ラグ、定常性、予測モデル、共通原因 |
| どの変数からどの変数へ因果経路があるか | PCMCI等の構造探索 | 因果十分性、独立性検定、同時刻の扱い |
| 非線形動力学で状態が結びついているか | CCM(Convergent Cross Mapping) | 状態再構成、決定論性、同期、共有駆動 |
| Xへの介入でYはいくつ変わるか | グラフに基づく効果推定 | 介入と対象時点、識別、調整集合 |
| 過去の介入が次の割付にも影響するか | 縦断g-methods等 | 時変交絡、positivity、介入履歴 |
この表は網羅的な選択アルゴリズムではありません。各方法の適用条件は別途確認します。CCMのスコアを用量反応の効果量と読み替えることはできません。
ラグがあっても交絡は残る
後半のコードはX→Yを一切入れない時系列です。観測した共通原因ZがXとYに影響します。先頭500時点を除き、Yの1期前を入れた回帰を比べます。
| 回帰の説明変数 | Xの1期前係数 | HAC p値 |
|---|---|---|
| Yの1期前、Xの1期前 | 0.1788 | 約1.30×10⁻⁷⁶ |
| 上記+Zの1期前 | −0.0050 | 0.4929 |
真の直接X→Y効果は0です。Zを省くとXが予測に役立ち、有意でも因果効果の証拠にはなりません。ここでの単一ラグ係数の検定は、一般の多変量・複数ラグGranger検定全体を実装したものではありません。
測定間隔と時間軸を先に決める
採血・観測間隔より速い反応は同時刻の関係に見えることがあります。変数の集約や時間ずれ、補間でも見かけの経路は変わります。どの時間スケールの介入効果を問うかを定義し、ラグ幅の感度、欠測、測定誤差、非定常性を確認します。
時間が先ということだけでは因果性は成立しません。共通駆動、自己相関、フィードバック、季節性を考慮します。一方、非線形だからCCM、変数が多いからPCMCIと自動的に決めることもできません。
発見と意思決定の間に必要な工程
構造探索の結果から候補グラフを作り、領域知識と測定時点で見直します。そのグラフの下で介入効果が識別できるかを調べ、初めて効果量の推定へ進みます。未観測交絡に対応した探索法を使っても、全ての介入効果が点識別されるとは限りません。
本例は線形・定常な生成過程での説明です。HAC標準誤差を使ったからモデルの誤指定や未観測交絡が解決するわけではありません。問い、置いた仮定、データの制約、結論の到達範囲を一緒に残すことを重視します。