論文一覧に戻る 🗺 概念マップ 統計データ分析コンペ 教育用再現集
2019年度 統計データ分析コンペティション | 統計活用奨励賞(大学生部門)

保育所整備と女性就業率が
合計特殊出生率に与える影響の
パネルデータ分析

⏱️ 推定読了時間: 約42分
2019年度受賞作品 パネルデータ分析 ・ 固定効果モデル ・ Hausman検定
📝 3行で分かる要約

目次

  1. 研究の背景と目的
  2. データと変数
  3. 主要な分析結果
  4. 統計的手法の解説
  5. 発展的学習
  6. まとめと政策含意
  7. 参考文献・データ
  8. 📥 データの準備
  9. 💼 実社会での応用
  10. ⚠️ よくある誤解
  11. 📖 用語集
  12. 📐 手法ガイド
  13. 🚀 発展の可能性
  14. 🎯 自分でやってみよう
  15. 🤔 Q&A

🎯 この記事を読むと何ができるようになるか

📥 データの準備(再現コードを動かす前に)

このページの分析を自分で再現するには、以下の手順でデータを準備してください。コードの編集は不要です。

1
データをダウンロードする 統計センターの SSDSE 配布ページから、以下のファイルをダウンロードします。
SSDSE-B-2026.csv ← SSDSE-B(都道府県データ)📥 直接DL
⬇ SSDSEダウンロードページを開く
2
ファイルを所定のフォルダに配置する ダウンロードしたCSVを、プロジェクトの data/raw/ フォルダに入れます。
2026 統計・データ解析コンペ/ ├── code/ │ └── 2019_U4_katsuyo.py ← 実行するスクリプト └── data/ └── raw/ SSDSE-B-2026.csv ← ここに置く
3
スクリプトをそのまま実行する ターミナルでプロジェクトルートに移動し、以下を実行します。
python3 code/2019_U4_katsuyo.py
図は html/figures/ に自動保存されます。
1
研究の背景と目的

日本の合計特殊出生率TFR)は2005年に過去最低の1.26を記録した後、わずかに回復したものの長期的な少子化傾向が続いている。政府は「待機児童ゼロ」を掲げた保育所整備と、「女性活躍推進法」による女性就業支援を少子化対策の柱として位置づけてきた。

まず「保育所整備と女性就業率が合計特殊出生率に与える影響のパネルデータ分析」を統計的にとらえることが有効だと考えられる。 その理由は感覚や経験則だけでは、複雑な社会要因の中で「何が本当に効いているか」を見極めにくいからである。 本研究では公開データと統計手法を組み合わせ、この問いに定量的な答えを出すことを目指す。

問題提起:保育所整備は出生率を上げるのか? 保育所を整備すると女性が働きやすくなるが、それが出生率を上げるのか下げるのかは先験的に不明確である。欧米の研究では「保育サービスの充実が出生率を押し上げる」という正の効果が報告される一方、日本では「就業率上昇が育児時間の減少をもたらす」という負の効果を示す研究もある。

本研究は都道府県パネルデータを用いた固定効果モデルによって、この問いに対して実証的な回答を試みる。都道府県固有の不観測要因(文化・慣習・地理的条件など)をコントロールしたうえで、保育所整備・女性就業率・婚姻率などが出生率に与える純粋な影響を推定することが目的である。

分析の流れ
SSDSE-B
47都道府県
11年パネル
変数選択

指標計算
Hausman
検定
固定効果
モデル
推定
OLSとの
係数比較

パネルデータ分析 固定効果モデル Hausman検定 少子化政策 女性活躍

2
データと変数

使用データ

SSDSE(社会・人口統計体系データセット)-B を使用。47都道府県 × 11年度(2012〜2022年)の517観測値パネルデータとして構築した。

変数の種類変数名定義・計算方法出典(SSDSE-B列名)
目的変数 合計特殊出生率TFR 15〜49歳女性の年齢別出生率の合計 合計特殊出生率
説明変数 保育所数(千人当たり) 保育所等数 ÷ 総人口 × 1000 保育所等数、総人口
女性就業活動率 就職件数(一般)÷ 15〜64歳女性人口 × 1000
(女性労働市場活動の代理指標)
就職件数(一般)、15〜64歳人口(女)
婚姻率 婚姻件数 ÷ 総人口 × 1000 婚姻件数、総人口
消費支出(対数) log(消費支出:二人以上世帯)
(所得水準の代理変数)
消費支出(二人以上の世帯)
変数選択の注意点:女性就業率の代理変数 SSDSE-Bには直接的な「女性就業率」の列はない。本分析では就職件数(一般)を15〜64歳女性人口で除した指標を女性労働市場活動の代理変数として使用した。この指標は就業者のフロー(年間新規就業数)を反映するため、実際の就業率(ストック)とは異なることに留意が必要である。

パネルデータの構造

