🔖 キーワード索引 — VAR を多角的に理解する
VAR(ベクトル自己回帰)は、 複数の時系列が互いの過去値で影響し合う構造をモデル化する多変量時系列手法です。 関連キーワードを難易度別に整理しました。
🟢 基礎キーワード(まず押さえる)
時系列(time series) :時間順に並んだ観測列。 VAR の入力データ。
自己回帰 AR(p) :現在値を自分自身の過去 p 期の線形結合で表す単変量モデル。 VAR はその多変量版。
ラグ次数 p(lag order) :何期前まで説明変数に含めるか。 VAR(p) の p。
係数行列 A₁…A_p :k×k 行列。 各変数が他変数の過去にどう反応するかを表す。
定常性(stationarity) :平均・分散が時間で一定。 VAR 推定の前提。
ホワイトノイズ撹乱項 uₜ :系列相関のない誤差。 残差診断の対象。
🟡 中級キーワード
次数選択(AIC / BIC / HQIC) :ラグ p を情報量規準で選ぶ。
ADF 検定(単位根検定) :定常性の確認。 非定常なら階差をとる。
インパルス応答関数(IRF) :1 変数へのショックが各変数の将来値に与える経路。
グレンジャー因果性 :X の過去を加えると Y の予測が改善するかを F 検定で判定。
残差共分散行列 Σ :同時刻の変数間相関。 IRF の直交化に使う。
Cholesky 分解(直交化) :撹乱項を独立ショックに分解。 変数順序に依存。
🔴 上級キーワード
共和分(cointegration)と VECM :非定常だが長期均衡を持つ系列は誤差修正モデルへ。
構造 VAR(SVAR) :同時点の因果構造を識別した発展形。
予測誤差分散分解(FEVD) :h 期先予測誤差を各ショック源に分解。
ベイジアン VAR(BVAR) :事前分布で高次元の過剰パラメータ化を緩和。
FAVAR / パネル VAR :多数のマクロ変数や複数主体へ拡張。
Portmanteau 検定 :残差のホワイトノイズ性(当てはまりの十分性)を確認。
🔖 キーワード索引 — セクション早見
「VAR モデル」を理解するための各セクションへ移動できます。
30 秒結論
文脈
直感
数式
記号読み解き
実値計算
Python 実装
落とし穴
関連手法
関連用語
概念マップ
💡 30秒で分かる結論
🍰 まずはやさしく
複数のデータの関係を見る道具です。
未来の値を予測するために使います。
スマホの利用時間と成績の変化などです。
この章ではVARの基本を学びます。
定義 :複数の時系列が互いの過去の値で影響し合う構造を、 1 本の連立方程式系でモデル化する多変量時系列手法。 予測・インパルス応答・グレンジャー因果検定の土台。カテゴリ :時系列
📖 包括的解説 — この概念を完全マスター
📍 学習の3ステップ
定義を理解する :VAR(p) の連立式と、 係数行列 A が意味するものを確認
具体例を見る :SSDSE-B-2026 の時系列(総人口・出生数)で statsmodels の VAR を回す
応用する :IRF・FEVD・グレンジャー因果で変数間の動学関係を解釈
🔧 Python実装パターン
🎯 このコードでやること :SSDSE-B-2026 を時系列として読み込み、 2 変量 VAR(1) を推定して係数行列と残差共分散を確認します。
📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行)
都道府県 A1101(総人口) A4101(出生数)
北海道 5,092,000 24,430
東京都 14,086,000 86,348
沖縄県 1,468,000 12,549
…(全 47 行)
📋 コピー 1
2
3
4
5
6
7
8
9
10
11
12
13
14 # statsmodels で VAR を最短で回す
import pandas as pd
from statsmodels.tsa.api import VAR
# SSDSE-B-2026(47都道府県 × 年次): 1行目は日本語名なので skiprows=[1]
df = pd . read_csv ( 'data/raw/SSDSE-B-2026.csv' , skiprows = [ 1 ], encoding = 'cp932' )
# 東京都を時系列として抜き出し、総人口 A1101 と 出生数 A4101 の2変量
tokyo = df [ df [ 'Prefecture' ] == '東京都' ] . sort_values ( 'SSDSE-B-2026' )
y = tokyo [[ 'A1101' , 'A4101' ]] . astype ( float )
model = VAR ( y ) # 多変量時系列モデル
res = model . fit ( maxlags = 1 ) # VAR(1) を推定
print ( res . summary ()) # 係数行列 A1・残差共分散を確認
📤 実行例(実測)
Summary of Regression Results
==================================
Model: VAR
Method: OLS
Date: Sun, 16, Aug, 2026
Time: 18:58:09
--------------------------------------------------------------------
No. of Equations: 2.00000 BIC: 36.1824
Nobs: 11.0000 HQIC: 35.8286
Log likelihood: -223.026 FPE: 4.28411e+15
AIC: 35.9654 Det(Omega_mle): 2.64478e+15
--------------------------------------------------------------------
Results for equation A1101
=================================================
…(以下略)
📚 統計概念マップでの位置
このページの上にある3つの概念マップ (関係マップ、 包含マップ、 ツリーマップ)で VAR の位置づけが視覚的に分かります。 ARIMA (単変量)→ VAR(多変量)→ グレンジャー因果 ・SVAR という発展の流れを辿りましょう。
🎯 SSDSE-B-2026 で挑戦
SSDSE-B-2026 は 47 都道府県 × 複数年次の社会経済データ。 年次方向を時間軸として、 VAR で以下のような分析ができます:
ある県の総人口 A1101 と 出生数 A4101 の 2 変量 VAR(1) を推定
ラグ次数 p を AIC / BIC で選択
人口ショックが出生数に伝播する経路を IRF で可視化
「人口 → 出生数」のグレンジャー因果を検定
※ 1 県あたりの年次点数は限られるため、 ここでは手法の流れを体験する教材例。 実務では十分な期間長(目安 n ≫ k²p)を確保する。
💡 30 秒で分かる結論 — 要点整理
VAR モデル とは、 複数時系列を対称的に扱い、 各変数を「全変数の過去値」で説明する連立自己回帰モデル。
本ページでは 数式・直感・実コード・落とし穴の 4 つの視点で整理しています。
SSDSE-B-2026 の年次データを用いて、 実際に statsmodels の VAR を動かすことを推奨します。
初学者は「直感 → 数式 → 実装 → 落とし穴」の順で読むのが効率的です。
📍 あなたが今見ているもの
🍰 まずはやさしく
データのつながりを分析する手法です。
どのデータが影響したかを探ります。
人口と出生数の変化を調べる例です。
この用語がどう使われるかを確認します。
論文中に 「VAR(ベクトル自己回帰)」 として登場する用語。
VAR(ベクトル自己回帰) とは:複数時系列が互いに過去の値で影響し合う構造をモデル化。Granger因果検定の前段。
📍 文脈ボックス — あなたが今見ているもの(完全強化版)
このセクションは「VAR モデル」を扱う 用語ページ です。 統計データ分析コンペティション(2026)の再現教材における中核用語のひとつで、人口 A1101・出生数 A4101 の 2 変量 VAR(1) モデル という観点で SSDSE-B-2026(47 都道府県 × 複数年 × 100 超列)に紐づけられます。
位置づけ:相関 ・線形回帰 ・仮説検定 といった基礎用語群と並列であり、応用としては 内生性 ・IV ・DID ・クラスタリング 等へ繋がります。
🎨 直感で掴む — 完全強化版
🍰 まずはやさしく
分析のための眼鏡のようなものです。
データに隠れた関係をあぶり出します。
都市と地方の人口の差を見る例です。
直感的に仕組みを理解していきましょう。
VAR モデル を一言でいえば「人口 A1101・出生数 A4101 の 2 変量 VAR(1) モデル」。 47 都道府県という小さな母集団でも、 SSDSE-B-2026 の A1101 列に注目すると、 大都市圏と地方の差・人口規模に伴う相対比較など、 様々なパターンが見えてきます。
比喩でいうと、 VAR モデル はデータ分析の「眼鏡」のようなもの。 同じデータでも眼鏡を変えれば、 平均(中心)・分散(ばらつき)・相関(連動)・因果(影響)と、 異なる情報が浮かび上がります。 SSDSE-B-2026 を題材に、 この眼鏡をかけてみるのが本ページの狙いです。
具体例 1:47 都道府県の A1101 の中央値 ± 四分位を見ると、 規模感が掴める。
具体例 2:A4101 と組み合わせて散布図にすると、 群構造が見える。
具体例 3:政令指定都市の有無で群分けすると、 介入研究の素材になる。
🎨 概念図で押さえる(VAR モデルを視覚で理解)
VAR(ベクトル自己回帰)は複数の時系列が相互に影響し合うシステムを記述するモデルです。 以下 3 点の概念図で「多変量の相互依存」「インパルス応答」「Granger 因果検定の方向性」を視覚的に整理します。
図A: 2 変量 VAR(1) の相互依存構造
VAR(1): y_t = A y_{t-1} + ε_t
y₁,t-1
人口
y₂,t-1
出生数
y₁,t
人口
y₂,t
出生数
a₁₁ = 0.85
a₂₂ = 0.78
a₂₁ = 0.12 (人口→出生数)
a₁₂ = 0.05 (出生数→人口)
→ VAR(1) では各変数の現在値は、 自分自身と他変数の前期値の線形結合で表現されます。 対角成分(a₁₁, a₂₂)は自己回帰、 非対角成分(a₁₂, a₂₁)はクロス効果。 例えば 47 都道府県の総人口 A1101 と 出生数 A4101 を VAR で扱えば、 「人口は出生数に影響するが、 出生数の人口への影響は限定的」のような非対称な動学関係が定量化できます。
図B: インパルス応答関数 (IRF) — ショックの伝播
人口に +1σ ショック → 12 期先までの影響
人口への影響 (自己応答)
期 (0 → 12)
応答
指数的減衰
出生数への影響 (波及効果)
期 (0 → 12)
3-5 期遅れでピーク
→ インパルス応答関数(IRF)は「ある変数に 1 単位の外的ショックが起きたとき、 各変数の将来値がどう動くか」を可視化します。 自己応答(左)は指数的に減衰、 他変数への波及(右)は数期遅れてピークを迎えるパターンが典型的。 マクロ経済では「金利ショックの GDP への波及」「人口減少の地域経済への影響」など、 政策効果のシミュレーションに使われます。
図C: Granger 因果性 — 予測情報の方向性
Granger 因果検定 — Y の予測に X の過去は役立つか?
制約モデル M₀
Y_t = α + Σ β_i Y_{t-i} + ε
Y の過去だけで予測
残差分散: SSR₀
非制約モデル M₁
Y_t = α + Σ β_i Y_{t-i} + Σ γ_j X_{t-j} + ε
Y と X の過去で予測
残差分散: SSR₁
F 検定
SSR₁ << SSR₀ → X は Y を Granger 因果する(p < 0.05)
→ Granger 因果は「X の過去を加えると Y の予測精度が有意に改善するか」を F 検定で判定します。 改善があれば「X → Y への Granger 因果あり」と判断。 ただしこれは予測情報の方向性であり、 真の因果関係ではない点に注意(共通の交絡変数で見かけ上の因果が出る場合あり)。 VAR モデルでは、 すべての変数ペアについて両方向に検定し、 動学関係の方向性ネットワークを描くのが標準手順です。
🎨 概念図で押さえる
VAR(ベクトル自己回帰)は複数時系列の同時モデリング。 時系列の典型形状、 自己相関、 残差プロットで全体像を直感する。
複数時系列の同時挙動を VAR で捉える。 トレンドや共動が見えれば動学関係の存在を示唆。
各変数の自己相関で次数(lag)p の決定指針を得る。 PACF の遮断点が p の候補。
VAR 残差にホワイトノイズ性があれば適合は十分。 Portmanteau 検定で確認。
→ VAR 分析のワークフローは「時系列確認 → 定常化 → 次数選択 → 推定 → 残差診断 → Granger/IRF」。 各図はその主要ステップに対応。
✅ 理解度チェック
VAR(p) における p(ラグ次数)の選択基準を 2 つ挙げよ(ヒント:AIC / BIC)
定常性が VAR 推定に必要な理由を 1 行で述べよ。
インパルス応答関数(IRF)が示すものは何か?
Granger 因果と「真の因果」の違いを説明できるか?
VAR と VECM(誤差修正モデル)の使い分けは?
→ 全項目に答えられれば、 計量経済学の時系列パートは応用編まで到達可能。
🔬 数式を言葉で読み解く — 完全強化版
数式の各記号を、日本語の意味に変換します。
yt — 時刻 t の k 次元観測ベクトル(例: SSDSE-B-2026 の A1101 総人口・A4101 出生数 の 2 変量 VAR)
p (lag order) — VAR の次数。 AIC/BIC で選択。 マクロ経済データでは p=2〜4 が典型
A1 , …, Ap — k×k 係数行列。 推定すべき未知パラメータ。 各要素 aij (l) は「変数 j の l 期前が変数 i の現在に与える影響」
c — k×1 定数項ベクトル(切片)
εt — k×1 ホワイトノイズ撹乱項。 共分散行列 Σ で同時刻相関を持つ(直交化前)
L (ラグ演算子) — L·yt = yt-1 。 VAR を (I − A1 L − … − Ap Lp )yt = c + εt と簡潔に表現
IRF (Impulse Response Function) — 撹乱項 1 単位ショックが将来の y に与える経路。 Cholesky 分解で直交化
FEVD — Forecast Error Variance Decomposition。 h 期先予測誤差を各ショック源に分解
🧮 実値計算例 — VAR(1) を手で解いて statsmodels と照合する
VAR の推定は「各変数を、 全変数の 1 期前の値で回帰する」だけです。 短い 2 変量系列を使って、 係数行列 A₁ を最小二乗(OLS)で手計算し、 statsmodels の結果と一致することを確かめます。
① データとモデル
y_t = [人口, 出生数] (教材用の短い系列, 単位は任意)
t : 0 1 2 3 4
人口 : 1.0 1.2 1.5 1.7 2.0
出生 : 0.8 0.9 1.0 0.9 1.1
VAR(1): y_t = c + A₁ · y_(t-1) + u_t
→ 各行を「切片 + 1期前の人口 + 1期前の出生数」で OLS 回帰するだけ
② OLS で係数行列 A₁ を推定(numpy)
🎯 このコードでやること :ラグ付き説明変数 X=[1, y_(t-1)] を作り、 np.linalg.lstsq で切片 c と 2×2 係数行列 A₁ を一括推定します。
📋 コピー 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 import numpy as np
# 教材用の短い2変量系列(総人口・出生数を標準化したイメージ, 単位は任意)
# y_t = [人口, 出生数]
Y = np . array ([
[ 1.0 , 0.8 ],
[ 1.2 , 0.9 ],
[ 1.5 , 1.0 ],
[ 1.7 , 0.9 ],
[ 2.0 , 1.1 ],
], dtype = float )
# VAR(1): y_t = c + A1 @ y_{t-1} + u_t
# ラグ付き説明変数 X = [1, y_{t-1}] と目的変数 Y_t を作る
Yt = Y [ 1 :] # t = 1..4
Ylag = Y [: - 1 ] # t = 0..3
X = np . column_stack ([ np . ones ( len ( Ylag )), Ylag ]) # 切片 + ラグ
# 各行が [c_i, a_i1, a_i2] となる係数を OLS で一括推定
B , * _ = np . linalg . lstsq ( X , Yt , rcond = None )
c = B [ 0 ] # 切片ベクトル
A1 = B [ 1 :] . T # 2x2 係数行列
print ( "切片 c =" , c )
print ( "係数行列 A1 = \n " , A1 )
📤 実行例(実測)
切片 c = [0.35909091 1.275 ]
係数行列 A1 =
[[ 1.12121212 -0.3030303 ]
[ 0.33333333 -0.83333333]]
③ statsmodels の VAR で同じ結果になるか照合
🎯 このコードでやること :同じ系列に statsmodels の VAR(1) を当て、 手計算の A₁・c と一致することを確認します。
📋 コピー from statsmodels.tsa.api import VAR
import pandas as pd
y = pd . DataFrame ( Y , columns = [ 'pop' , 'birth' ])
res = VAR ( y ) . fit ( 1 ) # 同じ VAR(1) を statsmodels で
print ( res . coefs [ 0 ]) # A1(手計算の A1 と一致)
print ( res . intercept ) # 切片 c と一致
📤 実行例(実測)
[[ 1.12121212 -0.3030303 ]
[ 0.33333333 -0.83333333]]
[0.35909091 1.275 ]
💬 手計算(OLS)と statsmodels の coefs[0]・intercept は同じ値になります。 VAR の推定が「変数ごとの OLS を束ねただけ」であることが体感できます。
④ 読み取り方
A₁ の対角成分(a₁₁, a₂₂)= 各変数の自己回帰 の強さ(前期の自分をどれだけ引き継ぐか)。
非対角成分(a₁₂, a₂₁)= クロス効果 。 a₂₁ が有意なら「人口の過去が出生数を動かす」動学関係。
|固有値| がすべて 1 未満なら系は安定 (ショックは時間とともに減衰)。
🐍 Python 実装 — statsmodels で VAR の標準ワークフロー
実データ(SSDSE-B-2026)で「読み込み → 定常性 → 次数選択 → 推定 → IRF・因果」という VAR の標準手順を辿ります。
① データ読み込み(SSDSE-B-2026 を時系列化)
📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行)
都道府県 A1101(総人口) A4101(出生数)
北海道 5,092,000 24,430
東京都 14,086,000 86,348
沖縄県 1,468,000 12,549
…(全 47 行)
📋 コピー import pandas as pd
from statsmodels.tsa.api import VAR
from statsmodels.tsa.stattools import adfuller , grangercausalitytests
# 1) 読み込み(cp932 / 1行目=日本語名を skiprows で除外)
df = pd . read_csv ( 'data/raw/SSDSE-B-2026.csv' , skiprows = [ 1 ], encoding = 'cp932' )
tokyo = df [ df [ 'Prefecture' ] == '東京都' ] . sort_values ( 'SSDSE-B-2026' )
y = tokyo [[ 'A1101' , 'A4101' ]] . astype ( float ) # 総人口・出生数
y . columns = [ 'pop' , 'birth' ]
② 定常性チェック(ADF 検定)と階差化
📋 コピー # 2) 定常性チェック(ADF検定)— 非定常なら階差をとる
for col in y . columns :
stat , p , * _ = adfuller ( y [ col ])
print ( f ' { col } : ADF p = { p : .3f } ' )
# 非定常(p が大きい)なら1階差分で定常化してから VAR にかける
y_diff = y . diff () . dropna ()
📤 実行例(実測)
pop: ADF p = 0.988
birth: ADF p = 0.999
③ ラグ次数の選択(AIC / BIC)
📋 コピー # 3) ラグ次数の選択(AIC / BIC)
# 東京都の 12 年ぶんしか無く、1 階差分後は 11 観測。2 変数の VAR では
# maxlags=3 だと推定に必要な観測数が足りないので 2 までにする
model = VAR ( y_diff )
sel = model . select_order ( maxlags = 2 )
print ( sel . summary ()) # AIC/BIC/FPE/HQIC が最小の次数を確認
p = int ( sel . aic ) # AIC 最小のラグ次数を採用(fit には int を渡す)
print ( '採用ラグ p =' , p )
📤 実行例(実測)
VAR Order Selection (* highlights the minimums)
=================================================
AIC BIC FPE HQIC
-------------------------------------------------
0 37.56 37.60 2.054e+16 37.46
1 37.46 37.59 1.950e+16 37.17
2 37.20* 37.42* 1.896e+16* 36.72*
-------------------------------------------------
採用ラグ p = 2
④ 推定・インパルス応答・グレンジャー因果
📋 コピー 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 import matplotlib.pyplot as plt # irf.plot() / fevd().plot() の描画に必要
# 4) 推定・診断・応用
res = model . fit ( p )
print ( res . summary ()) # 係数・残差共分散
# インパルス応答関数(IRF): pop へのショックが birth に伝播する経路
irf = res . irf ( 10 ) # 10期先まで
irf . plot ( orth = False )
# 予測誤差分散分解(FEVD)
res . fevd ( 10 ) . plot ()
# グレンジャー因果性: pop の過去は birth の予測を改善するか
grangercausalitytests ( y_diff [[ 'birth' , 'pop' ]], maxlag = p )
📤 実行例(実測)
Summary of Regression Results
==================================
Model: VAR
Method: OLS
Date: Sun, 16, Aug, 2026
Time: 18:58:09
--------------------------------------------------------------------
No. of Equations: 2.00000 BIC: 37.4169
Nobs: 9.00000 HQIC: 36.7248
Log likelihood: -182.931 FPE: 1.89587e+16
AIC: 37.1977 Det(Omega_mle): 7.83496e+15
--------------------------------------------------------------------
Results for equation pop
===================================================
…(以下略)
💡 出力の読み方
select_order の表で、 AIC / BIC / HQIC が最小になるラグを選ぶ(規準ごとに異なることも多い)。
res.summary() の係数の符号・有意性で、 変数間の先行遅行関係を読む。
IRF は「ショックの伝播」、 FEVD は「予測誤差の要因分解」、 グレンジャー検定は「予測上の因果方向」を与える。
系列が短いと推定は不安定。 期間長・変数数・ラグ数のバランス(n ≫ k²p)に注意。
🎮 触って理解する — 2変数VAR(1)シミュレータ
2 変数 VAR(1) モデル $y_t = A\,y_{t-1} + \varepsilon_t$ の係数行列 $A$ の 4 成分をスライダーで動かすと、 生成される 2 系列(上図)とインパルス応答(下図)がリアルタイム更新 されます。 「変数1にショックを与える」ボタンを押すと、 変数1 に与えたショックが a₂₁ を通じて変数2 に波及して減衰していく様子 が観察できます(上図で細線=ショックなしの基準経路、 太線=ショックあり)。 上図をクリック / タッチ すると、 その時点にショックを注入できます。
🧪 実験レシピ — この順に触ると VAR の本質が分かる
波及を見る :初期値(a₂₁ = 0.30、 a₁₂ = 0)でショックボタンを押す。 変数1(青)が跳ね、 1 期遅れて 変数2(緑)が持ち上がり、 両方とも減衰する。 これがインパルス応答の実体。
波及を切る :a₂₁ を 0 にするとショックは変数1 の中だけで減衰し、 変数2 は無反応になる。 2 変量 VAR(1) では「a₂₁ = 0」がちょうど「変数1 は変数2 をグレンジャー因果しない」に対応する。
振動させる :a₁₂ = −0.5、 a₂₁ = 0.5 のように符号を逆にすると固有値が複素数になり、 系列と IRF が減衰振動 する(景気循環のモデル化と同じ仕組み)。
発散させる :a₁₁ を 1.0 以上に上げる、 または相互影響を強めて max|λ| ≥ 1 にすると、 系列が爆発する。 安定条件(全固有値の絶対値 < 1) の破れを目で確認できる。
💡 直感 — 複数系列が「お互いの過去」に依存する
AR(1) は「今日の自分 = 昨日の自分 × 係数 + 雑音」でした。 VAR(1) はその行列版 で、 「今日の自分たち(ベクトル)= 昨日の自分たち × 行列 A + 雑音」。 行列 A の対角成分は各変数の粘り強さ(自己持続)、 非対角成分は変数間の波及経路 です。 単回帰を 2 本別々に推定するのと違い、 VAR は「人口の過去が出生数に効き、 出生数の過去が人口に効く」という双方向のフィードバック を 1 つの連立システムとして扱えるのが本質です。 上のシミュレータで a₁₂ と a₂₁ の両方を正にすると、 2 系列が互いを追いかけ合って共動する様子が見えます。
⚠️ よくある落とし穴(シミュレータで確認できるもの)
安定性の見落とし :VAR(1) の安定条件は「A の全固有値の絶対値が 1 未満」。 上の表示で max|λ| が 1 に近づくとショックがなかなか消えず(持続的)、 1 以上で発散します。 実データで係数の和が 1 近辺なら単位根・非定常 を疑い、 階差化や VECM を検討します(VAR(p) では companion 行列の固有値で判定)。
ラグ選択の誤り :p が小さすぎると残差に系列相関が残り、 大きすぎるとパラメータ数 k²p が爆発して過学習します。 AIC / BIC で候補を絞った上で、 必ず残差診断(Portmanteau 検定)で確認するのが定石です。
グレンジャー因果との関係を混同する :2 変量 VAR(1) なら「a₂₁ = 0 か否か」の検定がそのまま「変数1 → 変数2 のグレンジャー因果 」検定です。 ただしこれは「予測に役立つか」という予測的因果 であり、 構造的因果(介入効果)ではありません。 第 3 の変数が両方を駆動していれば見かけの因果が出ます。
🚀 発展 — シミュレータの先にあるもの
インパルス応答(IRF) :下図で計算した $A^h e_1$ がまさに IRF。 実務では残差の同時相関を Cholesky 分解で直交化した「直交化 IRF」を使い、 変数順序の仮定を明示します。
分散分解(FEVD) :h 期先の予測誤差の分散を「どのショック由来か」に配分する手法。 IRF の 2 乗和から計算でき、 「変数2 の変動の何 % が変数1 のショックで説明されるか」に答えます。
VECM(ベクトル誤差修正モデル) :2 系列がそれぞれ非定常でも、 その線形結合が定常(共和分)なら、 階差 VAR に「長期均衡からの乖離を修正する項」を加えた VECM が適切です。 単純に階差化すると長期関係の情報を捨ててしまいます。
多変量・パネルへの拡張 :変数を増やすなら BVAR / FAVAR、 47 都道府県のような複数主体ならパネル VAR が受け皿になります。 単変量の復習は ARIMA 、 時系列の基礎は 時系列解析 ・自己相関 を参照。
⚠️ VAR の落とし穴 — 実務で必ず引っかかるポイント
① 非定常データにそのまま VAR をかける
VAR は定常性 を前提とします。 単位根を持つ(トレンドのある)系列をそのまま入れると、 見せかけの回帰(spurious regression)になります。 ADF / PP 検定で確認し、 非定常なら階差をとるか、 共和分があれば VECM を使います。
② 過剰なパラメータ化(次元の呪い)
VAR(p) のパラメータ数は概ね k²p (k=変数数)。 変数やラグを増やすと急増し、 標本が足りないと推定が不安定になります。 目安は n ≫ k²p。 高次元では BVAR / FAVAR / Sparse VAR を検討します。
③ VAR 係数を「因果」と誤読する
VAR の係数は予測上の関係 であり、 構造的な因果ではありません。 同時点の因果方向を論じるには SVAR による識別(Cholesky 分解や符号制約)が必要です。
④ インパルス応答の変数順序依存
直交化 IRF は Cholesky 分解の変数順序 で結果が変わります。 「どの変数が同時点で先に動くか」という仮定が入るため、 順序の根拠を明示し、 順序を入れ替えた頑健性チェックを行いましょう。
⑤ ラグ次数を規準だけで機械的に決める
AIC は大きめ、 BIC は小さめのラグを選ぶ傾向。 選んだ後は残差診断 (Portmanteau 検定で系列相関が消えているか)を必ず確認します。 残差にホワイトノイズ性がなければラグ不足のサインです。
🗺️ 統計手法選択フローチャート
Q1: 何を知りたい?
記述したい → 平均、 分散、 ヒストグラム
比較したい → t検定、 ANOVA、 χ²検定
関係を見たい → 相関、 回帰
予測したい → 回帰、 機械学習
分類したい → ロジスティック回帰、 SVM、 RF
グループ分けしたい → クラスタリング
次元を減らしたい → PCA、 因子分析
因果関係を知りたい → RCT、 IV、 DiD、 PSM
Q2: データの種類は?
連続値 → t検定、 ANOVA、 線形回帰
カテゴリ → χ²検定、 ロジスティック回帰
順序 → ノンパラ検定、 順位回帰
カウント → ポアソン回帰、 負の二項回帰
時系列 → ARIMA、 VAR、 状態空間
パネル → 固定効果、 ランダム効果
Q3: サンプルサイズは?
n < 30 :ノンパラ、 ベイズ、 ブートストラップ
30 ≤ n < 200 :古典的検定、 単純な回帰
n ≥ 200 :複雑なモデル、 機械学習
n ≥ 10000 :深層学習も可能
Q4: 仮定は?
正規性 :満たす → パラメトリック / 満たさない → ノンパラ
独立性 :必須 / 違反 → クラスター調整、 時系列モデル
等分散性 :満たす → OLS / 違反 → WLS、 ロバスト
📏 効果量の参照表
p値だけでなく効果量も併記するのが現代統計の標準。 主要な指標と Cohen の解釈基準:
統計量
効果量
小
中
大
2群平均差 Cohen's d 0.2 0.5 0.8
相関 r 0.1 0.3 0.5
線形回帰 R² 0.02 0.13 0.26
ANOVA η² (eta²) 0.01 0.06 0.14
χ² Cramér's V 0.1 0.3 0.5
ロジスティック Odds Ratio 1.5 2.5 4.0
🚀 実務応用の深掘り
典型的なプロジェクトの流れ
問題理解 :ステークホルダーとの対話、 KGI/KPI 設定
データ収集 :内部DB、 公的データ(SSDSE等)、 API
EDA :データの全体像把握、 異常検出
仮説立案 :ドメイン知識からの仮説
モデリング :シンプルから複雑へ段階的に
検証 :CV、 ホールドアウト、 A/Bテスト
解釈 :可視化、 SHAP、 部分依存プロット
展開 :本番デプロイ、 監視
ベストプラクティス
シンプルなモデルから始める(線形回帰、 単純ルール)
必ずベースラインと比較
過学習を防ぐ(CV、 正則化、 早期停止)
解釈可能性を重視
再現可能なコード・ノートブック
バージョン管理(Git)と環境管理(venv, conda)
ドキュメント化を怠らない
論文・コンペでよく使う言い回し
日本語
英語
統計的に有意 statistically significant
効果量 effect size
95%信頼区間 95% confidence interval (CI)
標本サイズ sample size
検出力 statistical power
第1種の誤り Type I error / false positive
第2種の誤り Type II error / false negative
多重比較問題 multiple comparisons problem
過学習 overfitting
汎化性能 generalization
交差検証 cross-validation (CV)
統計データ活用コンペでのコツ
SSDSE データの構造を理解し、 適切なテーブルを選ぶ
地域別・年度別の比較で時空間的視点を入れる
1つの分析で多角的に切り口を変える
仮説と発見の両方を持つ
ストーリーラインを明確に
図表を1枚1枚作り込む
政策提言や実務的意義に繋げる
🗺️ 概念マップ — 3つの視点で体系を理解する
VAR(ベクトル自己回帰) がデータサイエンスの体系の中でどこに位置するか を、 3つの異なる視点で可視化します。 同じ情報でも見方を変えると気付きが変わります。
📍 体系階層のパス
🌐 統計・データサイエンス › 時系列 › 予測 › VAR(ベクトル自己回帰) (複数系列を同時に扱う自己回帰)
① 🔗 関係マップ — 「他の手法とどう繋がっているか」
中心に VAR(ベクトル自己回帰) を置き、 そこから 時系列分析・ARIMA・指数平滑法 計 3 個の用語へ、 前提・兄弟・発展形といった関係を矢印で結んでいます。 線がどちら向きかを見れば、 先に読むべき用語 とあとから読む用語 が分かります。 ノードはドラッグ で動かせ、 ホイールでズーム 、 クリックでその用語のページへ遷移 します。
凡例: 現在の用語 上位カテゴリ 兄弟(並列) 前提 発展形 応用先 2階層先
② ⭕ 包含マップ — 「どのカテゴリに含まれているか」
大きな円が小さな円を包含 する Circle Packing 図。 「VAR(ベクトル自己回帰)」は緑色でハイライト 。
カテゴリ円をクリック :その内部にズームイン
白背景クリック :1階層戻る
用語円をクリック :詳細ページへ遷移
マウスホバー :階層パス表示
③ 🌳 ツリーマップ — 「面積で見るボリューム比較」
長方形を入れ子に分割した Treemap 図。 各分野の規模感 を面積で比較。 「VAR(ベクトル自己回帰)」は緑色でハイライト 。
カテゴリ矩形をクリック :その内部にドリルダウン
パンくず(上のリンク)クリック :その階層に戻る
用語矩形をクリック :詳細ページへ遷移
マウスホバー :階層パスと値を表示
🎯 3つのマップの使い分け
マップ
分かること
こんな時に見る
🔗 関係マップ 手法間の横の関係 (前提→発展→応用) 「次に何を学べばよい?」 学習順序の判断
⭕ 包含マップ 分類体系の入れ子構造 (上位⊃下位) 「この手法はどんなジャンルに属する?」
🌳 ツリーマップ 分野の規模比較 (面積=ボリューム) 「データサイエンス全体の俯瞰像」
💡 3 つの図は同じ位置関係を別の角度から描いています。 関係マップは VAR(ベクトル自己回帰) の隣に何が並ぶか を、 包含マップとツリーマップは 統計・データサイエンス → 予測 → VAR(ベクトル自己回帰) という入れ子の位置 を示します。 「予測には他に何があったか」を思い出したいときは包含マップを、 「次に何を読むか」を決めたいときは関係マップを開いてください。
🗺 概念マップ — 完全強化版
🔗 隣接手法への橋渡し
VAR (Vector AutoRegression、 ベクトル自己回帰) は多変量時系列の予測・因果分析の中核手法で、 以下と接続する。
上流 (前処理) : 定常性 (ADF/PP) で各系列の定常性確認、 階差化で非定常を解消、 共和分検定 (Johansen) で長期均衡を判定
並列 (代替モデル) : ARIMA (単変量)、 VECM (共和分系列用)、 状態空間モデル 、 動的因子モデル
下流 (分析) : インパルス応答関数 (IRF) でショックの伝播分析、 グレンジャー因果性検定 、 分散分解
SSDSE-B-2026 の年次データで「総人口 A1101 → 出生数 A4101」の関係を VAR(p) で推定し、 グレンジャー因果性で「先行関係」を統計的に検証する流れが標準。 ラグ次数 p は AIC/BIC で選定する。
🌳 手法選択フロー
「var」を含む手法選択は、 データの性質・分析目的・運用制約の 3 軸で決まる。 以下に典型シナリオと対応する手法の組合せを示す。
VAR の典型シナリオ別 手法選択
シナリオ 重視する観点 候補手法
変数 1 本のみ (例: 県別 GDP 単独予測) 単変量、 ラグと階差で十分 ARIMA(p,d,q) / AR(p) / 指数平滑
変数 2-10 本、 全て定常 (例: 失業率・物価・金利) 相互フィードバック / インパルス応答 VAR(p) + AIC でラグ選定 / IRF
変数が非定常だが共和分関係あり 長期均衡を保ちつつ短期動学 VECM (誤差修正モデル) / Johansen 検定
変数が 10 本以上 (高次元、 例: 47 都道府県 GDP) パラメータ爆発 (p×k² 個) Bayesian VAR / FAVAR / Sparse VAR (LASSO)
構造的解釈が必要 (因果方向の同定) 同時性のある外生ショック分離 SVAR (構造 VAR) / Cholesky 分解 / 符号制約
レジーム変化・季節性が顕著 非線形 / 状態依存 Markov-Switching VAR / 状態空間モデル / VARMAX
選んだ後の検証ステップ
前処理確認 : 標準化 / 欠損処理 / カテゴリ変数のエンコード が適切か
ハイパラ調整 : 交差検証で安定する値を選ぶ
性能評価 : タスクに応じた指標 (RMSE / Accuracy / F1 / AUC / シルエット等) を複数併用
頑健性チェック : 別手法 / 別シードで結果が大きく違わないか確認
解釈 : 結果を分野知識と照らし合わせ、 意味のある発見になっているか検討
📝 補足:直感・落とし穴・発展をもう一段深く(追記)
すでに上の各セクションで直感・落とし穴・発展を扱っていますが、 ここでは SSDSE-B-2026 の実測値(東京都 2012–2023 年の 12 時点) を使って、 とくに初学者が VAR で踏みがちな罠を「数字で」体感できるよう補足します。
🎨 直感 — VAR は「会話の書き起こし」
複数人の会話を思い浮かべてください。 いま誰かが発する一言は、 直前に自分が言ったこと と相手が言ったこと の両方に反応して決まります。 VAR(1) はまさにこの「1 つ前の発言(ラグ 1)を全員ぶん見て、 次の一言を予測する」仕組み。 係数行列 A の対角成分は「自分の直前の発言をどれだけ引きずるか(粘り)」、 非対角成分は「相手の発言にどれだけ引っ張られるか(波及)」です。 単回帰を別々に 2 本引くのと違い、 VAR は全員の発言を 1 つの連立システム として同時に扱うため、 「A が B に効き、 B も A に効く」という双方向の会話(フィードバック)を切り捨てずに表現できます。
⚠️ 実データで踏む落とし穴(東京都 2012–2023, SSDSE-B-2026 実測)
東京都の 総人口 A1101 と 出生数 A4101 を年次で並べると、 実測でこうなっています(抜粋・単位は人)。
年 総人口 A1101 出生数 A4101
2012 13,234,000 107,401
2015 13,515,271 113,194
2019 14,007,000 101,818
2023 14,086,000 86,348
(12 時点。 人口は増加トレンド、 出生数は 2015 年頃を境に減少トレンド)
①「相関 −0.76」を因果と読むと大やけど(見せかけの回帰) :この 12 時点で総人口と出生数の 水準(レベル)どうしの相関は約 −0.76 という強い負の値になります。 しかし「人口が増えると子どもが減る」わけではなく、 両系列がそれぞれ別方向のトレンドを持つために生じた 見せかけの相関 です。 実際、 階差(前年差)どうしの相関は約 +0.35 と符号すら逆転します。 VAR に入れる前に 定常化 を怠ると、 この罠にそのまま落ちます。
② 推定係数が「ほぼ 1」=単位根のサイン :この 2 系列を水準のまま VAR(1) で回すと、 人口の自己回帰係数 a₁₁ は 約 0.996 と 1 のすぐ近くに張り付きます。 これは系列が非定常(単位根に近い)ことの典型的な兆候で、 安定条件「全固有値の絶対値 < 1」を辛うじて満たすかどうかの綱渡り状態。 ADF 検定 で確認し、 階差化や共和分(VECM)を検討すべき合図です。
③ スケールを揃えないと係数が比較できない :人口は約 1.4×10⁷、 出生数は約 1×10⁵ と 100 倍以上スケールが違う ため、 生の係数行列にはクロス項として 5 を超える大きな値が現れることがあります。 これは「効果が強い」のではなく単位の違いの反映です。 変数間の波及の強さを比べたいときは、 標準化(z 化)してから解釈するのが安全です。
④ n=12 は VAR には短すぎる :1 県あたり 12 時点しかない一方、 2 変量 VAR(1) でも推定パラメータは切片込みで 6 個。 目安 n ≫ k²p を満たさず、 係数は不安定です。 本ページの数値は 手法の流れを体感するための教材例 であり、 実務では十分な期間長を確保するか、 パネル 方向(47 都道府県)を活かす設計にします。
※ 上記の相関・係数は SSDSE-B-2026(東京都・2012–2023)の実測値から算出。 なお図A のシミュレータで表示している a₁₁=0.85 等の係数は、 挙動を示すための架空 の値です。
🚀 発展 — 「係数を読む」から「構造を語る」へ
因果の向きを言いたいなら SVAR :VAR の係数は予測上の関係にすぎません。 同時点の因果方向を主張するには、 残差共分散 行列 Σ を Cholesky 分解や符号制約で識別する 構造 VAR(SVAR) へ進みます。 その第一歩が グレンジャー因果 (予測的因果)です。
非定常でも捨てない VECM :②で見たように水準が非定常でも、 系列の線形結合が定常(共和分)なら、 単純な階差化は長期均衡の情報を捨ててしまいます。 誤差修正項を加えた VECM が受け皿です。
高次元は縮約する :変数を増やすとパラメータが k²p で爆発します。 事前分布で抑える BVAR 、 多数変数を因子に要約する FAVAR 、 正則化で疎にする Sparse VAR が定石。 単変量に戻るなら ARIMA 、 時系列の土台は 時系列解析 ・自己相関 を復習しましょう。
ラグ選択は規準+診断のセット :AIC / BIC で候補を絞り、 残差診断(Portmanteau 検定)でホワイトノイズ性を必ず確認。 規準だけの機械選択は残差相関を見逃します。
🔗 関連ページ(本ページ内リンクの再掲・実在ページのみ)