パネルデータ 関連の補強キーワード。 クリックで該当箇所へ:
🍰 まずはやさしく
同じ人を追いかける日記のようなデータです。
原因と結果の関係を正しく知るために使います。
県ごとの出生率の変化を調べる時に便利です。
このデータの重要ポイントを短く解説します。
panel data を 30 秒で把握する重要ポイント:
🍰 まずはやさしく
複数の視点からまとめた用語集のページです。
データの扱い方を正しく学ぶために使います。
都道府県のデータを使った分析に役立ちます。
定義から注意点までを順番に説明します。
論文中に 「パネルデータ」として登場する用語。
パネルデータ とは:同じ対象(個体)を複数時点で観測したデータ。クロスセクション+時系列の構造。
本ページでは「panel data」を扱う。 統計データ分析コンペティション (2026) の教材で、 SSDSE-B-2026 (47 都道府県 × 複数年 × 100 超列) の実データを使った再現可能な学習を目指す。
「panel data」は統計・データサイエンスの体系における重要概念のひとつ。 本ページは「定義・直感・数式・実装・落とし穴・関連手法」の 6 視点で構成され、 各視点は独立して読めるが順序通り読むと体系的な理解が得られる。
🍰 まずはやさしく
横の比較と縦の比較を合わせたものです。
変化の理由がどこにあるかを探るために使います。
同じ生徒の身長を毎年測るイメージです。
データの仕組みを直感的に理解しましょう。
パネルデータは クロスセクション(横断面)と時系列の合体 です。 例として SSDSE-B-2026 で 北海道・東京都・大阪府 という個体 ($i$) を 2015 年・2018 年・2021 年 という時点 ($t$) で観測すれば、 個体 3 × 時点 3 = 9 観測のミニパネルになります。 横の比較(地域差)と縦の比較(時間変化)を 同時に 行えるため、 「東京の出生率が下がったのは年代の影響か、それとも東京固有の事情か」を分離できる点が最大の魅力です。
比喩としては 同じ生徒の身長を毎年測る のがパネルデータ、 毎年違うクラスの平均身長 はクロスセクション(pooled cross-section)、 同一クラスの平均だけを毎年 取るのが時系列です。 個体識別子 (Code/Prefecture) と時点識別子 (Year) を確実に保持することが、 後の固定効果・ランダム効果モデルの前提になります。
パネルデータは 個体(行)× 時点(列)の 2 次元 構造です。 スライダーで個体数 $N$・時点数 $T$ を変え、 グリッド上で ある個体の時系列(横方向 →) と ある時点の横断面(縦方向 ↓) をハイライトしながら、 観測数 $N\times T$ と分散分解(個体間 between/個体内 within)がどう変わるかを体感してください。 グリッドのマスをタップ/クリックすると注目する個体 $i$・時点 $t$ を切り替えられます。 $T=1$ にすると横断面データ、 $N=1$ にすると時系列データ に退化する様子が最大のポイントです。
※ グリッドの数値は「高齢化率(%)風」のデモ用合成データ(決定論的に生成・毎回同じ)です。 実データの分散分解の実測値は下の 🧮 SSDSE-B 実値計算例(between 約 69.8%/within 約 30.1%)を参照。
同じ変数でも「個体間(between)のばらつき」と「個体内(within)の年次変動」は別物です。 表示を切り替えて、 プールした生データ・個体平均だけ・個体平均を引いた偏差(within 変換)を見比べてください。 N=1 では between が消え、 T=1 では within が消えます。
全分散 = 個体間分散 + 個体内分散(各観測を母数 $N\times T$ で割った定義なので厳密に加法的)。 固定効果モデルは between を捨てて within だけ で係数を識別します。
直感: パネルデータは「同じ対象を繰り返し観測した 2 次元データ」です。 横断面(ある年に全県を 1 回だけ)でも時系列(1 県を長期に)でもなく、 その両方を同時に持つため、 「地域差(縦の比較)」と「時間変化(横の比較)」を分離できます。 グリッドで行方向にたどれば 1 個体の歴史(時系列)、 列方向にたどればある時点のスナップショット(横断面)になります。
よくある落とし穴: ① 系列相関—同一個体内の残差は時間的に相関するので、 通常の標準誤差は過小評価になり クラスタロバスト SE が必須。 ② 不均衡パネル(unbalanced)—個体ごとに観測年数が違うと、 上のグリッドのように綺麗な長方形にならない。 ③ 脱落(attrition)—退出する個体が体系的に異なると、 残った個体だけの分析にバイアスが乗る。 これらは横断面や単独時系列では現れない、 パネル特有の注意点です。
発展: 個体効果 $\mu_i$ を定数として消すのが 固定効果モデル(within 変換=上の「偏差」表示に対応)、 確率変数として扱うのが 変量効果モデル(between も使う)。 被説明変数のラグを右辺に入れる 動学パネル(Arellano-Bond GMM) では Nickell バイアスに注意します。 極限としては 横断面データ(T=1) と 時系列データ(N=1) がパネルの特殊ケースにあたります。
🍰 まずはやさしく
数式で表したデータのルールです。
地域や時間の個別の影響を取り除くために使います。
県の特性と時代の流れを分けて考えます。
計算式を使って詳しく定義していきます。
パネル回帰の最も一般的な構造は二元誤差成分モデルです。
$$ y_{it} = \alpha + \boldsymbol{x}_{it}^{\top}\boldsymbol{\beta} + \mu_i + \lambda_t + \varepsilon_{it}, \quad i=1,\dots,N,\ t=1,\dots,T $$ここで $y_{it}$ は個体 $i$ ・時点 $t$ の被説明変数、 $\mu_i$ は個体固有効果、 $\lambda_t$ は時点固有効果。 SSDSE-B-2026 ならば $i$ は 47 都道府県、 $t$ は調査年で、 $y$ を出生率、 $x$ を高齢化率・人口規模とすれば「地域要因 ($\mu_i$) と全国共通の景気要因 ($\lambda_t$) を吸収した純粋な政策効果 ($\beta$)」が推定できます。
| 記号 | 意味 | SSDSE-B-2026 での具体例 |
|---|---|---|
| $i$ | 個体(クロスセクション単位) | 47 都道府県 (Prefecture) |
| $t$ | 時点 | 調査年 (Year) |
| $\mu_i$ | 個体固定効果(時間で変わらない地域特性) | 気候・歴史・文化など測定困難な要因 |
| $\lambda_t$ | 時間効果(全国共通のショック) | コロナ禍・消費税増税・景気循環 |
| $\varepsilon_{it}$ | 特異誤差(残差) | 説明変数で捉えきれないランダムなブレ |
推定の際は、 個体固有効果 $\mu_i$ を 固定として扱うか(FE)、 ランダム変量として扱うか(RE) でモデルが分かれます。 Hausman 検定で選択するのが定番です。
47 都道府県 × 複数年のパネル構造を持つ SSDSE-B を擬似パネル化し、 固定効果モデルを推定する完全再現例。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | import pandas as pd, numpy as np import statsmodels.api as sm from linearmodels.panel import PanelOLS, RandomEffects, compare # SSDSE-B-2026 は 47都道府県 × 12年(2012-2023) の実パネル。 # 1行目=列コード, 2行目=日本語名 なので skiprows=[1] でコード行を列名にする df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) df = df.rename(columns={'SSDSE-B-2026': 'Year'}) # 先頭列が年度 for c in ['A1101', 'A1303', 'A4101']: df[c] = pd.to_numeric(df[c], errors='coerce') df['aging'] = df['A1303'] / df['A1101'] * 100 # 高齢化率(%) = 65歳以上/総人口 df['birth_rate'] = df['A4101'] / df['A1101'] * 1000 # 出生率(人口千対) = 出生数/総人口 df['log_pop'] = np.log(df['A1101']) # log 総人口 panel = df.set_index(['Prefecture', 'Year']) # (個体, 時点) の2次元 index y = panel['birth_rate'] X = sm.add_constant(panel[['aging', 'log_pop']]) # 固定効果モデル(県内変動のみ使用・県クラスタ標準誤差) fe = PanelOLS(y, X, entity_effects=True).fit(cov_type='clustered', cluster_entity=True) # 変量効果モデル(県間変動も使用、 仮定が満たされれば効率的) re = RandomEffects(y, X).fit() print(compare({'FE': fe, 'RE': re})) |
| 項目 | 値 | 参考 | 解釈 |
|---|---|---|---|
| FE | 高齢化率 | -0.354 (±0.029) | 県内で高齢化1pt↑→出生率(千対)約0.35↓ |
| RE | 高齢化率 | -0.358 (±0.008) | 県間+県内。 FE とほぼ一致 |
| FE | log(総人口) | +0.022 | 県内の人口規模変化の効果は小さい |
| Hausman | χ²(2) | 0.38 (p=0.83) | RE 棄却されず→本例は RE も可 |
👉 値は SSDSE-B-2026(2012-2023) の実測値。 同じ手順で他都道府県・他変数にも適用可能。
パネル分析の最大の価値は「個体内の変動だけ」を取り出して回帰できる点にあります。 SSDSE-B-2026 を使い、 高齢化率(65歳以上人口÷総人口)の分散を県間(between)と県内(within)に分解します。
「都道府県間のばらつき」と「都道府県内の年次変動」のどちらが大きいかを定量化し、 固定効果モデルが何を捨てるかを理解する。
SSDSE-B-2026 を「都道府県 × 年度」のパネルとして整形したもの。
between 分散 / within 分散の数値と比率。
SSDSE-B-2026 のような社会経済指標は通常、 「東京と沖縄の差」のような between 分散が支配的です。 固定効果モデルはこれを切り捨てて、 「同じ県の中での年次変動だけ」で係数を識別します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | import pandas as pd import numpy as np # 実パネル: 1行目=コード, 2行目=日本語名 → skiprows=[1], cp932 df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) df = df.rename(columns={'SSDSE-B-2026': 'Year'}) df['A1101'] = pd.to_numeric(df['A1101'], errors='coerce') df['A1303'] = pd.to_numeric(df['A1303'], errors='coerce') df['aging'] = df['A1303'] / df['A1101'] * 100 # 高齢化率(%) y = df['aging'] overall = y.mean() between = df.groupby('Prefecture')['aging'].mean() # 県平均 within = df['aging'] - df.groupby('Prefecture')['aging'].transform('mean') var_total = y.var() var_between = (between - overall).pow(2).mean() var_within = within.var() print(f'total = {var_total:.2f}') print(f'between = {var_between:.2f} ({100*var_between/var_total:.1f}%)') print(f'within = {var_within:.2f} ({100*var_within/var_total:.1f}%)') |
同じ個体(行)を時間(列方向に展開)で複数回観測したデータ。 ただし分析する際はlong-format(個体 ID、 時点、 値 の 3 列)に展開するのが標準。
T が 2-3 程度では individual fixed effects は推定誤差が大きい。 N が大きければ実用上問題ない(Nickell バイアスは N に依らない)。
DID は「個体固定効果 + 時間固定効果 + 処置ダミー」の二元固定効果モデルと数学的に同値。 二期間ならば差分が one-way fixed effects と等価。
パネルでは個体内の系列相関が必ず存在するため、 通常の SE は過小評価される。 個体クラスタロバスト SE が標準。
個体ごとに観測期間が異なるパネルは linearmodels.PanelOLS で自動対応。 ただし脱落理由が処置と相関する場合は IPW が必要。
被説明変数のラグを右辺に入れると Nickell バイアス。 GMM(Arellano-Bond ・ Blundell-Bond)で対処。
パネルは「N × T = 観測数」なので、 T が 10 もあれば 47 × 10 = 470 で十分。 ただし個体ダミーの数に注意。
2 期間以上で形式的にはパネル。 因果推論なら 3 期間以上で前期・処置期・後期の比較が可能。
同じ個体を追跡するのがパネル、 各期に独立サンプリングがリピートクロスセクション。 SSDSE-B-2026 は都道府県を毎年観測するのでパネル。
「全国共通のショック × 県固有の応答」は二元固定効果では拾えない。 これは交互作用項や Mundlak 装置で補う。
合成データで N×T パネルのバランス度合いを計算する。
| 項目 | 値 |
|---|---|
| 個体数 N | 50 |
| 期間 T | 10 |
| バランス時 観測数 | 500 |
| 実際の観測 (欠損あり) | 450 |
1 2 3 4 5 6 | N, T = 50, 10 full = N * T observed = 450 balance = observed / full print(f"完全バランス: {full}") print(f"バランス度: {balance:.2f}") |
💬 手計算 (Step 2) 0.90 と Python 出力が完全一致。
ここでは SSDSE-B-2026(47 都道府県 × 12 年=564 行のバランスドパネル、2012〜2023) の実測値だけを使い、 「なぜパネルなのか」を 直感 → 落とし穴 → 発展 の順にもう一歩深掘りします。 数値はすべて data/raw/SSDSE-B-2026.csv(cp932・skiprows=[1])から実際に計算した値で、 合成データは使いません。
パネルは同じ個体(都道府県)を複数時点で追跡するため、 横断面(地域差)と時系列(時間変化)の良いとこ取りができます。 全 564 観測の分散を 個体間(between)と個体内(within)に分解すると、 変数ごとに「どちらのばらつきが主役か」がはっきりします(下表・実測)。 固定効果モデルは between を捨てて within だけで係数を識別するため、 within 比率が小さい変数ほど固定効果推定の情報量が乏しくなります。
| 変数 | 全分散 | between(個体間) | within(個体内) |
|---|---|---|---|
| 高齢化率 aging | 12.11 | 8.44(69.8%) | 3.65(30.1%) |
| 出生率 birth_rate(千対) | 1.23 | 0.66(53.4%) | 0.57(46.5%) |
👉 高齢化率は「東京と秋田の差」= between が約 7 割で支配的なのに対し、 出生率は within(同じ県の年次変動)も約半分を占める。 同じ 47 県パネルでも変数によって「パネルにする旨味」が違うと分かる。
個体差 $\mu_i$ を無視して 564 行をひとつの回帰に放り込む プールド OLS は、 $\mu_i$ が説明変数と相関すると偏ります。 同じ「高齢化率 → 出生率(千対)」を 3 通りの推定量で出すと、 推定値そのものが動きます(実測)。
| 推定量 | 使う変動 | aging 係数(実測) | 読み方 |
|---|---|---|---|
| プールド OLS | between+within を混合 | −0.317 | 両者の分散加重平均。単独で使うと危険 |
| between 推定 | 県平均のみ(横断面) | −0.283 | 「高齢な県ほど出生率低い」地域差の関係 |
| within(固定効果) | 県内の年次変動のみ | −0.354 | 同じ県内で高齢化1pt↑→出生率0.35↓ |
👉 プールド OLS(−0.317) は between(−0.283) と within(−0.354) の中間に位置する。 これは「プールド係数は between と within の分散加重平均」という定理そのものの実演。 因果的に意味があるのは通常 within(固定効果) の方で、 プールド OLS の値を鵜呑みにすると地域差(時間不変交絡)の混入を見逃す。
同一県内の残差は年をまたいで相関する(系列相関/クラスタ相関)ため、 それを無視した 素の標準誤差は過小評価になり、 検定が偽陽性に傾きます。 プールド OLS の aging 係数について、 素の SE と 県クラスタ・ロバスト SE を実測で比べると差は歴然です。
👉 素の SE を信じると t 値が約 3 倍に水増しされ、 「強く有意」と誤読する。 パネルでは cov_type='clustered', cluster_entity=True(県クラスタ)が既定と考えるべき。 ただしクラスタ数 N=47 は漸近近似のぎりぎりの水準で、 ワイルドブートストラップや Driscoll-Kraay(横断相関にも頑健)での再確認が安全。
固定効果(within 変換)は各県の平均を引くため、 県ごとに一定の変数(面積・海に面するか・県庁所在地など)は差し引きゼロになり係数が推定できません。 「固定効果は時間不変の交絡だけを除去する」裏返しで、 時間とともに動く未観測交絡(社会規範の変化など)は残ります。 時間不変変数の効果を見たいなら 変量効果モデル や Mundlak 装置(県平均を共変量に加える)を使います。 さらに被説明変数のラグを右辺に入れる動的パネルでは、 within 変換後に $y_{i,t-1}$ と誤差が相関して Nickell バイアス(T が短いほど深刻)が生じ、 Arellano-Bond GMM が必要になります。 不均衡パネル・脱落(attrition)の注意点は ⚠️ 落とし穴セクション を参照。
time_effects=True)。 二期間なら 差分の差(DID) と数学的に等価。 staggered な処置では TWFE が偏りうる点に注意。上の 🧮 実値計算例① で df に aging / birth_rate / log_pop を作った続きに実行すると、 本節の実測値(pooled −0.317 / between −0.283 / within −0.354、 naiveSE 0.0094 / clusterSE 0.0267)を再現できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | import pandas as pd import numpy as np # この抜粋だけで動くように、都道府県 × 年度のパネルを作り直す df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) df = df.rename(columns={'SSDSE-B-2026': 'Year'}) df['aging'] = df['A1303'] / df['A1101'] * 100 # 高齢化率 (%) df['log_pop'] = np.log(df['A1101']) # 人口の対数 df['birth_rate'] = df['A4101'] / df['A1101'] * 1000 # 出生率 (人口千対) df = df.dropna(subset=['aging', 'log_pop', 'birth_rate']) import statsmodels.api as sm X = sm.add_constant(df[['aging', 'log_pop']]) # (1) プールド OLS: 個体差を無視して 564 行を 1 本の回帰に pooled = sm.OLS(df['birth_rate'], X).fit() # (2) between 推定: 県平均だけ(横断面の関係) m = df.groupby('Prefecture')[['aging', 'log_pop', 'birth_rate']].mean() between = sm.OLS(m['birth_rate'], sm.add_constant(m[['aging', 'log_pop']])).fit() # (3) within(固定効果)推定: 県平均を引いた偏差で回帰 d = df.copy() for v in ['aging', 'log_pop', 'birth_rate']: d[v] = d[v] - d.groupby('Prefecture')[v].transform('mean') within = sm.OLS(d['birth_rate'], d[['aging', 'log_pop']]).fit() for name, r in [('pooled ', pooled), ('between', between), ('within ', within)]: print(name, round(r.params['aging'], 3)) naive = pooled.bse['aging'] cluster = sm.OLS(df['birth_rate'], X).fit( cov_type='cluster', cov_kwds={'groups': df['Prefecture']}).bse['aging'] print('naiveSE', round(naive, 4), 'clusterSE', round(cluster, 4)) |
👉 プールド係数が between と within の中間に来ること、 クラスタ SE が素の SE の約 2.9 倍になることが同時に確認できる。 これがパネルデータを「そのままプールしてはいけない」二大理由の実測的な裏付け。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | import pandas as pd import numpy as np # この抜粋だけで動くように、都道府県 × 年度のパネルを作り直す df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) df = df.rename(columns={'SSDSE-B-2026': 'Year'}) df['aging'] = df['A1303'] / df['A1101'] * 100 # 高齢化率 (%) df['log_pop'] = np.log(df['A1101']) # 人口の対数 df['birth_rate'] = df['A4101'] / df['A1101'] * 1000 # 出生率 (人口千対) df = df.dropna(subset=['aging', 'log_pop', 'birth_rate']) from sklearn.linear_model import LinearRegression # Within変換を手動実装(教育用): 各県の平均を引いてから回帰 panel_df = df.set_index(['Prefecture', 'Year']) y = panel_df['birth_rate'] X = panel_df[['aging', 'log_pop']] # 個体(県)内平均からの偏差 y_w = y - y.groupby(level='Prefecture').transform('mean') X_w = X - X.groupby(level='Prefecture').transform('mean') m = LinearRegression(fit_intercept=False).fit(X_w, y_w) print('FE係数(手動Within):', dict(zip(X.columns, m.coef_.round(4)))) |
1 2 3 4 5 6 7 8 9 | from scipy import stats # Hausman 検定の核心:β_FE − β_RE を分散差で評価(簡易 z 版) # 上の compare() で得た高齢化率の係数(実測値)を使う beta_fe, se_fe = -0.3536, 0.0291 beta_re, se_re = -0.3576, 0.0079 z = (beta_fe - beta_re) / np.sqrt(se_fe**2 - se_re**2 + 1e-12) p = 2 * (1 - stats.norm.cdf(abs(z))) print(f'Hausman z = {z:.2f}, p = {p:.4f}') print('p < 0.05 なら FE を採用、 そうでなければ RE で良い') |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | import optuna from linearmodels.panel import PanelOLS def objective(trial): # 時間効果の有無、 ラグ次数を選ぶ use_time = trial.suggest_categorical('time_effects', [True, False]) lag = trial.suggest_int('lag', 0, 2) # 簡易実装:BIC で評価 if lag > 0: pl = panel.assign( lag1=panel.groupby(level='Prefecture')['birth_rate'].shift(lag)).dropna() X_cols = ['aging', 'log_pop', 'lag1'] m = PanelOLS(pl['birth_rate'], sm.add_constant(pl[X_cols]), entity_effects=True, time_effects=use_time).fit() else: m = PanelOLS(panel['birth_rate'], sm.add_constant(panel[['aging', 'log_pop']]), entity_effects=True, time_effects=use_time).fit() return -2 * m.loglik + np.log(m.nobs) * (len(m.params) + 1) study = optuna.create_study(direction='minimize', sampler=optuna.samplers.TPESampler(seed=0)) study.optimize(objective, n_trials=20) print('Best:', study.best_params, 'BIC:', study.best_value) |
| ライブラリ / 関数 | 用途 |
|---|---|
linearmodels.panel.PanelOLS | 固定効果・変量効果・First Difference 推定 |
statsmodels.regression.mixed_linear_model.MixedLM | 混合効果モデル(ベイズ的) |
pyfixest | 高速な固定効果回帰(R の fixest 互換) |
differences | Callaway & Sant'Anna 等の DID 推定量 |
cov_type='clustered')。 クラスタ数が少ない(n=47 県)場合は、 ワイルドブートストラップ補正も検討。 Cameron & Miller (2015) のサーベイ参照。
time_effects=True も同時に指定するのが現代の標準。 双方向固定効果(two-way FE)と呼ばれる。 最近は Goodman-Bacon の DID 分解で問題点が指摘されている。
パネルデータは「個体 × 時点」の二次元構造を持つため、 通常のクロスセクションや単独の時系列とは前提も解析手順も異なる。 ここでは実務で頻発する 4 つの観点(適用条件・限界・誤解回避・チェックリスト)を整理し、 SSDSE-B-2026(47 都道府県 × 約 7 年)を例にいつ・どこで気を付けるかを具体化する。
💬 パネルデータ分析は「時系列+クロスセクション」の合わせ技。 表面上はリッチな情報を持つように見えても、 標準誤差・並行トレンド・欠損構造で躓くと結論が一変する。 上記チェックリストを毎回踏むことで、 「もっともらしいが間違った因果推論」を防ぐ。
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 |
| 日本語 | 英語 |
|---|---|
| 統計的に有意 | 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) |
パネルデータ がデータサイエンスの体系の中でどこに位置するかを、 3つの異なる視点で可視化します。 同じ情報でも見方を変えると気付きが変わります。
🌐 統計・データサイエンス › 因果推論 › パネル分析 › パネルデータ
中心に パネルデータ を置き、 そこから 時系列分析・ARIMA・VAR 計 3 個の用語へ、 前提・兄弟・発展形といった関係を矢印で結んでいます。 線がどちら向きかを見れば、 先に読むべき用語とあとから読む用語が分かります。 ノードはドラッグで動かせ、 ホイールでズーム、 クリックでその用語のページへ遷移します。
大きな円が小さな円を包含する Circle Packing 図。 「パネルデータ」は緑色でハイライト。
長方形を入れ子に分割した Treemap 図。 各分野の規模感を面積で比較。 「パネルデータ」は緑色でハイライト。
| マップ | 分かること | こんな時に見る |
|---|---|---|
| 🔗 関係マップ | 手法間の横の関係(前提→発展→応用) | 「次に何を学べばよい?」 学習順序の判断 |
| ⭕ 包含マップ | 分類体系の入れ子構造(上位⊃下位) | 「この手法はどんなジャンルに属する?」 |
| 🌳 ツリーマップ | 分野の規模比較(面積=ボリューム) | 「データサイエンス全体の俯瞰像」 |
💡 3 つの図は同じ位置関係を別の角度から描いています。 関係マップは パネルデータ の隣に何が並ぶかを、 包含マップとツリーマップは 統計・データサイエンス → パネル分析 → パネルデータ という入れ子の位置を示します。 「パネル分析には他に何があったか」を思い出したいときは包含マップを、 「次に何を読むか」を決めたいときは関係マップを開いてください。
「パネルデータ」は単独で完結せず、 前後の手法と組み合わさって価値が発揮される。 入力データの準備 (上流)・同目的の代替手法との比較 (並列)・結果の活用 (下流) という 3 軸で隣接領域を整理する。
この上流・並列・下流の対応を地図化することで、 「パネルデータ」を中核に据えた分析パイプライン (データ準備 → 手法選択 → 結果の検証と展開) の全体像が見えてくる。
このページは「パネルデータ」を SSDSE-B-2026 (47 都道府県 × 多変量) を題材に体系的に学ぶための一気通貫の教材です。 単なる用語定義集ではなく、 「直感 → 数式 → 実装 → 落とし穴 → 関連手法」 という流れで一周することで、 業務での意思決定にそのまま使える知識に組み上げます。
本ページで取り上げた手法・記号・コード例は、 すべて実データの 47 都道府県を入力として動作する形にしてあります。 合成データに依存しないため、 SSDSE-B-2026 を data/raw/SSDSE-B-2026.csv として配置するだけでコード片を再現できます。
関連グループ教材へのリンクを使い、 「この用語が属する大きな分野」を俯瞰してから戻ってくると、 知識が一段抽象化された形で定着します。 用語ページは点、 グループ教材は線、 概念マップは面 — 三層を往復しながら学習を進めてください。
本ページの内容に不足を感じたら、 相関ページ(correlation.html)を参照基準として、 ご自身の解釈を加筆していくことを推奨します。 教材の完成形ではなく、 学習者自身の理解の出発点として位置付けてください。
最後に、 SSDSE-B-2026 の 47 都道府県データは「N=47 と少ない」という構造的制約があります。 統計検定の漸近近似が崩れる場面、 単一の県(東京都・沖縄県)が全体傾向を支配する場面、 標準誤差が過小評価される場面 — これらは本ページの随所で繰り返し注意喚起しました。 「実データの小ささを軽視しない」 という姿勢が、 実務でのデータサイエンティストの基本姿勢です。
パネルデータ(縦断データ)は「個体 × 時点」の 2 次元構造。 関連する 3 つの視覚で、 パネル独特の依存・時系列性・因果推定の枠組みを掴む。
以下の練習問題で理解度を確認しよう。 答えはあなた自身で考えて、 解説を読みながら整理する。
💬 これらの問題に答えられれば、 パネルデータ分析の基礎は身に付いている。 自分で実データに当てはめて手を動かすことが、 概念定着への最短路。