項目
観測単位(エンティティ)47都道府県
時間次元2012〜2022年度(11年間)
総観測数517(欠損除去後)
パネルの種類バランスパネル(各都道府県11年分)
推定手法固定効果モデル(クラスター標準誤差
やってみようデータ読み込み
📝 コード
 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 os
import numpy as np
import pandas as pd
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import statsmodels.api as sm
from scipy import stats

plt.rcParams['font.family'] = 'Hiragino Sans'
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams['figure.dpi'] = 150

FIG_DIR = 'html/figures'
DATA_B  = 'data/raw/SSDSE-B-2026.csv'
os.makedirs(FIG_DIR, exist_ok=True)

df_b = pd.read_csv(DATA_B, encoding='cp932', header=1)
df_b = df_b[df_b['地域コード'].str.match(r'^R\d{5}', na=False)].copy()
df_b['年度'] = df_b['年度'].astype(int)

# 2012〜2022年度に絞る
df_b = df_b[df_b['年度'].between(2012, 2022)].copy()
df_b = df_b.reset_index(drop=True)
▼ 実行結果
このステップは print はしません。データや図が裏で更新されただけ。次のステップへ進みましょう。
💡 解説
  • import pandas as pd など — 必要なライブラリをまとめて呼び出します。as pd は短い別名(alias)。
  • matplotlib.use('Agg') — グラフを画面表示せずファイルに保存するためのおまじない。
  • plt.rcParams['font.family'] — グラフの日本語表示用フォント指定(Macは Hiragino Sans、Windowsなら Yu Gothic 等)。
  • os.makedirs('html/figures', exist_ok=True) — 図の保存先フォルダを作る(既にあってもOK)。
  • pd.read_csv(...) でCSVを読み込みます。encoding='cp932' は日本語Windows由来の文字コード、header=1 は「2行目を列名として使う」。
  • df['地域コード'].str.match(r'^R\d{5}', ...) — 正規表現で「R+数字5桁」の行(47都道府県)だけTrueにし、真偽値で行をフィルタ。
  • .astype(int) — 列を整数に変換(年度などを数値比較するため)。
💡 Python TIPS f"...{x}..."f-string。文字列の中に {変数} と書くだけで埋め込めて、{x:.2f} のように書式も指定できます。
やってみよう分析変数の計算
📝 コード
25
26
27
28
29
30
31
32
df_b['TFR'] = df_b['合計特殊出生率'].astype(float)

# 保育所数(人口千人当たり)
df_b['保育所千人当たり'] = df_b['保育所等数'] / df_b['総人口'] * 1000

# 女性就業率の代理変数:就職件数(一般)/ 15〜64歳女性人口 × 1000
# (労働市場での女性活動強度の代理指標)
df_b['女性就業活動率'] = df_b['就職件数(一般)'] / df_b['15~64歳人口(女)'] * 1000
▼ 実行結果
このステップは print はしません。データや図が裏で更新されただけ。次のステップへ進みましょう。
💡 解説
  • このステップでは前のステップで作ったデータを加工しています。コードを上から順に読んでみてください。
💡 Python TIPS df['A'] / df['B'] — pandasの列同士の四則演算は要素ごと(element-wise)。forループ不要なのが強み。
やってみよう分析変数の計算 — 婚姻率(人口千人当たり)
📝 コード
33
34
35
36
37
38
39
40
# 婚姻率(人口千人当たり)
df_b['婚姻率'] = df_b['婚姻件数'] / df_b['総人口'] * 1000

# 消費支出(所得水準の代理変数):対数変換
df_b['log消費支出'] = np.log(df_b['消費支出(二人以上の世帯)'].astype(float))

# 高齢化率
df_b['高齢化率'] = df_b['65歳以上人口'] / df_b['総人口'] * 100
▼ 実行結果
このステップは print はしません。データや図が裏で更新されただけ。次のステップへ進みましょう。
💡 解説
  • このステップでは前のステップで作ったデータを加工しています。コードを上から順に読んでみてください。
💡 Python TIPS Seriesの .map() は「1対1の置き換え」、.apply() は「関数を当てる」。辞書なら .map()、ロジックなら .apply()
やってみよう分析変数の計算 — 保育所等定員充足率(待機児童割合の逆)
📝 コード
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# 保育所等定員充足率(待機児童割合の逆)
df_b['保育所定員率'] = df_b['保育所等定員数'] / (df_b['保育所等在所児数'] + 1) * 100

# 地域区分(6地域)
region_map = {
    '北海道': '北海道東北', '青森': '北海道東北', '岩手': '北海道東北',
    '宮城': '北海道東北', '秋田': '北海道東北', '山形': '北海道東北', '福島': '北海道東北',
    '茨城': '関東', '栃木': '関東', '群馬': '関東', '埼玉': '関東',
    '千葉': '関東', '東京': '関東', '神奈川': '関東',
    '新潟': '中部', '富山': '中部', '石川': '中部', '福井': '中部',
    '山梨': '中部', '長野': '中部', '岐阜': '中部', '静岡': '中部', '愛知': '中部',
    '三重': '近畿', '滋賀': '近畿', '京都': '近畿', '大阪': '近畿',
    '兵庫': '近畿', '奈良': '近畿', '和歌山': '近畿',
    '鳥取': '中国四国', '島根': '中国四国', '岡山': '中国四国',
    '広島': '中国四国', '山口': '中国四国',
    '徳島': '中国四国', '香川': '中国四国', '愛媛': '中国四国', '高知': '中国四国',
    '福岡': '九州沖縄', '佐賀': '九州沖縄', '長崎': '九州沖縄', '熊本': '九州沖縄',
    '大分': '九州沖縄', '宮崎': '九州沖縄', '鹿児島': '九州沖縄', '沖縄': '九州沖縄',
}
df_b['地域'] = df_b['都道府県'].map(region_map).fillna('その他')

region_colors = {
    '北海道東北': '#4e9af1',
    '関東': '#e05c5c',
    '中部': '#f0a500',
    '近畿': '#5cb85c',
    '中国四国': '#9b59b6',
    '九州沖縄': '#f39c12',
}
▼ 実行結果
このステップは print はしません。データや図が裏で更新されただけ。次のステップへ進みましょう。
💡 解説
  • このステップでは前のステップで作ったデータを加工しています。コードを上から順に読んでみてください。
💡 Python TIPS [式 for x in リスト]リスト内包表記。forループでappendする代わりに1行でリストを作れます。
やってみよう分析変数の計算 — 分析対象カラムの欠損除去
📝 コード
70
71
72
73
74
75
# 分析対象カラムの欠損除去
analysis_cols = ['TFR', '保育所千人当たり', '女性就業活動率', '婚姻率', 'log消費支出']
df_b = df_b.dropna(subset=analysis_cols).copy()

print(f"分析データ:{df_b['都道府県'].nunique()}都道府県 × {df_b['年度'].nunique()}年度 = {len(df_b)}観測値")
print(f"年度範囲:{df_b['年度'].min()}{df_b['年度'].max()}")
▼ 実行結果
分析データ:47都道府県 × 11年度 = 517観測値
年度範囲:2012〜2022
💡 解説
  • このステップでは前のステップで作ったデータを加工しています。コードを上から順に読んでみてください。
💡 Python TIPS r, p = stats.pearsonr(...) — Pythonは複数戻り値を同時に受け取れる(タプルアンパック)。
3
主要な分析結果

図1:都道府県別・合計特殊出生率の時系列変化(2012〜2022年)

都道府県別合計特殊出生率の時系列変化
図1:6地域別の合計特殊出生率の推移(2012〜2022年)。全国平均(黒破線)とともに示す。九州沖縄地域が一貫して高く、東北・北海道が低い傾向が見られる。2020年以降はCOVID-19の影響で全地域で低下が加速した。
📌 この時系列グラフの読み方
このグラフは
横軸を時間(年度)、縦軸を指標の値として変化を折れ線で描いたグラフ。
読み方
線が右上がりなら増加トレンド、右下がりなら減少トレンド。急な折れ目が変化点(政策導入・コロナなど)を示す可能性がある。
なぜそう解釈できるか
複数の線(都道府県や指標)を重ねると、どの地域・変数が早く動いたか(リード・ラグ関係)が視覚的にわかる。
時系列推移から読み取れること
  • 九州沖縄地域は全期間を通じて高い出生率(平均1.60前後)を維持
  • 東北・北海道は低水準が続き、地域格差が固定化している
  • 全地域で2020年以降の低下が顕著(COVID-19の「birth shock」)
  • これらの地域固有の差異が、固定効果モデルで除去すべき不観測要因

図2:女性就業活動率と合計特殊出生率の関係(2022年)

女性就業活動率と合計特殊出生率の散布図
図2:2022年時点の47都道府県における女性就業活動率(就職件数/15〜64歳女性人口×1000)と合計特殊出生率散布図。破線は回帰直線。地域別に色分け。
📌 この散布図の読み方
このグラフは
横軸(x)と縦軸(y)に2変数を取り、各都道府県(または自治体)を点で描いたグラフ。
読み方
点の並びに右上がりの傾向があれば正の相関、右下がりなら負の相関。点が直線に近いほど相関が強い。
なぜそう解釈できるか
回帰直線(赤線など)の傾きが回帰係数に対応する。直線から大きく外れた点が外れ値で、特異な地域を示す。
断面データでの観察(OLS 単純な断面回帰では女性就業活動率と出生率の間に正の相関が見られる。しかし、この相関には各都道府県の固有の特性(地域の文化・産業構造・保守的/革新的な社会規範)が混在している可能性がある。固定効果モデルではこれらを除去して「純粋な」関係を推定する。

図3:保育所数(人口千人当たり)と合計特殊出生率の関係(2022年)

保育所数と合計特殊出生率の散布図
図3:2022年・47都道府県の保育所等数(人口千人当たり)と合計特殊出生率散布図。地域別に色分け。
📌 この散布図の読み方
このグラフは
横軸(x)と縦軸(y)に2変数を取り、各都道府県(または自治体)を点で描いたグラフ。
読み方
点の並びに右上がりの傾向があれば正の相関、右下がりなら負の相関。点が直線に近いほど相関が強い。
なぜそう解釈できるか
回帰直線(赤線など)の傾きが回帰係数に対応する。直線から大きく外れた点が外れ値で、特異な地域を示す。
保育所と出生率:正の相関の背景 保育所数が多い都道府県ほど出生率が高い傾向は断面データで確認できる。ただし、この正の相関には「出生率が高い地域ほど保育需要が大きく保育所が整備される」という逆因果の可能性もある。パネル固定効果モデルはこの問題を一部緩和する(ただし完全には解決しない)。

図4:固定効果モデル vs プーリングOLS の係数比較

固定効果モデルとOLSの係数比較
図4:固定効果モデルFE、左)とプーリングOLS(右)の推定係数(±1SE)比較。同じデータでも推定値が大きく異なる変数があり、固定効果コントロールの重要性を示す。
📌 この回帰係数プロットの読み方
このグラフは
重回帰分析の各説明変数係数(影響の強さと向き)をバーや点で表したグラフ。
読み方
右(プラス方向)に伸びるバーは「この変数が増えると目的変数も増える」正の影響。左(マイナス方向)は逆。
なぜそう解釈できるか
エラーバー(誤差棒)が0をまたいでいない変数が統計的に有意(p < 0.05)。バーが長いほど影響が大きい。

推定結果サマリー

説明変数 FE係数 FE標準誤差 FE p値 OLS係数 OLS p値 解釈
保育所数(千人当たり) +0.151 0.169 0.372 +1.015 <0.001 FEで効果が大幅に縮小・非有意
女性就業活動率 +0.0009 0.0007 0.214 +0.0028 <0.001 FEで効果が縮小・非有意
婚姻率 +0.087 0.011 <0.001 +0.093 <0.001 両モデルで有意・強い正効果
消費支出(対数) −0.029 0.045 0.517 −0.242 <0.001 FEで効果が大幅に縮小・非有意
主要発見:固定効果コントロール後の係数変化
  • 婚姻率は両モデルで強く有意(p<0.001)。出生率の最強の規定因。
  • 保育所数OLSで大きな正効果(+1.015)→ FEで大幅縮小(+0.151・非有意)。これは都道府県固有の不観測要因が保育所整備と出生率の両方に影響していたことを示唆する。
  • 女性就業活動率OLSからFE係数が縮小。固定効果の除去により過大評価が修正された。
  • F検定(プーリング可能性:F=53.87, p<0.001)により固定効果の存在を統計的に確認
やってみよう図図1:都道府県別・合計特殊出生率時系列変化(2012-2022年)
📝 コード
77
78
79
80
81
82
83
84
85
86
fig, ax = plt.subplots(figsize=(10, 6))

years = sorted(df_b['年度'].unique())

# 地域別平均
for region, color in region_colors.items():
    region_data = df_b[df_b['地域'] == region].groupby('年度')['TFR'].mean()
    ax.plot(region_data.index, region_data.values,
            color=color, linewidth=2, marker='o', markersize=4,
            label=region, alpha=0.85)
▼ 実行結果
このステップは print はしません。データや図が裏で更新されただけ。次のステップへ進みましょう。
💡 解説
  • df.groupby('列').apply(関数) — グループごとに関数を適用。時系列や地域別の集計でよく使います。
  • fig, ax = plt.subplots(...) — 図全体(fig)と軸(ax)を作る定番。以降は ax.bar(...) 等で操作。
💡 Python TIPS Seriesの .map() は「1対1の置き換え」、.apply() は「関数を当てる」。辞書なら .map()、ロジックなら .apply()
やってみよう図図1:都道府県別・合計特殊出生率時系列変化(2012-2022年) — 全国平均
📝 コード
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
# 全国平均
national_avg = df_b.groupby('年度')['TFR'].mean()
ax.plot(national_avg.index, national_avg.values,
        color='#1a1a2e', linewidth=3, marker='D', markersize=6,
        label='全国平均', linestyle='--', zorder=5)

ax.set_xlabel('年度', fontsize=12)
ax.set_ylabel('合計特殊出生率', fontsize=12)
ax.set_title('都道府県別・合計特殊出生率の時系列変化(2012〜2022年)', fontsize=13, fontweight='bold')
ax.legend(loc='upper right', fontsize=10, framealpha=0.9)
ax.set_xticks(years)
ax.tick_params(axis='x', rotation=45)
ax.grid(axis='y', alpha=0.3, linestyle='--')
ax.set_ylim(1.0, 2.2)
▼ 実行結果
このステップは print はしません。データや図が裏で更新されただけ。次のステップへ進みましょう。
💡 解説
  • df.groupby('列').apply(関数) — グループごとに関数を適用。時系列や地域別の集計でよく使います。
💡 Python TIPS [式 for x in リスト]リスト内包表記。forループでappendする代わりに1行でリストを作れます。
やってみよう図図1:都道府県別・合計特殊出生率時系列変化(2012-2022年) — 注釈:2020年コロナ
📝 コード
101
102
103
104
105
106
107
108
# 注釈:2020年コロナ
ax.axvline(x=2020, color='gray', linestyle=':', alpha=0.5, linewidth=1.5)
ax.text(2020.1, 1.05, 'COVID-19', fontsize=9, color='gray')

plt.tight_layout()
fig.savefig(os.path.join(FIG_DIR, '2019_U4_fig1.png'), dpi=150, bbox_inches='tight')
plt.close(fig)
print("fig1 saved")
▼ 実行結果
fig1 saved
💡 解説
  • ax.axhline / ax.axvline — 水平/垂直の点線。平均線や基準線として定番。
  • fig.savefig(..., bbox_inches='tight') — 余白を自動で詰めて保存。plt.close() でメモリ解放。
💡 Python TIPS r, p = stats.pearsonr(...) — Pythonは複数戻り値を同時に受け取れる(タプルアンパック)。
4
統計的手法の解説

パネルデータとは

パネルデータ(longitudinal data)は同一の観測単位(ここでは都道府県)を複数時点にわたって追跡したデータである。横断面データ(断面データ)と時系列データの特性を兼ね備えており、観測できない個体固有の特性をコントロールできる点が最大の利点。

パネルデータの基本モデル

yit = αi + β1保育所it + β2就業率it + β3婚姻率it + β4消費支出it + εit

i = 1, ..., 47(都道府県)  t = 2012, ..., 2022(年度)
αi:都道府県固有の固定効果(不観測の個体効果)
DS LEARNING POINT 1

DS Learning Point 1

固定効果モデル(Fixed Effects Model)の直感的理解

固定効果モデルは「各都道府県の平均からの偏差」だけを使って回帰する(within推定)。都道府県ごとに時間が経つにつれて変数がどう変化したかを見るため、変化しない都道府県固有の特性(不観測ヘテロジェナイティ)が自動的に除去される。

from linearmodels.panel import PanelOLS import pandas as pd # パネルデータのインデックス設定 df_panel = df.set_index(['都道府県', '年度']) # 固定効果モデル(entity_effects=Trueで都道府県固定効果) model = PanelOLS( df_panel['TFR'], # 目的変数 df_panel[X_cols], # 説明変数 entity_effects=True # 個体固定効果を含める ) res = model.fit( cov_type='clustered', # クラスター標準誤差(系列相関に頑健) cluster_entity=True # 都道府県単位でクラスタリング ) print(res.summary)

Hausman検定:固定効果 vs 変量効果の選択

パネルデータ分析では「固定効果モデル」と「変量効果モデル」のどちらを使うかを決める必要がある。Hausman検定はその選択基準を提供する。

モデル仮定利点欠点
固定効果FE αi説明変数相関してもよい 内生性に頑健・一致推定量 時間不変変数の効果が推定不可・自由度損失
変量効果(RE αi説明変数と無相関(強仮定) 効率的・時間不変変数も推定可能 仮定が成立しないと非一致(バイアス)
DS LEARNING POINT 2

DS Learning Point 2

Hausman検定の考え方

Hausman検定帰無仮説は「変量効果モデルが一致推定量を与える」(=個体効果と説明変数が無相関)。帰無仮説が棄却される(p<0.05)場合は固定効果モデルを使う。

from linearmodels.panel import RandomEffects # 変量効果モデルの推定 model_re = RandomEffects(df_panel['TFR'], df_panel[X_cols]) res_re = model_re.fit() # Hausman検定 # H0: 変量効果が一致推定量(個体効果と説明変数が無相関) # H1: 固定効果が必要(個体効果と説明変数相関) b_fe = res_fe.params # FE係数 b_re = res_re.params # RE係数 V_fe = res_fe.cov # FE分散共分散行列 V_re = res_re.cov # RE分散共分散行列 diff = b_fe - b_re V_diff = V_fe - V_re from numpy.linalg import inv import numpy as np H = float(diff.T @ inv(V_diff) @ diff) from scipy import stats p_hausman = 1 - stats.chi2.cdf(H, df=len(b_fe)) print(f"Hausman統計量: {H:.4f}") print(f"p値: {p_hausman:.4f}") if p_hausman < 0.05: print("→ 固定効果モデルを採用") else: print("→ 変量効果モデルを採用")

クラスター標準誤差の重要性

パネルデータでは同一都道府県の観測値間に系列相関(serial correlation)が存在することが多い。通常のOLS標準誤差はこれを無視するため過小推定となり、t検定の第一種の過誤が膨らむ。都道府県単位のクラスター標準誤差によってこの問題を修正する。

プーリング可能性検定(F検定 本分析の結果:F統計量 = 53.87, p値 < 0.001
→ 全都道府県の固定効果が共通(α12=...=α47)という帰無仮説が強く棄却される。
固定効果モデルの使用が統計的に正当化される。
やってみよう図図2:女性就業活動率と合計特殊出生率散布図(2022年)
📝 コード
110
111
112
113
114
115
116
117
df_2022 = df_b[df_b['年度'] == 2022].copy()

fig, ax = plt.subplots(figsize=(9, 7))

for region, color in region_colors.items():
    sub = df_2022[df_2022['地域'] == region]
    ax.scatter(sub['女性就業活動率'], sub['TFR'],
               color=color, s=70, alpha=0.85, label=region, zorder=3, edgecolors='white', linewidths=0.5)
▼ 実行結果
このステップは print はしません。データや図が裏で更新されただけ。次のステップへ進みましょう。
💡 解説
  • fig, ax = plt.subplots(...) — 図全体(fig)と軸(ax)を作る定番。以降は ax.bar(...) 等で操作。
💡 Python TIPS [式 for x in リスト]リスト内包表記。forループでappendする代わりに1行でリストを作れます。
やってみよう図図2:女性就業活動率と合計特殊出生率散布図(2022年) — 回帰直線
📝 コード
118
119
120
121
122
123
124
125
126
127
# 回帰直線
x_arr = df_2022['女性就業活動率'].values
y_arr = df_2022['TFR'].values
mask = np.isfinite(x_arr) & np.isfinite(y_arr)
x_arr, y_arr = x_arr[mask], y_arr[mask]

slope, intercept, r_value, p_value, std_err = stats.linregress(x_arr, y_arr)
x_line = np.linspace(x_arr.min(), x_arr.max(), 100)
y_line = slope * x_line + intercept
ax.plot(x_line, y_line, color='#333333', linewidth=2, linestyle='--', zorder=4)
▼ 実行結果
このステップは print はしません。データや図が裏で更新されただけ。次のステップへ進みましょう。
💡 解説
  • stats.linregress(x, y) — 単回帰の傾き・切片・r値・p値・標準誤差を返します。使わない値は _ で受け取り。
💡 Python TIPS r, p = stats.pearsonr(...) — Pythonは複数戻り値を同時に受け取れる(タプルアンパック)。
やってみよう図図2:女性就業活動率と合計特殊出生率散布図(2022年) — 相関係数p値
📝 コード
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
# 相関係数・p値
ax.text(0.05, 0.95,
        f'r = {r_value:.3f}\np = {p_value:.4f}',
        transform=ax.transAxes, fontsize=11, verticalalignment='top',
        bbox=dict(boxstyle='round,pad=0.5', facecolor='white', edgecolor='#cccccc', alpha=0.9))

# 都道府県ラベル(上位・下位)
label_prefs = ['沖縄', '東京', '秋田', '北海道', '宮崎', '島根', '愛知', '大阪']
for _, row in df_2022[df_2022['都道府県'].isin(label_prefs)].iterrows():
    if np.isfinite(row['女性就業活動率']) and np.isfinite(row['TFR']):
        ax.annotate(row['都道府県'],
                    (row['女性就業活動率'], row['TFR']),
                    xytext=(4, 4), textcoords='offset points', fontsize=8.5, color='#333333')

ax.set_xlabel('女性就業活動率(就職件数/15〜64歳女性人口×1000)', fontsize=11)
ax.set_ylabel('合計特殊出生率(2022年)', fontsize=11)
ax.set_title('女性就業活動率と合計特殊出生率の関係(2022年・都道府県別)', fontsize=12, fontweight='bold')
ax.legend(loc='lower right', fontsize=9, framealpha=0.9)
ax.grid(alpha=0.3, linestyle='--')

plt.tight_layout()
fig.savefig(os.path.join(FIG_DIR, '2019_U4_fig2.png'), dpi=150, bbox_inches='tight')
plt.close(fig)
print("fig2 saved")
▼ 実行結果
fig2 saved
💡 解説
  • for _, row in df.iterrows() — DataFrameを1行ずつ取り出すループ。1点ずつ描画したいときに使用。
  • fig.savefig(..., bbox_inches='tight') — 余白を自動で詰めて保存。plt.close() でメモリ解放。
💡 Python TIPS x if cond else y三項演算子。リスト内包表記と組み合わせると、forとifを1行で書けます。
5
発展的学習

内生性問題と操作変数法

固定効果モデルでも解決できない問題がある。保育所整備と出生率の間には逆因果(出生率が高い→保育需要増加→保育所整備)と見かけ上の相関(第3の変数が両方に影響)が残る可能性がある。より厳密な因果推定には操作変数法IV法)差分の差分法(DID法)が有効である。

DS LEARNING POINT 3

DS Learning Point 3

差分の差分法(DID)による政策評価

保育所整備政策の因果効果を推定するには、「政策実施前後の変化」を「政策の影響を受けなかった地域」と比較するDID推定が有効。例えば保育所の急増した都道府県を処置群、そうでない都道府県を対照群とする。

import statsmodels.formula.api as smf # DID の基本構造 # y_it = α + β1*Treated_i + β2*Post_t + β3*(Treated_i × Post_t) + ε_it # # β3 が「処置効果(ATT)」の推定値 df['処置群'] = (df['保育所千人当たり'].groupby('都道府県').transform( lambda x: (x.iloc[-1] - x.iloc[0]) > 閾値 )).astype(int) df['事後'] = (df['年度'] >= 政策開始年).astype(int) df['処置×事後'] = df['処置群'] * df['事後'] res_did = smf.ols( 'TFR ~ 処置群 + 事後 + 処置×事後 + C(都道府県)', data=df ).fit(cov_type='cluster', cov_kwds={'groups': df['都道府県']}) print(f"DID推定量(β3)= {res_did.params['処置×事後']:.4f}") print(f"p値 = {res_did.pvalues['処置×事後']:.4f}")

時間固定効果の追加(Two-way FE)

都道府県固定効果に加えて年度固定効果を追加する「双方向固定効果モデル(Two-way FE)」も重要な拡張である。景気後退・少子化対策の全国一律変化・COVID-19のような時間的ショックをコントロールできる。

DS LEARNING POINT 4

DS Learning Point 4

双方向固定効果モデル(Two-way FE)

都道府県固定効果(αi)と年度固定効果(γt)の両方を含めることで、観測できない都道府県特性と年度特有のショックを同時にコントロールできる。

from linearmodels.panel import PanelOLS # 双方向固定効果:entity_effects + time_effects model_twoway = PanelOLS( df_panel['TFR'], df_panel[X_cols], entity_effects=True, # 都道府県固定効果 time_effects=True # 年度固定効果 ) res_twoway = model_twoway.fit( cov_type='clustered', cluster_entity=True ) # 年度固定効果係数(COVID-19の影響など) time_fe = res_twoway.estimated_effects print("年度固定効果の推定値:") print(time_fe.groupby(level='年度').mean())

地域別異質性の検討

本分析は全国47都道府県を一括して推定しているが、保育所整備の効果は地域によって異なる可能性がある(空間的異質性)。例えば、都市部では保育所整備が就業促進につながりやすいが、農村部では元々就業率が高く異なるメカニズムが働く可能性がある。サブグループ分析交差項の導入が発展的な分析手法として考えられる。

やってみよう図図3:保育所数(人口千人当たり)と出生率の散布図(地域色分け)
📝 コード
153
154
155
156
157
158
fig, ax = plt.subplots(figsize=(9, 7))

for region, color in region_colors.items():
    sub = df_2022[df_2022['地域'] == region]
    ax.scatter(sub['保育所千人当たり'], sub['TFR'],
               color=color, s=70, alpha=0.85, label=region, zorder=3, edgecolors='white', linewidths=0.5)
▼ 実行結果
このステップは print はしません。データや図が裏で更新されただけ。次のステップへ進みましょう。
💡 解説
  • fig, ax = plt.subplots(...) — 図全体(fig)と軸(ax)を作る定番。以降は ax.bar(...) 等で操作。
💡 Python TIPS r, p = stats.pearsonr(...) — Pythonは複数戻り値を同時に受け取れる(タプルアンパック)。
やってみよう図図3:保育所数(人口千人当たり)と出生率の散布図(地域色分け) — 回帰直線
📝 コード
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
# 回帰直線
x_arr2 = df_2022['保育所千人当たり'].values
y_arr2 = df_2022['TFR'].values
mask2 = np.isfinite(x_arr2) & np.isfinite(y_arr2)
x2, y2 = x_arr2[mask2], y_arr2[mask2]

slope2, intercept2, r2, p2, se2 = stats.linregress(x2, y2)
x_line2 = np.linspace(x2.min(), x2.max(), 100)
y_line2 = slope2 * x_line2 + intercept2
ax.plot(x_line2, y_line2, color='#333333', linewidth=2, linestyle='--', zorder=4)

ax.text(0.05, 0.95,
        f'r = {r2:.3f}\np = {p2:.4f}',
        transform=ax.transAxes, fontsize=11, verticalalignment='top',
        bbox=dict(boxstyle='round,pad=0.5', facecolor='white', edgecolor='#cccccc', alpha=0.9))
▼ 実行結果
このステップは print はしません。データや図が裏で更新されただけ。次のステップへ進みましょう。
💡 解説
  • stats.linregress(x, y) — 単回帰の傾き・切片・r値・p値・標準誤差を返します。使わない値は _ で受け取り。
💡 Python TIPS x if cond else y三項演算子。リスト内包表記と組み合わせると、forとifを1行で書けます。
やってみよう図図3:保育所数(人口千人当たり)と出生率の散布図(地域色分け) — 都道府県ラベル
📝 コード
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
# 都道府県ラベル
label_prefs2 = ['沖縄', '東京', '秋田', '福井', '長崎', '鳥取', '大阪', '神奈川']
for _, row in df_2022[df_2022['都道府県'].isin(label_prefs2)].iterrows():
    if np.isfinite(row['保育所千人当たり']) and np.isfinite(row['TFR']):
        ax.annotate(row['都道府県'],
                    (row['保育所千人当たり'], row['TFR']),
                    xytext=(4, 4), textcoords='offset points', fontsize=8.5, color='#333333')

ax.set_xlabel('保育所等数(人口千人当たり)', fontsize=11)
ax.set_ylabel('合計特殊出生率(2022年)', fontsize=11)
ax.set_title('保育所数(人口千人当たり)と合計特殊出生率の関係(2022年)', fontsize=12, fontweight='bold')
ax.legend(loc='lower right', fontsize=9, framealpha=0.9)
ax.grid(alpha=0.3, linestyle='--')

plt.tight_layout()
fig.savefig(os.path.join(FIG_DIR, '2019_U4_fig3.png'), dpi=150, bbox_inches='tight')
plt.close(fig)
print("fig3 saved")
▼ 実行結果
fig3 saved
💡 解説
  • for _, row in df.iterrows() — DataFrameを1行ずつ取り出すループ。1点ずつ描画したいときに使用。
  • fig.savefig(..., bbox_inches='tight') — 余白を自動で詰めて保存。plt.close() でメモリ解放。
💡 Python TIPS df[col](1列)と df[[col1, col2]](複数列)でカッコの数が違います。リストを渡していると覚えるとミスを減らせます。
6
まとめと政策含意

主要な発見

47都道府県 × 2012〜2022年のパネルデータを用いた固定効果モデルの推定から、以下の知見が得られた:

  1. 婚姻率が出生率の最強の規定因: 固定効果コントロール後も婚姻率(人口千人当たり)は強く有意な正効果(係数 +0.087, p<0.001)を示した。日本の出生率は依然として婚姻率と密接に連動しており、少子化対策には「結婚支援」が重要。
  2. 保育所整備の効果:OLSでは過大評価されていた: プーリングOLSでは保育所数の係数が +1.015(非常に大きい正効果)だったが、都道府県固定効果をコントロールすると +0.151(非有意)まで縮小。これは「保育所が多く出生率も高い」という相関の多くが都道府県固有の特性(九州文化・地方の子育て支援制度など)によるものであることを示唆する。
  3. 女性就業活動率:固定効果後は効果が縮小: OLSでは有意な正効果(+0.0028)だったが、固定効果モデルでは非有意(+0.0009)。女性の就業機会と出生率の関係も、地域固有の特性(産業構造・慣習)によって規定されている可能性がある。
  4. 不観測ヘテロジェナイティの重要性: F検定(F=53.87, p<0.001)により都道府県固定効果の存在が確認され、パネルデータ固定効果モデルの使用が正当化された。
政策への示唆
  • 保育所整備は出生率に直接的な大きな効果をもたらすとは言い切れない(固定効果コントロール後)。ただし、保育所整備による待機児童解消は「就業継続支援」として重要。
  • 婚姻率を高める政策(経済的支援、出会い支援、住居支援)が出生率に直接的に有効な可能性がある。
  • 地域固有の文化・制度的要因(都道府県固定効果)が出生率の地域格差の主要因であり、全国一律の政策より地域に応じた個別の対策が有効である可能性がある。
分析の限界と今後の課題
  • 逆因果の問題(出生率増→保育需要増→保育所整備)が残存:操作変数法DIDが必要
  • 女性就業率の代理変数が不完全(就職件数はフロー変数で就業率ストックとは異なる)
  • 市区町村レベルのデータを使えばより細かい政策効果が測定可能
  • 時間固定効果(年度効果)の追加による双方向FEへの拡張が有益
教育的価値(この分析から学べること)
  • パネルデータ × 固定効果:「地域 × 年」の繰り返し観測で、地域ごとの見えない特性(文化・気候・歴史)を取り除いて変数の効果を測れる。横断データの分析より一段深い分析が可能。
  • 「効果が消える」結果の読み方:単純な相関では大きく見えた保育所整備の効果が、固定効果モデルでは小さくなった。「政策を導入した地域はもともと出生率が高かった」という選択バイアスを示す好例。
  • 逆因果の構造:出生率が上がる→保育需要増→保育所整備、という逆方向の因果も考えられる。「原因 → 結果」の方向を統計だけで決められない問題に触れられる。
7
参考文献・データ

主要参考文献

著者・年タイトル掲載誌・出版社
Hausman (1978) Specification Tests in Econometrics Econometrica, 46(6)
Arroyo Abad & Lindert (2017) Fiscal redistribution and human capital since the 18th century Historical panel data
内閣府 (2019) 少子化社会対策白書 内閣府
厚生労働省(各年) 保育所等関連状況取りまとめ 厚生労働省
山口慎太郎 (2016) 「家族の幸せ」の経済学 光文社新書

使用データ

データ出典対象年度
SSDSE-B-2026(都道府県データ)統計数理研究所 SSDSE2012〜2022年
合計特殊出生率厚生労働省 人口動態統計2012〜2022年
保育所等数・定員・在所児数厚生労働省 保育所等関連状況取りまとめ2012〜2022年
就職件数(一般)厚生労働省 職業安定業務統計2012〜2022年
婚姻件数・人口データ厚生労働省 人口動態統計/総務省 住民基本台帳2012〜2022年

分析コードのダウンロード

分析スクリプト(2019_U4_katsuyo.py)

本コードはSSDSE-B-2026の実データを使用した教育用再現コードです。すべての図表は実公的統計データから生成されています。

⚠️ よくある誤解と注意点

統計分析の解釈で初心者がやりがちな勘違いをまとめます。特に「相関因果の混同」「p値の過信」は研究現場でもよく起きる落とし穴です。本文を読む前にも、読んだ後にも、目を通してみてください。

❌ 「相関がある=因果関係がある」ではない
疑似相関spurious correlationとは、見かけ上は関係があるように見えるが、実際は無関係、または第三の変数(交絡変数)が両方に影響しているだけの現象です。

古典例: アイスクリームの売上 と 水難事故件数 は強く相関するが、片方が他方を引き起こしているわけではない。両者とも「夏の暑さ」という第三の変数に引きずられているだけ。

論文を読むときの心構え: 「○○と△△に強い相関が見られた」だけで終わっている主張は、本当に因果関係があるのか、それとも第三の変数(人口・所得・地理など)が共通要因として効いているだけではないかを必ず疑ってください。
❌ 「p値が小さい=重要な発見」ではない
p値が小さい(例えば p < 0.001)ことは「統計的に偶然とは考えにくい」という意味であって、「実用的に大きな効果がある」という意味ではありません。

例: 巨大なサンプルサイズ(n=100,000)では、相関係数 r=0.02 でも p < 0.001 になります。しかし r=0.02 は実用上ほぼ無視できる関係です。

正しい読み方: p値効果量係数の大きさ、相関係数の値)の両方をセットで判断してください。p値だけで「重要な発見」と結論づけるのは誤りです。
❌ 「回帰係数が大きい=重要な変数」ではない
回帰係数の絶対値は、説明変数単位に強く依存します。「年収(万円)」と「失業率(%)」の係数を直接比較しても意味がありません。

正しい比較方法: (1) 標準化係数(各変数を平均0・分散1に変換した上での係数)を使う、(2) 限界効果(変数を1標準偏差動かしたときのyの変化)で比較する。

また、係数の大きさが「因果関係の強さ」を意味するわけでもありません。あくまで「相関的な関連の強さ」です。
❌ 「外れ値を除外すれば正しい結果」ではない
外れ値(極端な値)を「目障りだから」「結果が綺麗にならないから」という理由で除外するのは分析の改ざんに近い行為です。

外れ値が示すもの: 本当に重要な情報(東京の超高密度、北海道の超低密度など)であることが多い。外れ値を取り除くと「日本全体の傾向」を見誤る原因になります。

正しい対処: (1) 外れ値の出現要因を調査する(なぜ東京だけ突出するのか)、(2) ノンパラメトリック手法(Spearman相関Kruskal-Wallis)を使う、(3) 外れ値を含む結果と除外した結果の両方を提示し、解釈を読者に委ねる。
❌ 「サンプルサイズが大きい=信頼できる」ではない
サンプルサイズ(n)が大きいと統計的検定の検出力は上がりますが、それは「偶然による誤差を減らす効果」にすぎません。

nが大きくても解消されない問題:
選択バイアス標本が偏っている)
測定誤差(変数の定義が曖昧)
欠損値のパターン(欠損がランダムでない)
交絡変数の見落とし

