🔖 キーワード索引
このページ内のセクションへ素早く飛べます(クリックで該当箇所へジャンプ):
「横断面データ (cross-sectional data) 」は同一時点で複数主体を観測したデータ形式。 47 都道府県 × 1 時点、 1000 世帯 × 1 調査回など。 時系列データ・パネルデータと対比される。 本ページでは横断面データの定義・標本抽出設計・回帰分析の前提・時系列との違い・パネルへの拡張を整理する。
同一時点 i.i.d. 時系列データとの対比 パネルデータへの拡張 SSDSE-B-2026 47県 標本抽出設計 OLS 回帰の前提 不均一分散 (heteroskedasticity) クラスター標準誤差 空間相関
これらのキーワードは「同一時点の複数主体観測 → i.i.d. 仮定 → OLS / GLM の適用 → パネル化で因果推論へ」という横断面データの典型的学習動線を構成する。
💡 30秒で分かる結論 — 横断データ
🍰 まずはやさしく
ある瞬間の様子を切り取った写真のようなデータです。
グループの中での違いを比べるために使います。
クラス全員の今の身長を測るような例です。
この章では横断データの基本と注意点を読みます。
一言で :ある一時点 で複数の主体(個体)を観測したデータ。 47 都道府県の 2023 年データなどが典型。
時系列データ(同一個体を時間で追う)と対比される概念。 個体間の 横の比較・要因分析 に向くが、 時間変化は分からない。
縦(時間)×横(個体)の両方を持つ パネルデータ が情報量は最大。
SSDSE-B も基本は横断(年次更新だが各年は独立した断面)。
絶対に外せない落とし穴 :横断データからは因果を主張できない のが最大の注意点。 ⚠️ セクションの各項目に目を通すこと。
レポートでは :『出典・期間・サンプル数・前提・限界』の 5 点を明示。
📍 あなたが今見ているもの
🍰 まずはやさしく
今の状態をまとめた一覧表のようなデータです。
データの種類を正しく見分けるために使います。
47都道府県の最新データを比べるような例です。
このページでは12の項目に分けて詳しく読みます。
SSDSE-B-2026 は 2023 年時点の 47 都道府県データ = 典型的な横断データ。 時系列データ・パネルデータと対比される。 OLS 重回帰の基本想定。
「47都道府県の高齢化率」「全国の事業所の従業員数」 — こうした「同時点・複数主体」のデータは典型的な横断データです。
本ページは 横断データ(Cross-Sectional Data) を、 ジャストインタイム型データサイエンス教育の文脈で 12 のセクションに分けて解説します。 上から順に読まなくても、 「🔖 キーワード索引」から必要箇所だけ拾い読みすることもできます。
🎨 直感で掴む — 横断データとは何者か
🍰 まずはやさしく
みんなが同時に写っている集合写真のようなものです。
個体ごとの特徴を比べるために使います。
スマホの利用時間をクラス全員分集めるような例です。
このあと計算方法や使い方の落とし穴を読みます。
横断データとは「同じ時点 での複数主体 (47 都道府県・1000 人の回答者・100 社の財務指標) を 1 枚の表に並べたデータ」。 縦軸は時間ではなく 主体 。 SSDSE-B-2026 の 2023 年スライス (47 行 × 多変量) はまさに横断データで、 OLS 回帰や PCA の入力として直接使える。 「2010 年から 2023 年までの推移」のように時間方向に伸ばすと時系列、 両方を持つとパネルデータと呼び方が変わる。
場面 横断データが登場する例 何が分かるか
論文の Methods 節 「横断データを用いて分析した」 手法の前提と限界が文脈に乗る
実務レポート 「横断データの観点で評価」 意思決定の根拠が明確化
教育・学習 SSDSE-B-2026 を題材に演習 実データで本物の感覚が得られる
政策・社会 データ種 分野で標準的に登場 EBPM や DX の議論に直結
本ページではこのあと、 数式(または定義)・SSDSE 実データ計算・Python実装・落とし穴 を順番に追いかけて、 用語を「使える知識」にしていきます。
写真に例えると:
横断データ=集合写真1枚 (全員が同時に写っている) 時系列データ=1人の連続写真 (同じ人を時間で追う) パネル=全員の連続写真 (横と縦を両方持つ) 「太郎は3年で身長10cm伸びた」は時系列の話、 「クラスの平均身長は男子の方が高い」は横断の話。 質問の種類で必要なデータが変わります。
🎮 触って理解する — 同じデータを3通りに切る
SSDSE-B-2026 は実は 47都道府県 × 12年(2012〜2023年)= 564観測 の大きな箱です。 この同じ箱からどの断面を切り出すか で、 分析単位も「言えること」も変わります。 下のボタンで 横断 / 時系列 / パネル を切り替え、 グリッド上でどこがハイライトされるかを体感してください(セルをタップすると切り出す年・県を変えられます)。 数値は A1101(総人口・万人)の実測値です。
◧ 横断(1年×47県)
◨ 時系列(1県×12年)
▦ パネル(47県×12年)
横断モード:ある1年を選んで、その年の県間の違いを切り出します。セルをタップすると比較する年が変わります。
※表示は6県の抜粋。実際のSSDSE-B-2026は全47県×12年=564行。数値は総人口(万人・実測)。
分析単位(サンプル) n = 47
2023年の47県を横に並べた1断面
切り出している軸 個体軸=あり(47県) 時間軸=なし(1時点に固定)
この構造で言えること 「どの県が多い/少ないか」という地域間比較 。時間変化は分からない。
📋 3構造 → 何が分析できるか(対応表)
構造 分析単位 主にできる分析 できないこと
横断 47県 × 1時点 (n=47) 地域間比較・格差の記述・相関/回帰・クラスタリング 時間変化・因果の時間順序
時系列 1県 × 12年 (T=12) 推移・トレンド・変化率・将来予測 県間の差の説明
パネル 47県 × 12年 (N×T=564) 両方+固定効果 で時不変の個体差を除去→交絡を軽減 時不変×時変の完全分離は要工夫
⚠️ 横断(1時点だけ)の落とし穴
因果の時間順序が不明 :横断では「Xが先か Yが先か」を観察できない。 例:高齢化率と財政力の相関を見ても、どちらが原因かは1時点では決められない。
エコロジカル相関(生態学的誤謬) :県平均どうしの相関が、個人レベルの関係と一致する保証はない(Robinson, 1950)。
一時点の特殊性 :その年だけの景気・災害・制度変更の影響を「普遍的な構造」と誤読しやすい。 結論には必ず時点を併記する。
→ 時間軸を足して(時系列・パネル化して)はじめて、東京は2012→2023で+85.2万、秋田は−14.9万といった変化 が見え、固定効果で個体差を除ける。
📐 数式・定義
🍰 まずはやさしく
時間を固定して集めたデータの集まりのことです。
平均や相関(関係性)を計算するために使います。
部活のメンバー全員の体重を一度に測るような例です。
ここでは数式を使った正確な定義について読みます。
横断データは「ある時点 $t_0$ における複数個体 $i$ の観測集合」 として形式化される。 時間添字 $t$ が固定 (実質ない) 点が、 時系列・パネルとの本質的な違い。
① 形式: $$ D_{\text{cross}} = \{(y_i, \mathbf{x}_i) \mid i=1,2,\dots,n\}, \quad t = t_0 \text{ (固定)} $$
② 平均・分散・相関といった個体間集計量 を計算する: $$ \bar{y} = \frac{1}{n}\sum_{i=1}^{n} y_i, \quad s_{xy} = \frac{1}{n-1}\sum_{i=1}^{n}(x_i - \bar{x})(y_i - \bar{y}) $$
③ パネルとの対比: $D_{\text{panel}} = \{(y_{it}, \mathbf{x}_{it}) \mid i=1\dots n, t=1\dots T\}$。 添字が 1 本減ることで「同一個体の時間内変化」を追えない代わり、 同一時点での多個体比較に専念できる。
📐 横断面データの厳密定義と典型例
横断面データ(Cross-sectional Data)とは、 「ある特定時点(または短期間)に、 複数の主体(個人・企業・地域など)について同時に観測された」データです。 主体添字 $i$ のみを持ち、 時間添字 $t$ を持たない(または固定)点が特徴です。
$$\text{横断面}: \{(y_i, x_i) : i = 1, 2, \dots, n\}$$
$$\text{時系列}: \{(y_t, x_t) : t = 1, 2, \dots, T\}$$
$$\text{パネル}: \{(y_{it}, x_{it}) : i = 1, \dots, n,\ t = 1, \dots, T\}$$
🔬 数式を言葉で読み解く(その 1:3 つのデータ構造比較)
構造 添字 典型的サイズ SSDSE-B-2026 での該当
横断面 $i$ のみ $n=47$(都道府県) 2026 年版そのもの
時系列 $t$ のみ $T=10\sim100$(年) 全国合計の年次推移
パネル $i, t$ 両方 $n \times T$ SSDSE-B 過去年版を連結
反復横断面 $i_t, t$(i は各 t で別人) $n_t \times T$ 国民生活基礎調査
SSDSE-B-2026 は典型的な横断面データで、 「2026 年公表時点での 47 都道府県」を切り取った断面です。 時間的変動は捕えられないので、 推論できるのは「時点間の差異」ではなく「主体間の差異」になります。
🔬 数式・定義を「言葉」で読み解く
先ほどの数式・定義に出てきた記号や概念を、 一つずつ確認します。 とくに 横断データ の文脈で意味を取り違えやすい部分を強調します。
記号 意味と注意点
$i$ 個体添字。 SSDSE-B-2026 なら $i=1,\dots,47$(都道府県)。 横断データはこの添字「のみ」で構造化される $t, t_0$ 時間添字と固定時点。 横断データでは $t$ は実質存在せず $t = t_0$ に固定(時間変動を捕えない) $n, T$ $n$ は個体数(横断データの行数)、 $T$ は観測期間長(時系列・パネルで登場) $y_i, \mathbf{x}_i$ 個体 $i$ の被説明変数と説明変数ベクトル。 添字 1 本のみ → 横断データの典型表記 $y_{it}, \mathbf{x}_{it}$ パネルデータの表記。 添字が 2 本 → 同一個体の時間内変化を追える $s_{xy}$ 標本共分散 $s_{xy} = \frac{1}{n-1}\sum (x_i - \bar{x})(y_i - \bar{y})$。 横断データの個体間関係を要約する
横断データの記号は「個体添字 $i$ が存在し時間添字 $t$ が存在しない(または固定)」 が判別の鍵です。 $y_{it}$ のように添字が 2 本ある式はパネル、 $y_t$ のように $t$ のみは時系列で、 横断データを混同すると「同じ個体が時点間でどう変化したか」を推定しようとして失敗します。 $n$(個体数)と $N$(母集団サイズ)の区別、 $s^2$(標本分散)と $\sigma^2$(母分散)の区別も論文ごとに確認してください。
🔬 数式を言葉で読み解く(その 2:横断面 OLS の前提)
横断面データに OLS(最小二乗法)を適用する典型モデルは:
$$y_i = \beta_0 + \beta_1 x_{i1} + \beta_2 x_{i2} + \dots + \beta_p x_{ip} + \varepsilon_i$$
OLS が一致推定量となるためには、 以下のガウス・マルコフ前提を満たす必要があります:
線形性 :$y_i$ は $\beta_j$ について線形
無作為標本 :$(y_i, x_i)$ は i.i.d.
外生性 :$E[\varepsilon_i | x_i] = 0$(誤差項と説明変数が無相関)
不偏分散 :$\mathrm{Var}(\varepsilon_i | x_i) = \sigma^2$(均一分散)
共線性なし :$X$ の階数がフル
SSDSE のような都道府県横断面では、 とくに「無作為標本」が成立しません。 47 都道府県は「全数」であり、 母集団からのランダムサンプルではないのです。 推論の解釈は「2026 年時点の県間構造」に限定する必要があります。
また、 均一分散の仮定は「大都市は分散大、 地方は分散小」のような場面で破れがちで、 横断面では White の不均一分散頑健標準誤差 を使うのが定番です:
$$\widehat{\mathrm{Var}}(\hat\beta) = (X^\top X)^{-1}\left(\sum_i \hat\varepsilon_i^2 x_i x_i^\top\right)(X^\top X)^{-1}$$
🔬 数式を言葉で読み解く(その 3:横断面で因果が言えない理由)
横断面 OLS の係数 $\hat\beta_j$ は「他の変数を一定としたときの $x_j$ と $y$ の相関」ですが、 これを因果と読むには「条件付き独立性」が必要です:
$$\varepsilon_i \perp x_{ij} | x_{i,-j} \quad \text{(条件付き外生性)}$$
この前提が破れる典型ケース:
省略変数バイアス :未観測の交絡因子 $u$ が $y$ と $x$ 両方に影響。 例:「県の子育て支援策・産業構造」は SSDSE-B に指標として無いが、 出生率 A4103 と住宅着工 C3301 の両方に影響しうる
逆因果 :$y$ が $x$ を引き起こす方向もある。 例:出生率 A4103 が高い県ほど後に年少人口 A1301 が増える($y \to x$ の逆向き経路)
測定誤差 :$x$ が誤差付きで観測される(attenuation bias)
セレクション :観測される主体が母集団からの無作為抽出でない
横断面データのみで因果を主張するには、 道具変数(IV) 、 回帰不連続デザイン(RDD) 、 傾向スコアマッチング(PSM) 、 差分の差分(DID、 ただしパネルが必要) などの工夫が必要です。
SSDSE のように 1 時点 47 県の限定状況では、 因果より「関連の構造記述」「仮説生成」「予測モデル構築」に留めるのが誠実な姿勢です。
🧮 SSDSE-B 実値で計算してみる
SSDSE-B-2026(47都道府県・2023 年・112 項目)を題材に、 横断データ に関係する変数を実値で確認します。 とくに東京・大阪・沖縄・秋田 など特徴ある県を比較すると、 用語の重みが体感できます。
都道府県 総人口(千人) 高齢化率(%) TFR 有効求人倍率
東京 14,086 22.8 0.99 1.74
大阪 8,763 27.7 1.19 1.27
沖縄 1,468 23.8 1.60 0.96
秋田 914 39.1 1.10 1.51
全国平均 124,353 29.1 1.20 1.31
これらの値を 横断データ の観点で読み解くと、 都道府県間の格差・特徴・関係性が浮かび上がります。 具体的な計算手順は次の「🐍 Python 実装」セクションで実演します。
🧮 数式に値を入れて手で計算する: クロスセクション平均と分散
クロスセクションデータの典型例として、 同一時点 (2025 年) における 5 県の所得水準を仮定値で並べ、 同時点スナップショットならではの代表値 (平均・標本標準偏差) を求める (時間方向の集約は行わない)。
Step 1: 5 県データ
県 所得 [万円]
A 400 B 520 C 380 D 460 E 340
Step 2: 平均と標本標準偏差
合計 = 400+520+380+460+340 = 2,100
平均 = 2100/5 = 420
偏差² 和 = (-20)² + 100² + (-40)² + 40² + (-80)² = 400+10000+1600+1600+6400 = 20,000
s² = 20000/4 = 5,000
s ≈ 70.71
🐍 Python で再現
📋 コピー import numpy as np
x = np . array ([ 400 , 520 , 380 , 460 , 340 ])
print ( f "平均: { x . mean () } " )
print ( f "標準偏差 (標本): { x . std ( ddof = 1 ) : .2f } " )
📤 実行結果
平均: 420.0
標準偏差 (標本): 70.71
💬 手計算 (Step 2) と Python 出力が完全一致。
🐍 Python 実装
以下は 横断データ を SSDSE-B-2026 で扱うときの典型コード。 encoding='cp932' は政府統計の Shift-JIS 対応。 skiprows=1 は日本語ヘッダ行をスキップする定石。
① 基本パターン(読み込み・確認・主要列抽出)
📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行)
都道府県 A1101(総人口) A1303(65歳以上人口) Prefecture(都道府県)
北海道 5,092,000 1,681,000 北海道
東京都 14,086,000 3,205,000 東京都
沖縄県 1,468,000 350,000 沖縄県
…(全 47 行)
📋 コピー 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 import pandas as pd
# 横断データ に関連する SSDSE-B-2026 分析の基本パターン
df = pd . read_csv ( 'data/raw/SSDSE-B-2026.csv' , encoding = 'cp932' , header = 1 )
# 見出しの下に地域コード以外の行が混ざるので、47 都道府県だけ残して数値に直す
df = df [ df [ '地域コード' ] . astype ( str ) . str . match ( r '^R\d {5} $' , na = False )] . copy ()
for _c in df . columns [ 3 :]:
df [ _c ] = pd . to_numeric ( df [ _c ], errors = 'coerce' )
print ( df . shape ) # (47, 125)
print ( df . dtypes . head ( 10 ))
print ( df . describe () . T . head ( 10 ))
# 主要列にエイリアス
df [ '総人口' ] = df [ '総人口' ]
df [ '65歳以上' ] = df [ '65歳以上人口' ]
df [ '高齢化率' ] = df [ '65歳以上' ] / df [ '総人口' ] * 100
print ( df [[ '都道府県' , '総人口' , '高齢化率' ]] . head ())
📤 実行例(実測)
(564, 112)
年度 int64
地域コード object
都道府県 object
総人口 int64
総人口(男) int64
総人口(女) int64
日本人人口 int64
日本人人口(男) int64
日本人人口(女) int64
15歳未満人口 int64
dtype: object
count mean ... 75% max
年度 564.0 2.017500e+03 ... 2020.25 2023.0
総人口 564.0 2.690688e+06 ... 2784925.50 14086000.0
総人口(男) 564.0 1.308956e+06 ... 1349539.00 6914000.0
総人口(女) 564.0 1.381723e+06 ... 1422000.00 7172000.0
日本人人口 564.0 2.637011e+06 ... 2717122.25 13459000.0
日本人人口(男) 564.0 1.283092e+06 ... 1315342.25 6612000.0
日本人人口(女) 564.0 1.353872e+06 ... 1385624.50 6854000
…(以下略)
② 可視化テンプレ(matplotlib / seaborn)
📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行)
都道府県 A1101(総人口) A1303(65歳以上人口)
北海道 5,092,000 1,681,000
東京都 14,086,000 3,205,000
沖縄県 1,468,000 350,000
…(全 47 行)
📋 コピー 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 import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# 横断データ の探索的データ分析(EDA)
df = pd . read_csv ( 'data/raw/SSDSE-B-2026.csv' , encoding = 'cp932' , header = 1 )
# 見出しの下に地域コード以外の行が混ざるので、47 都道府県だけ残して数値に直す
df = df [ df [ '地域コード' ] . astype ( str ) . str . match ( r '^R\d {5} $' , na = False )] . copy ()
for _c in df . columns [ 3 :]:
df [ _c ] = pd . to_numeric ( df [ _c ], errors = 'coerce' )
# 主要変数を取り出して名前を分かりやすく
df [ '総人口' ] = df [ '総人口' ]
df [ '65歳以上' ] = df [ '65歳以上人口' ]
df [ '高齢化率' ] = df [ '65歳以上' ] / df [ '総人口' ] * 100
df [ 'TFR' ] = df . iloc [:, 21 ]
# ヒストグラム
fig , axes = plt . subplots ( 1 , 2 , figsize = ( 12 , 4 ))
sns . histplot ( df [ '高齢化率' ], kde = True , ax = axes [ 0 ])
axes [ 0 ] . set_title ( '高齢化率の分布(47都道府県)' )
sns . histplot ( df [ 'TFR' ], kde = True , ax = axes [ 1 ])
axes [ 1 ] . set_title ( 'TFRの分布' )
plt . tight_layout ()
plt . savefig ( 'eda_distribution.png' , dpi = 120 )
③ 前処理:欠損・外れ値・型変換
📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行)
都道府県 SSDSE-B-2026(年度) Prefecture(都道府県)
北海道 2,023 北海道
東京都 2,023 東京都
沖縄県 2,023 沖縄県
…(全 47 行)
📋 コピー 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
33 import pandas as pd
import numpy as np
# 横断データ に関わる前処理の典型パターン
df = pd . read_csv ( 'data/raw/SSDSE-B-2026.csv' , encoding = 'cp932' , header = 1 )
# 見出しの下に地域コード以外の行が混ざるので、47 都道府県だけ残して数値に直す
df = df [ df [ '地域コード' ] . astype ( str ) . str . match ( r '^R\d {5} $' , na = False )] . copy ()
for _c in df . columns [ 3 :]:
df [ _c ] = pd . to_numeric ( df [ _c ], errors = 'coerce' )
# ① 欠損値の確認
print ( '欠損数:' )
print ( df . isna () . sum () . sort_values ( ascending = False ) . head ( 10 ))
# ② 数値変換(カンマ・%除去 など)
def to_num ( s ):
if isinstance ( s , str ):
return float ( s . replace ( ',' , '' ) . replace ( '%' , '' ))
return s
_num_cols = [ c for c in df . columns
if c not in ( '年度' , '地域コード' , '都道府県' , 'Code' , 'Prefecture' ,
'SSDSE-B-2026' )]
df [ _num_cols ] = df [ _num_cols ] . apply ( lambda col : col . map ( to_num ))
# ③ 外れ値検出(IQR)
# 地域コードや都道府県名は大小比較できないので、数値の列だけで判定する
_num = df . select_dtypes ( include = 'number' )
q1 = _num . quantile ( 0.25 )
q3 = _num . quantile ( 0.75 )
iqr = q3 - q1
outlier_mask = (( _num < q1 - 1.5 * iqr ) | ( _num > q3 + 1.5 * iqr )) . any ( axis = 1 )
print ( '外れ値を含む行数:' , outlier_mask . sum ())
📤 実行例(実測)
欠損数:
年度 0
地域コード 0
着工新設住宅戸数 0
外国人延べ宿泊者数 0
延べ宿泊者数 0
一般旅券発行件数 0
就職件数(一般) 0
充足数(一般) 0
月間有効求人数(一般) 0
月間有効求職者数(一般) 0
dtype: int64
外れ値を含む行数: 239
④ 検定・推定の最小例(scipy.stats)
📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行)
都道府県 A1303(65歳以上人口) A1101(総人口) Prefecture(都道府県)
北海道 1,681,000 5,092,000 北海道
東京都 3,205,000 14,086,000 東京都
沖縄県 350,000 1,468,000 沖縄県
…(全 47 行)
📋 コピー 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
from scipy import stats
# 横断データ 文脈での基本的な仮説検定
df = pd . read_csv ( 'data/raw/SSDSE-B-2026.csv' , encoding = 'cp932' , header = 1 )
# 見出しの下に地域コード以外の行が混ざるので、47 都道府県だけ残して数値に直す
df = df [ df [ '地域コード' ] . astype ( str ) . str . match ( r '^R\d {5} $' , na = False )] . copy ()
for _c in df . columns [ 3 :]:
df [ _c ] = pd . to_numeric ( df [ _c ], errors = 'coerce' )
df [ 'aging' ] = df [ '65歳以上人口' ] / df [ '総人口' ] * 100
df [ 'region' ] = df [ '都道府県' ] . apply ( lambda p : '東日本' if p in [ '北海道' , '青森県' , '岩手県' , '宮城県' , '秋田県' , '山形県' , '福島県' , '茨城県' , '栃木県' , '群馬県' , '埼玉県' , '千葉県' , '東京都' , '神奈川県' , '新潟県' , '富山県' , '石川県' , '福井県' , '山梨県' , '長野県' , '岐阜県' , '静岡県' , '愛知県' ] else '西日本' )
east = df . loc [ df [ 'region' ] == '東日本' , 'aging' ]
west = df . loc [ df [ 'region' ] == '西日本' , 'aging' ]
t , p = stats . ttest_ind ( east , west , equal_var = False )
print ( f '東日本 平均高齢化率: { east . mean () : .2f } %' )
print ( f '西日本 平均高齢化率: { west . mean () : .2f } %' )
print ( f 't = { t : .3f } , p = { p : .4f } ' )
print ( '判定:' , '有意差あり' if p < 0.05 else '有意差なし' )
📤 実行例(実測)
東日本 平均高齢化率: 28.82%
西日本 平均高齢化率: 29.64%
t = -2.807, p = 0.0052
判定: 有意差あり
※ より高度な例(クロス集計、 機械学習、 ベイズ推定)は data-types のグループ教材を参照。
🐍 SSDSE-B-2026 で典型的な横断面回帰
このコードでやること :SSDSE-B-2026(47 都道府県の典型的横断面データ)で「合計特殊出生率」を被説明変数として OLS を実行し、 通常標準誤差と White の頑健標準誤差を比較します。
📥 入力データ:47 都道府県、 6 指標(A1101 総人口・A1301 年少人口〈15歳未満人口〉・B4101 年平均気温・C3301 着工建築物数・E3501 中学校生徒数・E3701 中学校卒業者数)。 被説明変数は A4103 合計特殊出生率。
SSDSE-B-2026 抜粋 (2023 年):
Code Prefecture A1101 A1301 B4101 C3301 E3501 E3701
R01000 北海道 5092000 514000 11.0 15872 119115 40250
R13000 東京都 14086000 1513000 17.6 41817 314459 104600
R47000 沖縄県 1468000 236000 23.8 5217 50484 16744
... ... ... ... ... ... ... ...
(47 行) A1101=総人口 A1301=年少人口 B4101=年平均気温 C3301=着工建築物数 E3501=中学校生徒数 E3701=中学校卒業者数
📋 コピー 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 import numpy as np
import pandas as pd
import statsmodels.api as sm
df = pd . read_csv ( 'data/raw/SSDSE-B-2026.csv' , encoding = 'cp932' , skiprows = [ 1 ]) . query ( '`SSDSE-B-2026` == 2023' )
features = [ 'A1101' , 'A1301' , 'B4101' , 'C3301' , 'E3501' , 'E3701' ]
X = df [ features ] . astype ( float )
y = df [ 'A4103' ] . astype ( float ) # 合計特殊出生率
X = sm . add_constant ( X )
res_ols = sm . OLS ( y , X ) . fit ()
print ( res_ols . summary () . tables [ 1 ])
# White の不均一分散頑健標準誤差 (HC1)
res_hc1 = sm . OLS ( y , X ) . fit ( cov_type = 'HC1' )
print ( '--- HC1 (Robust SE) ---' )
print ( res_hc1 . summary () . tables [ 1 ])
📤 実行例:
coef std err t P>|t| [0.025 0.975]
------------------------------------------------------------------------------
const 1.0394 0.137 7.612 0.000 0.763 1.315
A1101 -2.328e-07 7.38e-08 -3.156 0.003 -3.82e-07 -8.38e-08
A1301 3.632e-06 1.9e-06 1.915 0.063 -2.02e-07 7.47e-06
B4101 0.0206 0.008 2.603 0.013 0.005 0.037
C3301 -3.765e-06 5.7e-06 -0.661 0.512 -1.53e-05 7.75e-06
E3501 -4.502e-06 3.11e-05 -0.145 0.885 -6.73e-05 5.83e-05
E3701 -1.004e-05 7.63e-05 -0.132 0.896 -0.000 0.000
--- HC1 (Robust SE) ---
coef std err z P>|z| [0.025 0.975]
------------------------------------------------------------------------------
const 1.0394 0.142 7.322 0.000 0.761 1.318
A1101 -2.328e-07 8.57e-08 -2.716 0.007 -4.01e-07 -6.48e-08
A1301 3.632e-06 2.11e-06 1.721 0.085 -5.03e-07 7.77e-06
B4101 0.0206 0.008 2.514 0.012 0.005 0.037
C3301 -3.765e-06 5.03e-06 -0.749 0.454 -1.36e-05 6.09e-06
E3501 -4.502e-06 2.79e-05 -0.161 0.872 -5.92e-05 5.02e-05
E3701 -1.004e-05 6.41e-05 -0.157 0.876 -0.000 0.000
💬 通常 SE でも頑健 SE (HC1) でも、 総人口 A1101(負・規模が大きい県ほど出生率が低い)と 年平均気温 B4101(正・温暖な県ほど出生率が高い=沖縄の TFR が高いことと整合)は有意なまま。 HC1 で標準誤差はやや広がるが主要な結論は頑健です。 横断面では県の規模が大きく異なるため、 頑健 SE を併記して「結論の頑健性」を確認するのが定石です。
📝 より正確な分析 : 本節の回帰は実在する SSDSE-B-2026(2023 年・47 都道府県)を skiprows=[1]・年度 2023 で抽出して再計算した実測値。 被説明変数は A4103 合計特殊出生率 。 SSDSE-B-2026 のコード対応は A1301=年少人口(15 歳未満人口, ≠ 出生数) 、 B4101=年平均気温(≠ 財政力指数) である点に注意(旧版の変数名ラベルを訂正)。
📊 横断面 vs 時系列:何ができて何ができないか
観点 横断面データ 時系列データ
単位 主体(個人・地域・企業) 時間(日・月・年)
問える問い 「県間でなぜ違うか」 「いつ変化したか」
独立性仮定 主体間が独立 時点間に強い系列相関
代表的手法 OLS, GLM, クラスタリング ARIMA, 状態空間, GARCH
外生性脅威 省略変数バイアス、 セレクション 単位根・共和分・系列相関
因果推論 IV・RDD・PSM が標準 VAR・グレンジャー因果
サンプルサイズ概念 $n$(主体数) $T$(時点数)
頑健 SE White / HC0-HC3 Newey-West / HAC
🐍 不均一分散の Breusch-Pagan 検定
このコードでやること :横断面 OLS で頻発する不均一分散を Breusch-Pagan 検定で確認します。 残差の二乗を説明変数で回帰し、 説明力があれば「分散が説明変数に依存している」と判定します。
📥 入力:上記 OLS の結果(残差 $\hat\varepsilon_i$)。
📋 コピー 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 import numpy as np
import pandas as pd
import statsmodels.api as sm
from statsmodels.stats.diagnostic import het_breuschpagan , het_goldfeldquandt
df = pd . read_csv ( 'data/raw/SSDSE-B-2026.csv' , encoding = 'cp932' , skiprows = [ 1 ]) . query ( '`SSDSE-B-2026` == 2023' )
features = [ 'A1101' , 'A1301' , 'B4101' , 'C3301' , 'E3501' , 'E3701' ]
X = sm . add_constant ( df [ features ] . astype ( float ))
y = df [ 'A4103' ] . astype ( float )
res = sm . OLS ( y , X ) . fit ()
# Breusch-Pagan 検定
bp_stat , bp_pval , _ , _ = het_breuschpagan ( res . resid , X )
print ( f 'Breusch-Pagan LM 統計量: { bp_stat : .3f } ' )
print ( f 'Breusch-Pagan p 値: { bp_pval : .4f } ' )
# Goldfeld-Quandt 検定(A1101 で分割)
gq_stat , gq_pval , _ = het_goldfeldquandt ( y , X , idx = 1 )
print ( f 'Goldfeld-Quandt F 統計量: { gq_stat : .3f } ' )
print ( f 'Goldfeld-Quandt p 値: { gq_pval : .4f } ' )
# 残差の絶対値と説明変数の相関
print ( '--- 残差絶対値 vs 説明変数 相関 ---' )
for f in features :
r = np . corrcoef ( np . abs ( res . resid ), df [ f ] . astype ( float ))[ 0 , 1 ]
print ( f ' |resid| vs { f } : r = { r : +.3f } ' )
📤 実行例:
Breusch-Pagan LM 統計量: 6.418
Breusch-Pagan p 値: 0.3780
Goldfeld-Quandt F 統計量: 1.284
Goldfeld-Quandt p 値: 0.3070
--- 残差絶対値 vs 説明変数 相関 ---
|resid| vs A1101: r = -0.189
|resid| vs A1301: r = -0.192
|resid| vs B4101: r = -0.211
|resid| vs C3301: r = -0.226
|resid| vs E3501: r = -0.188
|resid| vs E3701: r = -0.188
💬 BP 検定 p=0.378、 Goldfeld-Quandt 検定 p=0.307 で いずれも 5% 有意でない → この 6 変数モデルでは不均一分散の強い証拠は見られない(残差絶対値と各説明変数の相関も |r|≲0.23 と小さい)。 ただし横断面では県規模の差から不均一分散が生じやすいため、 頑健 SE (HC1/HC3) を併記して確認するのは依然として良い習慣です。 「検定してから頑健 SE の要否を判断する」 という手順自体が横断面分析の型です。
🐍 47 県の K-means クラスタリング
このコードでやること :典型的な横断面分析として、 SSDSE-B-2026 の 47 県を 5 つのクラスタに分けます。 横断面データは「主体間の類似性」を扱える代表的データ形式で、 クラスタリングが定番手法です。
📥 入力:47 県 × 6 指標(標準化済)
📋 コピー 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 import numpy as np
import pandas as pd
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
df = pd . read_csv ( 'data/raw/SSDSE-B-2026.csv' , encoding = 'cp932' , skiprows = [ 1 ]) . query ( '`SSDSE-B-2026` == 2023' )
features = [ 'A1101' , 'A1301' , 'B4101' , 'C3301' , 'E3501' , 'E3701' ]
X = StandardScaler () . fit_transform ( df [ features ] . astype ( float ))
km = KMeans ( n_clusters = 5 , n_init = 20 , random_state = 0 ) . fit ( X )
df [ 'cluster' ] = km . labels_
# クラスタ別の県と平均
for c in range ( 5 ):
members = df [ df [ 'cluster' ] == c ][ 'Prefecture' ] . tolist ()
avg = df [ df [ 'cluster' ] == c ][ features ] . mean ()
print ( f ' \n --- Cluster { c } ( { len ( members ) } 県) ---' )
print ( '代表県:' , members [: 6 ])
print ( f '平均: 人口= { avg [ "A1101" ] : .0f } , 出生率= { df [ df [ "cluster" ] == c ][ "A4103" ] . mean () : .3f } ' )
print ( f ' \n 慣性 (inertia): { km . inertia_ : .1f } ' )
📤 実行例:
--- Cluster 0 (4 県) ---
代表県: ['千葉県', '静岡県', '兵庫県', '福岡県']
平均: 人口=5071250, 出生率=1.235
--- Cluster 1 (27 県) ---
代表県: ['群馬県', '富山県', '石川県', '福井県', '山梨県', '岐阜県']
平均: 人口=1293333, 出生率=1.372
--- Cluster 2 (11 県) ---
代表県: ['北海道', '青森県', '岩手県', '宮城県', '秋田県', '山形県']
平均: 人口=2023818, 出生率=1.185
--- Cluster 3 (1 県) ---
代表県: ['東京都']
平均: 人口=14086000, 出生率=0.990
--- Cluster 4 (4 県) ---
代表県: ['埼玉県', '神奈川県', '愛知県', '大阪府']
平均: 人口=8200000, 出生率=1.188
慣性 (inertia): 40.2
💬 横断面データから「県の社会経済構造による 5 つの類型」が浮かび上がります。 東京は単独クラスタ(外れ値的)。 人口規模と出生率は逆相関の傾向。 横断面ならではの「主体間の質的分類」が可能になります。
✅ 横断面データ分析チェックリスト
□ データの「時点」を明示したか(2026 年時点、 など)
□ 主体(県・個人・企業)の母集団・抽出方法を確認したか
□ サンプルサイズ $n$ と説明変数 $p$ の比は十分か($n > 10p$ が目安)
□ 不均一分散検定(BP, White)を実施したか
□ 不均一分散があれば頑健 SE(HC1-HC3)を採用したか
□ 外れ値(東京など)の影響を Cook 距離で確認したか
□ 空間相関(Moran's I)をチェックしたか(地域データの場合)
□ 「県間関係」を「時間因果」と取り違えていないか
□ 省略変数バイアスの可能性を議論したか
□ パネル化・時系列化で頑健性を確認できないか検討したか
□ 結論を「該当時点・該当主体集合」に限定したか
⚠️ よくある落とし穴(7 件)
横断データ に取り組むときに、 学生・実務者・研究者がよく踏むワナをまとめました。 該当しそうな項目があれば、 自分の分析を見直してみてください。
❌ 1. 横断データから因果を結論する
「教育年数が長い県ほど所得が高い」を見て「教育 → 所得」と断言できない。 時間的先行を観察できない横断データでは、 RCT・パネル固定効果・操作変数法など別の道具が必要。
❌ 2. コホート効果と時代効果の混同
2023 年時点で「30 代より 60 代のほうが貯蓄が多い」を見ても、 「年齢で貯蓄が増える」とは限らない (30 代は氷河期世代でそもそも所得が低い、 という世代効果の可能性)。 横断データでは Age・Period・Cohort の 3 つを分離できない。
❌ 3. 時点の暗黙固定
SSDSE-B-2026 を使う際、 「2023 年データ」であることを明記しないと、 「日本では出生率が…」と一般化した時に時点ズレが起きる。 横断データの結論には必ず時点を併記する。
❌ 4. 個体間異質性の固定効果不能
パネルデータなら個体固定効果で観察不能な異質性を制御できるが、 横断データでは不可能。 「北海道は土地が安いから」のような時不変要因をモデルに入れ忘れると交絡が残る。
❌ 5. 生態学的誤謬 (Ecological Fallacy)
47 都道府県の集計データで「県の平均教育年数 vs 県の平均所得」に正の相関があっても、 県内の個人レベルで同じ関係が成立する保証はない (Robinson, 1950)。 集団間関係と個人間関係を混同しない。
❌ 6. 選択バイアス (横断調査の代表性)
調査時点で「回答できる人」だけがサンプルになると、 死亡・転出・拒否の影響で母集団からズレる (Survivorship Bias)。 SSDSE のような全数集計は別だが、 アンケート横断調査では特に重要。
❌ 7. 標本サイズが固定 (n=47 など)
横断データは時間軸を持たないため、 SSDSE のような都道府県データだと n=47 で動かない。 これは中心極限定理が効きにくい小標本となり、 ノンパラ手法やブートストラップを併用する必要がある。
⚠️ 横断面分析の落とし穴(深掘り)
サンプル数 $n=47$ の罠 :都道府県横断面はサンプル数が小さいので、 自由度を消費しすぎると過剰適合します。 説明変数は最大でも 6-8 個程度に抑え、 ステップワイズや Lasso で慎重に絞ること。
時間変動の見落とし :「2026 年だけの構造」を「普遍的関係」と誤解するのは典型ミス。 結論は必ず「2026 年時点」と但し書きを付け、 過去年版(SSDSE-B-2024, 2025)でも同じ構造かを確認しましょう。
空間相関の無視 :隣接県は経済構造や人口動態が似ています。 「主体間独立」の前提が崩れ、 標準誤差が過小評価されます。 空間計量モデル(SAR, SEM)や地理加重回帰(GWR)の検討が必要。
異質性 :「平均効果」だけで議論すると、 「東京と沖縄では係数の符号さえ違う」可能性を見落とします。 ローカル回帰、 量子点回帰、 群別 OLS で異質性をチェック。
外れ値県の影響 :東京は人口・経済規模で他県と桁違い。 外れ値が回帰係数を支配するので、 Cook 距離・てこ比で確認し、 ロバスト回帰(Huber, RANSAC)の併用が安全。
標準化と単位 :人口(百万単位)、 進学率(%単位)、 財政力指数(無次元)の混在する横断面では係数の解釈に混乱が起きます。 比較目的なら標準化済係数(βスタンダード化)も併記。
横断面 → 時系列の越権 :「県間で X が高い県は Y も高い」から「X を上げれば Y も上がる」と推論するのは典型誤り。 時間方向の因果は時系列・パネル分析で別途検証が要ります。
クロスセクション・ディペンデンス :マクロショック(全国共通の景気変動)があると、 県間の誤差が共通要因で相関します。 マクロダミーやクラスタ標準誤差で対処。
🔭 さらに深掘り — 直感・落とし穴・発展(追記)
ここまでの各セクションを踏まえ、 横断面データの「掴み方」「踏みやすい罠」「次の一手」を、 SSDSE-B-2026 の実測値とともに一枚にまとめ直します。 既に上で触れた論点も、 直感 → 落とし穴 → 発展 の順に並べ替えると腹落ちしやすくなります。
🎨 直感:横断面は「ある一瞬の集合写真」
横断面データとは、 ある一時点で多数の個体を横一列に切り取ったスナップショット です。 SSDSE-B-2026 の「2023 年・47 都道府県」はまさにこれ。 この 1 枚の中では、 総人口 A1101 は 鳥取 53.7 万人 〜 東京 1408.6 万人(47 県平均 264.6 万人) と県間で大きくばらつきます(いずれも 2023 年の実測値・万人換算)。 「どの県が多い/少ないか」という横の比較 はこの 1 枚で十分できます。
一方、 同じ大きな箱(47 県 × 2012〜2023 年)を県で固定して時間方向に切る と時系列になり、 東京は 2012→2023 で +85.2 万人、 秋田は −14.9 万人 という時間変化 が初めて見えます(実測値)。 縦(時間・1 個体)=時系列、 横(個体・1 時点)=横断面、 両方=パネル、 という三つの切り口の違いを、 同一データで体感できるのが SSDSE-B の強みです。
📊 実測で確かめる「横は大きい・縦は小さい」
SSDSE-B のパネル(47 県 × 12 年)で総人口の分散を分解すると、 県間のばらつき(between)が全分散の約 99.95% を占め、 県内の年変動(within)はごくわずか でした(実測)。 つまり「1 時点の横断面でも県間構造はほぼ丸ごと捉えられる」半面、 「1 県を固定すると時間変化は小さい」。 これが、 横断面が地域間比較に強く時間変化に弱い理由を数値で裏づけます。 そして次に述べる固定効果は、 この巨大な between をまるごと差し引く操作にほかなりません。
⚠️ 落とし穴(重要)— 早見表
横断面データで最も多い誤りは、 1 時点しかないのに「因果」や「時間変化」を語ってしまう ことです。 代表的な罠と対処・関連ページを一覧にします。
落とし穴 何が起きるか 対処・関連ページ
因果・時間順序が不明 1 時点では「X が先か Y が先か」を観察できない。 相関を因果と読むと逆因果を見落とす。 因果と相関 /逆因果
横断相関を経時変化と誤読 「県間で X が高い県は Y も高い」を「X を増やせば Y が増える」と読み替える越権。 断面の傾きは時間方向の変化率ではない。 時系列 /パネル
生態学的誤謬 県平均どうしの相関が個人レベルの関係と一致する保証はない(Robinson, 1950)。 集計単位を変えると相関の符号すら変わりうる。 専用ページは未整備のため本文で解説/見かけの相関
選択バイアス 「回答できた人/存在する主体」だけが標本になると母集団からずれる(生存者バイアス等)。 選択バイアス
観測されない個体異質性 県固有の時不変要因(風土・産業構造)をモデルに入れ忘れると交絡が残る。 横断面では固定効果で除けない。 交絡 /固定効果
一時点の外れ値 東京(1408.6 万人)は他県と桁違いで、 回帰係数やてこ比を支配しがち。 その年だけの災害・制度変更も「普遍構造」と誤読しやすい。 外れ値 /ロバスト統計
🚀 発展:時間軸を足すと解ける問題
パネルデータ+固定効果 :同一個体を複数時点で追い、 within 変換(各県の期間平均を引く)で時不変の個体異質性を丸ごと除去 できます。 前述のとおり総人口の分散の約 99.95% は県間差(between)ですが、 固定効果はこの between を吸収し、 残る within(年変動)だけで係数を識別します。 → パネルデータ /固定効果 /パネル因果推論 /変量効果 (固定 vs 変量の選択は Hausman 検定 )
反復横断面(repeated cross-section) :各時点で別々の標本 を横断的に取り直す設計(国民生活基礎調査など)。 個体は追えませんが、 集計量の時間変化や擬似パネル(pseudo-panel)による分析は可能です。 本サイトでは縦断データ もパネルデータのページで扱っています。
横断面回帰の限界と因果の道具 :1 時点・n=47 では原則として因果は語れません。 時間差を使う 差分の差分(DID) (パネルが必要・前提は 平行トレンド )、 外生変動を使う 操作変数(IV) 、 閾値を使う 回帰不連続(RDD) などを併用して初めて因果に近づけます。 横断面単独では「関連の構造記述・仮説生成・予測」に留めるのが誠実です。
🔗 このテーマの深掘り先(相対リンク)
上の各論点に対応する用語ページ(いずれも本用語集内に存在):
※「生態学的誤謬」「個体異質性」の独立ページは未整備のため本文で解説。 「縦断データ」は パネルデータ のページで扱っています。
📚 関連グループ教材(全体像)
横断データ は「データ種 」分野の一部です。 同じグループに属する用語は以下:
グループ教材は横断的な視点 を提供します。 個別用語だけでなくグループ全体を 1 周しておくと、 各用語の関係性が立体的に見えてきます。
📊 横断データを 6 つの軸で徹底比較
横断データの強みと限界を理解するには、 縦断(時系列)データ ・パネルデータ との比較が最も効果的です。 ここでは 6 つの観点で 3 形式を並列比較し、 さらに横断データを使った分析設計の判断基準を整理します。
観点 横断データ (cross-section) 縦断データ (time-series) パネルデータ (panel)
時間軸 なし(1 時点) あり(複数時点) あり(複数時点)
個体軸 あり(複数個体) なし(1 個体) あり(複数個体)
典型例 国勢調査の 2020 年スナップショット 日経平均株価の月次推移 国民生活基礎調査の追跡パネル
分析の主問題 個体間の差は何で説明できるか 将来予測・トレンド検出 個体内変動と個体間変動の分離
主要モデル OLS 回帰・分類・クラスタリング ARIMA・状態空間・指数平滑 固定効果モデル・差分の差分 (DiD)
因果推論の力 弱(未観測因子に弱い) 中(介入前後比較が可能) 強(個体固定効果で交絡を除去)
必要サンプル N 個体 × 1 時点 1 個体 × T 時点(T は数十〜) N × T(NもTも複数)
SSDSE 該当形式 SSDSE-B(都道府県×1年) SSDSE-C(全国×年次) SSDSE-D(都道府県×複数年)
表 2: 横断データの強みと限界の対比
観点 ✅ 強み ⚠️ 限界
収集コスト 1 回の調査で完了、 安価で速い 将来予測には別調査が必要
サンプルサイズ 大規模化が容易(国勢調査=全数) 時間方向の情報量はゼロ
個体間比較 同時点で公平に比較できる 個体内変動(成長・学習)は捉えられない
因果推論 操作変数・回帰不連続デザインで一定対応可 未観測異質性で偏り、 逆因果リスク高
解釈の容易さ 「Xが大きい個体ほどYも大きい」と直感的 「Xを変えればYが変わる」とは言えない
外的妥当性 スナップショット時点には強い 時代変化への外挿は危険
表 3: 横断データを選ぶべき場面 — 判断フロー
問いの形 推奨データ形式 理由
「2024 年時点で県別の格差はあるか」 横断 1 時点での個体間比較が主問題
「来年の売上はいくらか」 縦断 時間方向の外挿が必要
「政策介入の効果は何か」 パネル 個体内変化の追跡が必須
「製品Aと製品Bでユーザー属性は違うか」 横断 同時点の群間比較
「リハビリで筋力は回復したか」 縦断 or パネル 個体内の変化測定
「最低賃金引き上げの雇用効果」 パネル(DiD) 対照群と処置群の差を時系列で評価
表 4: 横断データ分析でやりがちな 7 つの誤り
誤り 具体例 対処
時間方向への因果主張 「教育投資の多い県は学力が高い」→ 「教育投資を増やせば学力が上がる」 パネル化、 操作変数法
未観測交絡因子の無視 地域文化・歴史的経緯を変数に含めない 地域固定効果、 マッチング
外れ値の機械的除去 東京を「外れ値」として外す 含めた/除いた両ケースを併記
サンプル選択バイアス 回答率の高い層だけが残る 逆確率重み付け、 Heckman 補正
逆因果の見逃し 「収入が高い人は健康」→ どちらが原因か不明 時間順序を明示できるデータへ
生態学的誤謬 県単位の相関を個人レベルに適用 マルチレベル分析
スケール比較の罠 人口で正規化せず絶対値で比較 人口当たり・面積当たりに変換
表 5: 横断データ分析の品質チェックリスト
フェーズ 確認項目 合格基準
データ収集 対象時点の明示 「2022 年 10 月 1 日時点」など 1 日単位
データ収集 サンプリング設計の文書化 層化抽出か単純無作為かを記載
前処理 欠損パターンの分類 MCAR/MAR/MNAR を判定
前処理 単位変換(per capita 化) 人口比・面積比など根拠ある正規化
EDA ヒストグラム + 散布図 + 箱ひげ図 3 種の図を主要変数で必ず作成
モデリング 外れ値の影響評価 含めた/除いた両ケースの係数を併記
モデリング 残差プロット 正規性・等分散性の確認
解釈 因果と相関の区別 「関連」「相関」と表現、 「効果」は避ける
解釈 95% 信頼区間の併記 点推定だけでなく区間も明示
報告 限界の明記 「1 時点のため時間方向の因果は不明」と明記
表 6: 横断データの実例カタログ(公的統計 + 民間)
データ名 単位 頻度 主な用途
国勢調査 全人口 5 年に 1 回 人口構造・世帯分析
SSDSE-B-2026 47 都道府県 年次 教育用回帰・相関分析
経済センサス 全事業所 数年に 1 回 産業構造分析
家計調査 標本世帯 月次(ロール) 消費動向分析
学校保健統計 児童生徒 年次 身体発育・健康分析
A/B テストログ ユーザー 実験期間中の集計 UI 改善効果検証
✅ 理解度チェック — 横断データを使いこなせるか
以下 8 問を解いてみてください。 7 問以上正解できれば、 横断データの実務応用に十分な基礎が身についています。 各問の解答は折りたたみで提示しています。
Q1. 横断データの定義を 1 文で説明してください。
解答例 : ある 1 時点(または短期間)における複数の個体(人・企業・地域など)から同時に取得したデータで、 時間軸を持たず個体間比較を主問題とする。
補足 : 「同時点」「複数個体」「時間軸なし」の 3 要素が揃って初めて横断データと呼ぶ。 1 個体を 1 時点で測ったものは横断ではなく単発測定。
Q2. 「2020 年国勢調査の都道府県別人口データ」は横断データ・縦断データ・パネルデータのどれか?
解答 : 横断データ。
理由 : 1 時点(2020 年)に 47 個体(都道府県)を一斉に観測しているため。 もし 2015 年と 2020 年の 2 時点を並べれば「繰り返し横断(repeated cross-section)」、 同じ個体(県)を追跡しているとみなせばパネル化も可能だが、 単独の調査は横断。
Q3. 横断データで「教育投資 → 学力向上」という因果関係を主張できないのはなぜか?
解答 : 3 つの理由がある。
① 時間順序が確認できない : 教育投資が先か学力向上が先か区別できない(逆因果リスク)。
② 未観測交絡因子 : 経済力・文化・歴史的背景など、 観測されない要因が両方に影響している可能性。
③ 個体内変動が見えない : 同じ県が教育投資を増やしたときに学力がどう変わったかを追跡できない。
これらに対応するには、 パネルデータ + 固定効果モデルや差分の差分 (DiD) が必要。
Q4. 47 都道府県の人口を比較する際、 絶対値と人口当たり値のどちらを使うべきか?
解答 : 目的による。
絶対値 : 「東京都の経済規模は大阪府の何倍か」など、 総量を比較したい場合。
人口当たり値(per capita) : 「県民 1 人あたりの GDP はどう違うか」など、 個体間の効率や水準を比較したい場合。
横断データでは per capita 化を忘れると東京が全部勝つ ため、 県別比較ではほぼ常に per capita 化が必要。
Q5. 横断データに散布図を描いたら強い正の相関が見えた。 次に何をすべきか?
解答 : ① 外れ値を特定 → ② 外れ値を除いた場合の相関を再計算 → ③ 残差プロットで線形性を確認 → ④ 相関係数の信頼区間を算出 → ⑤ 第 3 変数(交絡)の候補を列挙 → ⑥ 偏相関で交絡を統制 → ⑦ 因果ではなく「関連」「相関」と表現することを徹底。
禁じ手 : 「相関 0.97 だから X を増やせば Y も増える」と即断すること。 横断データの相関は時間順序を含まないため、 因果結論はできない。
Q6. 横断データを「繰り返し横断」と「パネル」に拡張する違いを説明してください。
繰り返し横断(repeated cross-section) : 毎年違うサンプルを抽出して横断調査を繰り返す。 個体追跡は不可だが、 集団レベルのトレンドは追える。
パネル(panel / longitudinal) : 同じ個体を複数時点で追跡する。 個体内変動を抽出でき、 因果推論力が大幅に強い。
例 : 国民生活基礎調査(繰り返し横断的)と 慶應パネル調査 KHPS(パネル)。 SSDSE-D は都道府県×複数年のパネル形式。
Q7. 「生態学的誤謬(ecological fallacy)」とは何か? 横断データとどう関係するか?
定義 : 集団レベル(県単位など)で観察された相関を、 個人レベルにそのまま当てはめることで生じる推論誤り。
例 : 「県の平均所得が高い県ほど自殺率が低い」→ 「個人の所得が高いほど自殺リスクが低い」と結論するのは誤り(集団相関と個人相関は逆方向のこともある)。
横断データとの関係 : 横断データはしばしば集団単位(県・市町村・国)で集計されており、 個人レベルの主張に流用すると生態学的誤謬を犯しやすい。 個人レベル分析にはマイクロデータが必要。
Q8. SSDSE-B-2026 で横断データ分析を始めるときの最初の 5 ステップを列挙してください。
解答 :
① pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932') でデータ読み込み。
② df.info() と df.describe() でカラム・型・基本統計を確認。
③ df.isnull().sum() で欠損確認。
④ 関心変数 2 本で散布図・ヒストグラム・箱ひげ図を作成(地域別に層別化推奨)。
⑤ Pearson 相関と Spearman 相関を併記、 外れ値(東京)を除いた感度分析を実施。
この 5 ステップで横断データの「形」が掴め、 次の回帰・分類モデリングに進める。
🧭 横断データを実務で運用する 6 つの論点
1. 時点の定義 — 「2022 年」とはいつか
横断データを設計する際の最初の論点は 「時点とは何日間か」 です。 国勢調査は 10 月 1 日 0 時の状態を 1 時点として記録します。 経済センサスは数週間にわたって調査票を回収しますが、 集計時には「2021 年 6 月 1 日時点」と表記します。 SSDSE-B は年次集計ですが、 月次変動の大きい変数(観光入込客数など)では「年間平均」と「特定月のスナップショット」で結果が大きく変わるため、 時点定義を明示する必要があります。 厳密には、 ある 1 日に全個体を観測した「真の横断」は希少で、 多くは「実質的横断(quasi-cross-section)」として扱います。
2. サンプリング設計 — 全数調査か標本調査か
47 都道府県すべてを観測する SSDSE-B は 全数調査 (悉皆調査)の性質を持ち、 統計的推測(信頼区間・p 値)の意味が変わります。 全数なら「母集団=標本」なので推測の必要はなく、 観測値そのものが真値。 一方、 家計調査や労働力調査は標本調査で、 母集団は数千万世帯、 標本は数千〜数万。 横断データを使うときは 「これは全数か標本か」「標本なら抽出法は何か」 を明示することが、 解析の前提として必須です。
3. 単位の選び方 — 県・市町村・個人の粒度
横断データの粒度(県 vs 市町村 vs 個人)は、 分析対象と利用可能データに依存します。 県単位は 47 サンプルしかなく、 回帰の説明変数を増やしすぎると過学習しやすい(経験則: 説明変数は 5 個以内、 サンプルサイズ N の 1/10 以下)。 市町村単位なら約 1,700 サンプル、 個人単位なら数千〜数万まで拡張可能ですが、 公開データの制約も大きくなります。 粒度を粗くするほど 生態学的誤謬 のリスクが上がり、 細かくするほど 欠損・プライバシー の課題が増えます。
4. 欠損と外れ値 — 47 都道府県は特殊な「閉じた」サンプル
SSDSE-B のような都道府県横断データは 「全数 47 個体」 という特殊な性質を持ちます。 欠損が出ても補完は難しく(島根県のデータがない、 はあり得ない)、 外れ値(東京)を除外すると「46 都道府県データ」になってしまい解釈が変わります。 そのため、 都道府県横断では 「すべて含めて分析 + 東京を除いた感度分析を併記」 が標準作法。 個人レベル横断(家計調査など)ではマルチプル・インピュテーションや IPW(逆確率重み付け)で対応します。
5. 因果推論への接続 — 横断データでもできる工夫
横断データは因果推論に弱いと言われますが、 工夫次第で部分的な因果主張は可能です。 主要な道具は ① 操作変数法(IV) : 内生性のある X に対し、 Y には直接影響しない Z を見つけて 2 段階推定。 ② 回帰不連続デザイン(RDD) : 閾値前後で個体が「ほぼランダムに」処置/非処置に分かれる場合に局所平均処置効果を推定。 ③ 傾向スコア・マッチング : 観測共変量で処置群と対照群を釣り合わせる。 これらは横断データでも適用可能ですが、 仮定の妥当性検証が必須です。
6. 機械学習との接続 — 横断データは ML のデフォルト
sklearn・XGBoost・LightGBM など主要な機械学習ライブラリの典型的な入力は 「N 行 × P 列の表形式(X)と N 行のラベル(y)」 で、 これはまさに横断データの形式です。 時系列モデル(ARIMA, LSTM)と異なり、 行の順番に意味がなく、 訓練/検証分割は train_test_split でランダムに行えます。 機械学習の入門書が SSDSE のような都道府県データではなく Iris や Titanic を使うのは、 この「横断データ」性質が完全に共通だから。 横断データを理解することは、 機械学習の入力理解そのものです。
❓ よくある質問(FAQ)
Q. 横断データを初めて学ぶときの最短ルートは? A. まず本ページの「💡 30秒結論」「🎨 直感で掴む」を読み、 続いて「🧮 SSDSE実値計算」のテーブルだけでも目を通す。 そのうえで「🐍 Python実装」の ①基本パターン を写経すれば、 1 時間程度で実用最低限まで届きます。
Q. 横断データと一緒に必ず押さえておきたい用語は? A. 「🔗 関連用語」セクションの
前提 3〜4 件は最優先。 特に
データリテラシー と
変数の型 はどの用語にも効きます。
Q. 横断データを実務レポートに書くときに気をつけることは? A. ①出典・期間・サンプル数を明記、 ②前提条件(正規性・独立性・線形性など)が満たされているか確認した旨を記載、 ③不確実性(CI・SE)を併記、 ④限界(適用範囲外への外挿は不可など)を明示。
Q. 横断データと AI・機械学習はどう関係する? A. 横断データ は古典統計の文脈でも機械学習の文脈でも基礎になります。 とくにモデル評価・データ品質・解釈性の局面で必須。 詳細は
AIと社会 、
AIの信頼性 を参照。
Q. SSDSE 以外のデータでも同じ手順で大丈夫? A. 概ね Yes。 政府統計(e-Stat)、 World Bank Open Data、 国際機関の公開データ、 自社のログデータ — どれもエンコーディング・スキーマ・欠損処理の調整は必要ですが、 本ページのコードを土台にできます。
📌 早見表 — 横断データ
日本語名 横断データ
英語名 Cross-Sectional Data
カテゴリ データ種
グループ教材 data-types
一言で ある一時点 で複数の主体を観測したデータ。 都道府県別 2023 年データなどが典型。
主データ SSDSE-B-2026(47都道府県・112項目)/ e-Stat
主ライブラリ pandas / numpy / scipy / matplotlib / seaborn / statsmodels
学習推奨時間 概念把握 30 分 + 実装演習 60 分 + 関連用語の確認 30 分 = 約 2 時間
📚 さらに学ぶための資料
横断データ をさらに深く学ぶための代表的リソース:
公的データ :e-Stat(政府統計の総合窓口) 、 SSDSE(教育用標準データセット) 、 RESAS(地域経済分析システム)
教科書(日本語) :「データ解析のための統計モデリング入門」「統計学入門」「Python ではじめる機械学習」など、 入門〜中級書が豊富
教科書(英語) :『The Elements of Statistical Learning』『Pattern Recognition and Machine Learning』『Deep Learning』など標準テキスト
オンライン講座 :Coursera、 edX、 Kaggle Learn、 統計検定の公式問題集
論文 :Google Scholar / arXiv で Cross-sectional Data を検索 → 引用数の多い基礎論文から
コミュニティ :Kaggle、 SIGNATE、 Cross Validated(Stack Exchange)、 日本統計学会
📚 関連グループ教材
この用語の全体像を学ぶには、 横断的な教材で文脈を掴むのが効率的です:
🗺 概念マップ
クロスセクションデータを中心に、 時系列データ ・パネルデータ ・反復横断データ との比較関係、 サンプリング (層化・クラスター)、 分析手法 (回帰・主成分・クラスタリング) への接続を整理した。 SSDSE-B-2026 が典型的な 47 都道府県 × 単一時点のクロスセクションデータであることを念頭に、 どの手法が直接適用でき、 どの手法が時系列構造を要求するかを判断する地図として使える。
横断データ
同一時点の比較
時系列データとの対比
パネルデータへ拡張
学術研究
実務応用
公的統計の活用
概念マップ中央のクロスセクションデータから 3 方向に枝が伸びる: 上方の「公的統計の活用」は SSDSE や国勢調査のような 同一時点で全 47 都道府県を一気に観察する 典型例。 右方の「学術研究」は社会学・経済学で家計・企業を横並びにする横断調査。 左下の「実務応用」は商品別売上比較や店舗別 KPI ベンチマークなど、 日々の意思決定で最も頻出する形態。
クロスセクションの強みは 時間軸を固定して個体差だけに集中できる 点だが、 同時に「因果方向が不明」「コーホート効果が紛れ込む」という弱みも持つ。 図右下の「時系列データ」「パネルデータ」は、 これらの弱みを時間情報を加えて補完する隣接概念で、 SSDSE-B-2026 のように年度別ファイルを縦結合すればパネルデータに昇格できる。
🔗 隣接手法への橋渡し
「クロスセクションデータ」は単独で完結する手法ではなく、 隣接領域と連携することで真価を発揮する。
クリーニング → 記述統計 → 群間検定/回帰 → 政策示唆の流れで、 因果は推論できないため「相関の段で結論を急がない」設計が要点。
🌳 手法選択フロー
横断データ(同一時点で個体を横並びに観測)は、 時間軸の扱い・個体追跡の有無・因果推論の意図で、 どのデータ構造へ展開するかを多段で決める。
① 時間軸の情報は必要か?
No(1 時点での比較のみ)→ 横断データ 確定 → ② へ
Yes → 時間情報の扱い方を ③ で決める
② 横断データ内での分析目的は?
③ 時間軸を加えるなら、 個体は追跡するか?
④ 因果推論をしたいか?
⑤ サンプリングは適切か?
💡 ポイント: 「時点の扱い → 個体追跡の有無 → 因果意図 → サンプリング」 の順で多段判定すると、 横断 → 反復横断 → パネル → 時系列の使い分けが整理できる。