例: 1万人にWeb調査して「ネット利用と幸福度は強く相関」と言っても、そもそも回答者がネットユーザー寄りに偏っているため、母集団全体の結論にはなりません。
❌ 「複雑なモデル=より良い分析」ではない
ランダムフォレストニューラルネット・複雑な階層モデルなど、高度な手法を使えば「良い分析」と感じがちですが、必ずしもそうではありません。

過学習(overfitting)の罠: モデルが複雑すぎると、訓練データ偶然のパターンまで学習してしまい、新しいデータでは予測精度が落ちます。

シンプルさの価値: 重回帰分析相関分析は「結果が解釈しやすい」「再現性が高い」という大きな利点があります。複雑な手法はシンプルな手法で答えが出ない時の最後の手段です。
❌ 「多重共線性は気にしなくていい」ではない
多重共線性とは、説明変数同士の相関が極めて強い状態のこと。これを放置すると、回帰係数符号や大きさが入れ替わる異常事態が起こります。

典型例: 「総人口」と「労働力人口」を同時に投入すると、両者の相関が r=0.99 になり、係数推定が極端に不安定になります。「総人口は正だが、労働力人口は負」のような解釈不能な結果になりがちです。

診断と対処:
VIF(分散拡大係数)を計算し、VIF > 10 の変数を確認
相関行列で |r| > 0.8 のペアをチェック
・対処法:一方を除外、合成変数(PCA)に変換、Ridge回帰で安定化
❌ 「R²が高い=良いモデル」ではない
決定係数 R² はモデルの「当てはまりの良さ」を示しますが、 が高くてもモデルが正しいとは限りません

が高くなる罠:
説明変数を増やせば は自動的に上がる(無関係な変数を追加してもは下がらない)
時系列データでは、共通のトレンド(時間とともに増加)があるだけで が 0.9 を超える
サンプルサイズが小さいとが過大評価される

代替指標: 調整済み (変数の数でペナルティ)AICBICモデル選択基準)を併用してください。予測力の真の評価には交差検証(cross-validation)テストデータ を見ること。
❌ 「ステップワイズで選んだ変数は重要」ではない
ステップワイズ法(バックワード・フォワード選択)は便利ですが、p値ベースの変数選択は再現性に問題があると批判されています。

問題点:
同じデータでも実行順序によって最終モデルが変わる
p値を繰り返し見ることで「偶然に有意な変数」を拾ってしまう(p-hacking
係数標準誤差が過小評価され、信頼区間が嘘っぽくなる

より良い方法:
事前に変数を理論で絞る(先行研究から候補を選ぶ)
LASSO回帰(自動かつ統計的に正当化された変数選択)を使う
交差検証AIC/BIC 最小モデルを選ぶ
❌ 「線形回帰なら線形関係を前提にすべき」
重回帰分析線形関係を前提とします。実際の関係が非線形なのに線形モデルで分析すると、本当の関係を見逃します

非線形の例:
U字型関係: 失業率と物価上昇率(フィリップス曲線)
逓減効果: 所得と幸福度(年収 800万円までは強い正の効果、それ以上は飽和)
閾値効果: 高齢化率と医療費(ある水準を超えると急激に上がる)

診断と対処:
残差プロット残差が0周辺に均等に分布しているか確認
変数の対数変換・二乗項追加で非線形性を取り込む
・どうしても線形では捉えられないなら、機械学習RF・GBM)を併用する
❌ 「データに当てはまった=予測に使える」ではない
「過去のデータでフィットしたから将来も予測できる」と思うのは危険です。

過学習(overfitting)の例: 47都道府県のデータに10個の説明変数を投入すれば、ほぼ完璧にフィットします(自由度がほぼゼロ)。でもそのモデルを新しい年度に適用すると、予測精度はほぼランダム並みに落ちることがあります。

正しい予測力の評価:
・データを訓練用 70%テスト用 30%に分割し、テスト用での予測精度を見る
k分割交差検証(k-fold CV)で予測の安定性を確認
・「説明変数の数 ≪ サンプルサイズ」のバランスを意識(目安:n > 10 × 変数数)

📖 用語集(この記事に出てくる統計用語)

統計の基本用語を初心者向けに解説します。本文中で見慣れない言葉が出てきたら、ここに戻って確認してください。

p値
「効果がない」と仮定したときに、観察されたデータ(またはより極端なデータ)が得られる確率。0〜1の値で、慣例的に 0.05(5%)未満を「有意」と判断する。
有意水準
「偶然」と「意味のある違い」を分ける基準。通常 α=0.05(5%)を使う。p値 < α なら「有意」と判定。
信頼区間
「真の値はこの範囲にあるだろう」という幅。95%信頼区間 = 同じ実験を100回繰り返したら95回はこの範囲に真の値が入る。
サンプルサイズ
分析に使ったデータ点の数(n)。一般にnが大きいほど推定が安定し、わずかな差も検出できるようになる。
標準誤差
推定値(係数など)のばらつきの目安。標準誤差が小さいほど推定値が安定している。
正規分布
釣鐘型の左右対称な分布。多くのパラメトリック検定(t検定F検定など)は「データが正規分布に従う」ことを仮定する。
因果相関
相関がある」と「原因と結果の関係(因果)」は別物。アイスクリームの売上と水難事故は相関するが、原因は両者とも「夏の暑さ」。
外れ値
他のデータから極端に離れた値。分析結果を歪める原因になるため、検出して除外するか別途扱う必要がある。
欠損値
データが取得できなかった部分(NaN・空白)。除外するか補完(平均代入・回帰代入など)するかが分析上の重要な判断点。
VIF
Variance Inflation Factor分散拡大係数)。多重共線性の強さを示す指標。VIF > 10 で「強い多重共線性あり」と判断。
交絡変数
「真の原因」と「結果」の両方に影響する第三の変数。これを統制しないと、見かけ上の関係を真の因果と誤認する。
係数回帰係数
説明変数 x が1単位増えたとき、目的変数 y が平均でどれだけ変化するか」を示す数値。正の値は正の影響、負の値は負の影響。
内生性
説明変数と誤差項が相関している状態。逆因果交絡変数の存在で発生する。これを放置すると係数推定にバイアスが生じる。
多重共線性
説明変数同士の相関が強すぎる状態。係数推定が不安定になり、解釈を誤る原因になる。VIF > 10 が警告サイン。
標準化係数
変数の単位の影響を取り除いた係数。複数の変数の影響の大きさを単位に依存せず比較するために使う。
決定係数 R²
回帰モデル目的変数のばらつきの何%を説明できるかを示す指標。0〜1の値で、1に近いほどモデルの説明力が高い。

📐 使っている手法をわかりやすく解説

統計手法について「何のためか」「結果をどう読むか」を初心者向けに解説します。

◆ 統計の基本概念(どの論文にも共通)

🔍 p値有意確率)とは
何?
「もし本当に効果がなかったとしたら、今回の結果(またはもっと極端な結果)が偶然起きる確率」のこと。
なぜ必要?
帰無仮説(「効果なし」の仮定)のもとで検定統計量の分布から計算する。
何がわかる?
「この関係は偶然ではなく、統計的に意味がある」と主張するための客観的な根拠になる。
読み方
p < 0.05(5%未満)を「統計的に有意」と判断するのが慣例。ただし「p値が小さい=効果が大きい」ではない。効果量係数の大きさ)とセットで判断する。
🗂️ ノンパラメトリック検定とは(なぜ使うのか)
何?
「データが正規分布に従う」という仮定を置かない検定手法の総称。Kruskal-Wallis検定・Mann-Whitney U検定などが代表例。
なぜ必要?
データの値ではなく「順位」に変換して検定統計量を計算する。外れ値や偏った分布に対しても安定して機能する。
何がわかる?
サンプルサイズが小さい・データが歪んでいる・外れ値がある場合でも、グループ差の有無を検定できる。
読み方
「なぜノンパラメトリックを選ぶのか」の理由を示すには、正規性検定(Shapiro-Wilk)の結果を添えるのが望ましい。結果の解釈は対応するパラメトリック検定と同様(p < 0.05 で有意差あり)。

◆ この論文で使われている手法

📈 重回帰分析
何?
複数の説明変数(原因候補)が1つの目的変数(結果)にどれだけ影響するかを同時に推定する手法。
どう使う?
目的変数 y を複数の説明変数 x₁, x₂, … で予測する式(y = a₁x₁ + a₂x₂ + … + b)を最小二乗法でフィットさせる。
何がわかる?
複数の要因が混在するなかで「どれが一番効いているか」を一度に検証できる。交絡変数を統制できる。
結果の読み方
係数(a₁, a₂…)のプラスは正の影響、マイナスは負の影響。p < 0.05 で統計的に有意。が1に近いほどモデルの説明力が高い。
⚠️ 注意点
(1) 多重共線性を必ずVIFで確認(VIF>10で警告)。(2) 線形性の仮定—関係が曲線なら対数変換や二乗項を追加。(3) 残差プロット正規性・等分散性を確認。(4) サンプル数は最低でも「説明変数数×10」が目安。(5) 外れ値1つ係数が大きく変わるのでCook距離で確認。
🔗 相関分析
何?
2つの変数の「一緒に増減する傾向の強さと向き」を −1〜+1 の相関係数 r で数値化する手法。
どう使う?
散布図を描き、Pearson(連続データ)または Spearman(順序データ・外れ値に強い)の相関係数を計算する。
何がわかる?
「気温が高い県ほど熱中症指標が高い」などの傾向を素早く確認できる。変数選択の第一歩として使われることも多い。
結果の読み方
r > +0.7 は強い正の相関、r < −0.7 は強い負の相関、|r| < 0.3 はほぼ無相関相関因果関係を示すものではない点に注意。
⚠️ 注意点
(1) 多重共線性を必ずVIFで確認(VIF>10で警告)。(2) 線形性の仮定—関係が曲線なら対数変換や二乗項を追加。(3) 残差プロット正規性・等分散性を確認。(4) サンプル数は最低でも「説明変数数×10」が目安。(5) 外れ値1つ係数が大きく変わるのでCook距離で確認。
🏛️ パネルデータ固定効果モデルFE
何?
複数の個体(都道府県など)を複数時点で観測したパネルデータから、個体固有の見えない差を取り除いて時間変化の効果を推定する手法。
どう使う?
各個体の平均を引く「within 変換」で、観察できない固有特性(北海道は寒いなど)を自動的に統制する。
何がわかる?
「東京だから人口が多い」ではなく「この政策が人口を増やした」という効果を分離して推定できる。
結果の読み方
係数の解釈は通常の回帰と同じ。Hausman 検定で固定効果モデルの妥当性を確認する。
⚠️ 注意点
(1) 多重共線性を必ずVIFで確認(VIF>10で警告)。(2) 線形性の仮定—関係が曲線なら対数変換や二乗項を追加。(3) 残差プロット正規性・等分散性を確認。(4) サンプル数は最低でも「説明変数数×10」が目安。(5) 外れ値1つ係数が大きく変わるのでCook距離で確認。
⚖️ Hausman検定
何?
パネルデータ分析で「固定効果FE)」と「変量効果(RE)」のどちらを使うべきかを統計的に判断する検定。
どう使う?
両モデルの係数が大きく異なれば RE に不整合あり → FE を採用。
何がわかる?
パネル分析のモデル選択を客観的な基準で決定できる。
結果の読み方
p < 0.05 → 固定効果モデルを採用。p ≥ 0.05 → 変量効果モデルも選択肢。
⚠️ 注意点
(1) 多重共線性を必ずVIFで確認(VIF>10で警告)。(2) 線形性の仮定—関係が曲線なら対数変換や二乗項を追加。(3) 残差プロット正規性・等分散性を確認。(4) サンプル数は最低でも「説明変数数×10」が目安。(5) 外れ値1つ係数が大きく変わるのでCook距離で確認。
🌿 Ward法クラスタリング
何?
データをグループ(クラスター)に自動分類する手法。グループ内のばらつきが最小になるよう統合していく。
どう使う?
統合後の「ばらつき増加」が最小になるペアを繰り返し合体させ、デンドログラム樹形図)で可視化する。
何がわかる?
都道府県を「都市型」「農村型」などのグループに自動分類し、グループ間の特徴比較ができる。
結果の読み方
デンドログラムの切り位置でクラスター数を決める。各クラスターの変数平均を見てグループを命名・解釈する。
⚠️ 注意点
(1) 多重共線性を必ずVIFで確認(VIF>10で警告)。(2) 線形性の仮定—関係が曲線なら対数変換や二乗項を追加。(3) 残差プロット正規性・等分散性を確認。(4) サンプル数は最低でも「説明変数数×10」が目安。(5) 外れ値1つ係数が大きく変わるのでCook距離で確認。
📅 時系列分析
何?
時間順に並んだデータのトレンドや周期性、変化点を分析する手法群の総称。
どう使う?
折れ線グラフでトレンドを視覚化し、移動平均指数平滑・AR/MA モデルを適用する。
何がわかる?
「出生率がいつから下がり始めたか」「コロナ前後で変化したか」などの変化を客観的に捉えられる。
結果の読み方
傾きが正なら上昇トレンド、負なら下降トレンド。変化点の前後で傾きが変わる場合は構造変化として解釈する。
⚠️ 注意点
(1) 多重共線性を必ずVIFで確認(VIF>10で警告)。(2) 線形性の仮定—関係が曲線なら対数変換や二乗項を追加。(3) 残差プロット正規性・等分散性を確認。(4) サンプル数は最低でも「説明変数数×10」が目安。(5) 外れ値1つ係数が大きく変わるのでCook距離で確認。
🔄 差分の差分法(DiD)
何?
政策効果の「因果的推定」手法。処置群対照群、政策前後の2種類の差を組み合わせる。
どう使う?
処置群の変化)−(対照群の変化)で、政策なしでも起きていた変化を差し引く。
何がわかる?
「地方創生政策がなければどうなっていたか」を推測し、政策の純粋な効果を数値化できる。
結果の読み方
DiD推定値がプラスで有意なら政策は目的変数を増加させた。「平行トレンド仮定」(政策前は両群が同トレンド)の確認が重要。
⚠️ 注意点
(1) 多重共線性を必ずVIFで確認(VIF>10で警告)。(2) 線形性の仮定—関係が曲線なら対数変換や二乗項を追加。(3) 残差プロット正規性・等分散性を確認。(4) サンプル数は最低でも「説明変数数×10」が目安。(5) 外れ値1つ係数が大きく変わるのでCook距離で確認。
🎯 操作変数法IV
何?
逆因果交絡因子の問題を克服して因果関係を推定する手法。条件を満たす別の変数(操作変数)を経由して推定する。
どう使う?
操作変数は「目的変数には直接影響せず、説明変数にのみ影響する」という条件が必要。二段階最小二乗法(2SLS)で推定する。
何がわかる?
「医師が多い → 医療費が高い」vs「医療費が高い地域 → 医師が集まる」という因果の向きを区別できる。
結果の読み方
操作変数の妥当性(弱い操作変数でないか)確認が重要。係数解釈は通常の回帰と同様。
⚠️ 注意点
(1) 多重共線性を必ずVIFで確認(VIF>10で警告)。(2) 線形性の仮定—関係が曲線なら対数変換や二乗項を追加。(3) 残差プロット正規性・等分散性を確認。(4) サンプル数は最低でも「説明変数数×10」が目安。(5) 外れ値1つ係数が大きく変わるのでCook距離で確認。
↔️ VAR(ベクトル自己回帰)/ Granger因果検定
何?
複数の時系列変数が互いに影響し合う関係を分析する手法(VAR)と、「AがBの予測に役立つか」を検定する手法(Granger因果)。
どう使う?
VARは全変数を互いに説明変数として同時回帰Granger因果F検定でAのラグ変数がBの予測精度を向上させるかを確認する。
何がわかる?
「女性就業率と出生率はどちらが先に動くか」「リード・ラグ関係」を特定できる。
結果の読み方
Granger因果 p < 0.05 → 「Aの過去値はBの予測に役立つ」(ただし真の因果とは限らない)。
⚠️ 注意点
(1) 多重共線性を必ずVIFで確認(VIF>10で警告)。(2) 線形性の仮定—関係が曲線なら対数変換や二乗項を追加。(3) 残差プロット正規性・等分散性を確認。(4) サンプル数は最低でも「説明変数数×10」が目安。(5) 外れ値1つ係数が大きく変わるのでCook距離で確認。

🚀 発展の可能性(結果 X → 新仮説 Y → 課題 Z)

この研究をさらに発展させるための3つの方向性を示します。「今回わかったこと(X)」から「次に検証すべき仮説(Y)」を立て、「具体的に何をするか(Z)」まで考えてみましょう。

① データ・時間的拡張
結果 X
本論文は特定の年度・地域の断面データ(または限られた時系列)で分析を行った。
新仮説 Y
より新しい年度のデータや市区町村レベルの細粒度データを使えば、知見の時間的頑健性や地域内格差を検証できる。
課題 Z
(1)統計センターから最新の SSDSE をダウンロードし、同じ分析を再実行する。(2)結果が変わった場合、その要因(コロナ・政策変化など)を考察する。(3)市区町村データ(SSDSE-A/C/F)で分析単位を細かくした場合の結果と比較する。
② 手法の発展:重回帰分析 の次のステップ
結果 X
本論文は 重回帰分析 を用いた推定を行った。
新仮説 Y
パネルデータ固定効果モデルFE)による都道府県固有の差の統制 により、本分析では統制できていない問題を解消できる可能性がある。
課題 Z
(1)パネルデータ固定効果モデルFE)による都道府県固有の差の統制 を実装し、本論文の係数推定と比較する。(2)操作変数法IV)による内生性の解消 も試し、結果の頑健性を確認する。(3)推定結果の変化から、元の分析の仮定のどれが重要だったかを考察する。
③ 政策提言・実践への応用
結果 X
本論文は分析結果から特定の変数が目的変数に影響することを示した。
新仮説 Y
分析対象を日本全国から特定地域に絞ること、または逆に国際比較に拡張することで、政策の移転可能性と文脈依存性を検証できる。
課題 Z
(1)有意な変数を「政策で変えられるもの」と「変えにくいもの」に分類する。(2)政策で変えられる変数について、係数の大きさから「どれだけ変えればどれだけ効果があるか」を試算する。(3)自治体・政策立案者への提言として、実現可能なアクションプランを1枚にまとめる。

🎯 自分でやってみよう(5つのチャレンジ)

学んだだけでは身につきません。実際に手を動かすのが最強の学習方法です。本論文のスクリプトをベースに、以下のチャレンジに挑戦してみてください。難易度別に5つ用意しました。

★☆☆☆☆ 入門
CH1. 同じデータで分析を再現する
まずは付属の Python スクリプトをそのまま実行し、論文と同じ図を再現してみてください。
ポイント: 各図がどのコード行から生成されているか辿る。エラーが出たら原因を考える。
★★☆☆☆ 初級
CH2. 説明変数を1つ追加・除外して結果を比較
本論文の分析モデルから説明変数を1つ抜いて再実行、あるいは1つ追加して再実行してください。
ポイント: 係数p値 がどう変わったか観察する。多重共線性が原因で結果が変わる例を見つけられたら理想的。
★★★☆☆ 中級
CH3. 別の年度・別の都道府県で同じ分析を試す
SSDSE の別の年度(例:2015年度・2020年度)または特定都道府県のみのデータで同じ分析を実行してください。
ポイント: 時代や地域によって結論が変わるか? 変わるならその理由を考察する。
★★★★☆ 上級
CH4. 別の手法を組み合わせる
本論文の手法 + 1つの追加手法(例:重回帰 + LASSO相関分析 + 主成分分析)で結果を比較してください。
ポイント: 手法の違いで結論が変わるか? どちらが妥当かを「なぜ」とともに説明できるように。
★★★★★ 発展
CH5. オリジナルの問いを立てて分析する
本論文の手法を借りて、あなた自身の問いを立てて分析してください。 例:「カフェの数と幸福度に関連はあるか」「教育費の高い県は出生率も高いか」など。
ポイント: 問い・データ・手法・結論を1ページのレポートにまとめる。これがデータサイエンスの「実践」。
💡 ヒント: 詰まったら本サイトの他の論文(同じ手法を使っている)のスクリプトをコピーして組み合わせるのが効率的です。手法ガイド・用語集も参考に。

💼 この手法は実社会でこう使われている

本論文で学んだ手法は、研究の世界だけでなく、行政・企業・NPO の現場でも様々に活用されています。具体的なシーンを紹介します。

🏛️
行政の政策立案
都道府県・市区町村の政策担当者は、本論文と同様のデータ分析を用いて「どこに予算を投じれば効果が出るか」を検討します。 例えば医療費削減策、移住促進策、子育て支援策などの効果予測・効果検証に直結します。
🏢
企業のマーケティング・出店戦略
小売チェーン・サービス業の出店戦略では、地域特性(人口構成、所得、ライフスタイル)と売上の関係を本論文と同じ手法で分析します。 ECサイトでも顧客セグメント分析・購買要因分析に類似手法が使われます。
🏥
医療・公衆衛生
感染症の流行予測、医療資源配分の最適化、健康格差の地域要因分析などで、本論文の統計手法は標準的に使われています。 WHO・厚労省レベルの政策評価でも同じ手法が活躍しています。
📊
メディア・ジャーナリズム
新聞・テレビの社会調査記事、選挙予測、世論調査の分析でも、本論文と同じ手法(回帰分析・クラスタリングなど)が使われています。 データジャーナリズムの記事はこの種の分析が中核です。
🎓
学術研究(隣接分野)
経済学・社会学・公衆衛生学・教育学・地理学などの実証研究では、本論文と同じ手法が日常的に使われます。 専門誌に掲載される論文の8割以上が、こうした統計手法に基づいて結論を出しています。
💰
金融・保険業界
与信判断(融資審査)、保険料の地域別設定、不動産価格予測などで、本論文と同様のモデリング手法が広く活用されています。 統計分析の能力は金融業界の必須スキルになっています。

🤔 よくある質問(読者からの想定Q&A)

この論文を読んで初心者が抱きやすい疑問に、教育的観点から答えます。

Q1. この分析、自分でもできますか?
はい、できます。SSDSE データは無料で公開されており、Python の pandas, scikit-learn, statsmodels を使えば全く同じ手順で再現可能です。本ページ下部のスクリプトを実行するだけで結果が得られます。
Q2. 使われている手法は他の分野にも応用できますか?
十分応用可能です。本論文の[手法]は、医療・教育・経済・環境など他のドメインでも標準的に使われる手法です。データの中身(変数)を入れ替えるだけで、別の問いにも適用できます。
Q3. 結論は本当に「因果関係」を示していますか?
本論文は「観察データ」を使った分析であり、厳密な意味での「因果関係」を完全に証明したわけではありません。あくまで「強い関連が見られた」という事実を提示しているにとどまります。真の因果を示すには、無作為化比較試験(RCT)か、自然実験を活用したIVDiD 等の手法が必要です。
Q4. データの最新版を使うとどうなりますか?
SSDSE は毎年更新されているため、最新版を使えば近年のトレンド(特にコロナ禍以降の変化)も含めて分析できます。ただし、結論が変わる可能性もあります。それ自体が新しい発見につながります。
Q5. もっと深く学ぶには何を読めばいいですか?
「計量経済学」「データサイエンス入門」「統計的因果推論」などのテキストが入門に向いています。Python の場合は『Python ではじめる機械学習』(オライリー)、R の場合は『R で学ぶ統計学』が定番です。本サイトの他の論文も読み比べてみてください。