論文一覧に戻る 🕸 論文ネットワーク 🗺 用語ネットワーク 統計データ分析コンペ 教育用再現集
特別賞(統計分析) 2021年度 統計データ分析コンペティション 大学生・一般の部

外国人技能実習生の実習地選択における
就労産業・国籍・都道府県別クラスター効果の導出

⏱️ 推定読了時間: 約25分
2021年度(令和3年度)統計データ分析コンペティション | 後藤 龍星(慶應義塾大学法学部政治学科) | 47都道府県×2016〜2019年(N=188)/再現はSSDSE-B | 二方向固定効果モデル・パネルデータ分析
🔬 2次回帰🔬 パネルデータ分析🔬 パネル分析🔬 二方向固定効果🏷 外国人・国際🏷 労働・雇用
🔬 手法タグ / 🏷 応用タグ(クリックで同タグの論文をネットワーク検索)
🔬 再現カルテ — 原論文と同じデータ・同じ手法で再現

この教材は原論文と同じデータを読み込み、同じ手順で計算し直しています。画面に出る数値と図は、あなたのブラウザがその場で計算した結果です。

原論文が使ったデータ教育用標準データセット・人口推計・建築着工統計調査・都道府県地価調査・労働市場年報・「外国人雇用状況」の届出状況表一覧・工業統計調査・在留外国人統計
分析単位:都道府県
中核手法:パネルデータ分析・固定効果モデル・二方向固定効果モデル
この教材が使うデータ
原論文(PDF)外国人技能実習生の実習地選択における就労産業、国籍、都道府県別クラスター効果の導出
特別賞/後藤 龍星(慶應義塾大学法学部政治学科)
✅ この教材でできること
  • 原論文の中核手法(パネルデータ分析)を実データで実行できる
  • 分析に使うデータは同梱済みで、ブラウザ上でそのまま読み込める
  • 数値・図を最後まで再計算できる(パネルデータ分析)
突合監査の結果、主要データと中核手法はいずれも原論文と一致しています。

▶ ここに書いてある分析は、ページ下部の「🐍 ブラウザで動かす」でそのまま実行できます(インストール不要)。動かしているのは code/2021_U5_1_shorei.py(391 行)そのものです。

🏅 論文審査会コメント(審査員はここを評価した)
「注目されにくい研究テーマについて先行研究を十分抑え、クラスター効果の交絡要因の影響除去など適切な分析を行っている。固定効果モデルを中心とした実証技術の独創性は希薄であるが、教科書的な丁寧な計量実証分析を行っていて手堅い実証能力や考察能力は評価できる。」
出典:統計センター「統計データ分析コンペティション」受賞論文PDF掲載の審査講評。プロの審査員が何を評価し、何を注文したかは論文の読み方の最良の手本になる。
📝 3行で分かる要約

目次

  1. 研究のテーマと目的
  2. 使用データと変数(表1・表2)
  3. 分析方法:二方向固定効果モデル・逆U字・交差項
  4. 図3:表4 パネル回帰係数(報告値の可視化)
  5. 図1:表5 年度ごとの時間効果(報告値の可視化)
  6. 図2:表7 標準化個体効果ランキング(報告値の可視化)
  7. 再現コード:統制変数をSSDSE-Bで再現(実計算)
  8. 結果の解釈(原論文 5章)
  9. まとめ
  10. データ・コードのDL
  11. ⚠️ よくある誤解
  12. 📖 用語集
  13. 📐 手法ガイド
  14. 🚀 発展の可能性
  15. 🎯 自分でやってみよう
  16. 🤔 Q&A
  17. 🐍 ブラウザで動かす

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

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

このページの図のうち、統制変数の再現検証(図4)だけが実データからの再計算です。コードの編集は不要です。(回帰係数=図3、時間効果=図1、個体効果=図2は、技能実習生数・就労産業/国籍クラスター・製造業事業所数などSSDSE-Bに無いデータに基づくため、原論文の報告値を可視化します。)

1
データをダウンロードする 独立行政法人統計センターの SSDSE(教育用標準データセット)配布ページから、以下をダウンロードします。
SSDSE-B-2026.csv ← SSDSE-B(都道府県別・基礎データ、社会・人口統計体系)📥 直接DL
⬇ SSDSEダウンロードページを開く
2
ファイルを所定のフォルダに配置する ダウンロードしたCSVを、プロジェクトの data/raw/ フォルダに入れます。
2026 統計・データ解析コンペ/ ├── code/ │ └── 2021_U5_1_shorei.py ← 実行するスクリプト └── data/ └── raw/ SSDSE-B-2026.csv ← ここに置く
3
スクリプトをそのまま実行する ターミナルでプロジェクトルートに移動し、以下を実行します。
python3 code/2021_U5_1_shorei.py
図は html/figures/ に自動保存されます。
研究のテーマと目的

少子高齢化を背景に、日本の外国人労働者数は2013年以降増加を続けている。とりわけ技能実習生を巡っては、労働環境や斡旋業者を巡る問題が多く、厚生労働省の調査では監督指導を行った実習実施機関の約7割で労働基準関係法令違反が認められたと報告されている。

著者が注目したのは、外国人労働者の増加がクラスター化しているのではないか、という点である。技能実習生は渡航前に自国で勤務先を決める制度になっており、日本にいる同胞・同業者やインターネットの情報を頼りに、同じ国籍・同じ業種のコミュニティに入りやすい実習地を選ぶ傾向が強いと考えられる。ならば「どの地域で、どの職種を望む、どの国からの実習生が増えるか」を事前にモデル化できれば、労働力の過不足や行政の非効率が緩和されるはずだ——ここに研究の意義がある。

N=188
47都道府県 × 2016〜2019年のパネル観測数
−0.0433***
住宅地価格の係数(報告値・有意に負)
逆U字
就労産業クラスターと技能実習生割合の関係(報告値)
0.98
自由度調整済み決定係数(報告値・0.98284)
研究の問い 技能実習生が職種や勤労地を選ぶとき、各地域における産業や国籍のバイアス(クラスター効果)がどう作用しているのか。またそれをパネルデータ分析で導出し、都道府県ごとの「魅力度」や年度ごとの増減という観察されない異質性を識別する。
「クラスター効果」とは(この論文での定義) 本論文の「クラスター」は k-means のような機械的クラスタリングではなく、各都道府県の産業構成・国籍構成が全国平均からどれだけ偏っているか変動係数で測った指標である。偏りが大きいほど、その産業・国籍が局所的に集積(クラスター化)していると解釈する。

大学生・一般の部 SSDSE・e-Stat(人口推計・地価調査・労働市場年報・工業統計・在留外国人統計) 二方向固定効果モデル 2次関数近似(逆U字) 交差項・変動係数・標準化

使用データと変数(表1・表2)

著者は教育用標準データセット(SSDSE)と政府統計サイト e-Stat で入手できる都道府県別データを加工し、分析用の変数を用意した。従属変数は「労働人口に占める外国人技能実習生の割合(%)」で、独立変数はクラスター指標(x1・x2)と統制変数(x3〜x6)+交差項からなる。

表1 使用データと出典(原論文)

記号項目出典
a,b総人口・15〜64歳人口総務省統計局「人口推計」
c着工建築物床面積国土交通省「建築着工統計調査」
d標準価格(平均価格・住宅地)国土交通省「都道府県地価調査」
e,f月間有効求職者数・求人数(一般)厚生労働省「労働市場年報」
g,h在留資格別(技能実習生)・産業別 外国人労働者数厚生労働省「外国人雇用状況の届出状況」
i製造業事業所数(従業者4人以上)経済産業省「工業統計調査」
j国籍・地域別 在留外国人 構成比法務省出入国在留管理庁「在留外国人統計」

表2 変数の定義と記述統計(原論文・N=188)

変数定義平均標準偏差
y 技能実習生割合(%)技能実習生数 ÷ 15〜64歳人口 ×1000.46020.2517
x1 就労産業クラスター上位7産業割合の全国平均からの偏り(変動係数の加重平均)0.42080.1374
x2 国籍クラスター上位5か国割合の全国平均からの偏り(同上)0.17840.0629
x3 有効求人倍率有効求人数 ÷ 有効求職者数1.39550.2578
x4 製造業事業所数/万人製造業事業所数 ÷ 総人口 ×1万16.61965.2983
x5 着工床面積/万人着工建築物床面積 ÷ 総人口1.03620.1594
x6 住宅地価格(万円/m²)標準価格(住宅地) ÷ 1万5.08885.6117

x1 の7産業は「建設業・製造業・情報通信業・卸売小売業・宿泊飲食業・教育学習支援業・サービス業」、x2 の上位5か国は「ベトナム・中国・フィリピン・インドネシア・タイ」(技能実習生の約95%)。x3〜x6 は見かけ上の相関(交絡)を統制するために投入された。

再現可能性の整理(このページの図の作り方)
  • 報告値の可視化(再計算ではない):回帰係数(図3=表4)・時間効果(図1=表5)・個体効果ランキング(図2=表7)は、従属変数(技能実習生数)・就労産業クラスター(x1)・国籍クラスター(x2)・製造業事業所数(x4)がSSDSE-Bに無いため、原論文の報告値を転記して可視化する。新しい数値の再計算ではない。
  • 実再現できる部分:統制変数のうち x3 有効求人倍率・x5 着工床面積・x6 住宅地価格はSSDSE-Bに収録がある。よって表2の記述統計を実データから再計算して照合できる(図4)。技能実習生の実習地選択そのものではなく、データ系列の妥当性チェックである。

分析方法:二方向固定効果モデル・逆U字・交差項

分析の流れ
47都道府県×4年
のパネル(N=188)
クラスター指標
変動係数で作成
二方向固定効果
都道府県+年度
係数・個体効果
の解釈

① 二方向固定効果モデル

各都道府県には数値化しにくい「魅力度」など観察されない異質性がある。これが独立変数と相関すると最小二乗法の推定にバイアスが生じる。そこで固定効果モデルを用い、個体(都道府県)と時間(年度)の両方の水準差を除く二方向固定効果で推定する。都道府県ダミーの係数 αi は「技能実習生にとっての各県の魅力度」、年度ダミーの係数は「年ごとの受入増減」を表す指標になる。

② 就労産業クラスターは2次関数で近似(逆U字の想定)

著者は、産業の偏りが大きい地方部でも、偏りの小さい大都市でも技能実習生割合が高まり、U字型の2次相関が生じると仮説を立てた。そこで x1 の1次項と2乗項を同時に投入した(結果は仮説と逆符号の逆U字だった、後述)。

③ 交差項で多重共線性に配慮

有効求人倍率(x3)と製造業事業所数(x4)の相関は r=0.469 とやや高い。「後継者不足の中小製造業が多い地域ほど求人倍率が高い」という条件付き効果を統制するため、多重共線性への配慮も兼ねて交差項 x3×x4 を投入した。

推定式(原論文) y = β0 + β1·x1² + β2·x1 + β3·x2 + β4·x3 + β5·x4 + β6·x5 + β7·x6 + β8·(x3·x4) + uit。有意性は95%水準で判断する。
3
図3:表4 パネル回帰係数(報告値の可視化)

まず分析の中心である表4の回帰結果を見る。ここは原論文の報告値をそのまま図にする(再計算ではない)。

やってみよう原論文 表4 の回帰係数を転記し、係数フォレストと x1 の逆U字を描く【報告値の可視化】
  • ① このコードの目的:原論文 表4(パネル固定効果モデルの回帰係数・標準誤差・有意記号)を配列に転記する。SSDSE-Bに従属変数もクラスター指標も無いため再計算はできず、報告値をそのまま可視化する。
  • ② 前後のつながり:この係数からフォレストプロット(図3左)と、x1の逆U字(+2.299·x1 − 2.495·x1²)の部分効果曲線(図3右)を描く。
📝 コード
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
TABLE4 = [
    # (表示名, 係数, 標準誤差, 有意記号)
    ('x1 就労産業クラスター',          2.299,  0.8178, '**'),
    ('x1^2 就労産業クラスター(2乗)',  -2.495,  0.9774, '*'),
    ('x2 国籍クラスター',              0.3785, 0.1587, '*'),
    ('x3 有効求人倍率',              -0.2047, 0.1625, ''),
    ('x4 製造業事業所数/万人',        -0.1001, 0.0172, '***'),
    ('x5 着工床面積/万人',           -0.0187, 0.0582, ''),
    ('x6 住宅地価格',               -0.0433, 0.0071, '***'),
    ('x3×x4 交差項',                 0.0103, 0.0068, ''),
]
N_OBS, ADJ_R2 = 188, 0.98284
print(f"  {'独立変数':<26}{'係数':>10}{'標準誤差':>10}{'有意':>6}")
print("  " + "-" * 52)
for name, b, se, sig in TABLE4:
    print(f"  {name:<26}{b:>10.4f}{se:>10.4f}{sig:>6}")
print("  " + "-" * 52)
print(f"  サンプルサイズ N = {N_OBS} / 自由度調整済み決定係数 = {ADJ_R2}")
▼ 実行結果
=== [2] 【報告値の可視化】表4 パネルデータ分析の結果(原論文より転記)
====================================================================
  独立変数                              係数      標準誤差    有意
  ----------------------------------------------------
  x1 就労産業クラスター                  2.2990    0.8178    **
  x1^2 就労産業クラスター(2乗)           -2.4950    0.9774     *
  x2 国籍クラスター                    0.3785    0.1587     *
  x3 有効求人倍率                    -0.2047    0.1625      
  x4 製造業事業所数/万人                -0.1001    0.0172   ***
  x5 着工床面積/万人                  -0.0187    0.0582      
  x6 住宅地価格                     -0.0433    0.0071   ***
  x3×x4 交差項                     0.0103    0.0068      
  ----------------------------------------------------
  サンプルサイズ N = 188 / 自由度調整済み決定係数 = 0.98284
  有意水準  ***: p<.001  **: p<.01  *: p<.05  .: p<.10
  読み: x1は係数+2.299(**)・2乗項-2.495(*)で【逆U字】。x2国籍は+0.3785(*)で正。
        x4製造業事業所数(-0.1001,***)とx6住宅地価格(-0.0433,***)は有意に負。
        x3有効求人倍率・x5着工床面積・x3×x4交差項は有意でない。※すべて報告値。

====================================================================
  • ④ 実行結果の読み取り:有意(p<.05)なのは x1(+2.299**)・x1²(−2.495*)・x2国籍(+0.3785*)・x4製造業事業所数(−0.1001***)・x6住宅地価格(−0.0433***)。x1は1次が正・2乗が負なので逆U字。x3有効求人倍率・x5着工床面積・交差項は非有意。自由度調整済み決定係数は0.98284と非常に高い(報告値)。
表4 パネル回帰係数フォレストとx1逆U字(報告値の可視化)
図3:(左)表4の回帰係数フォレスト(誤差棒は±1.96×標準誤差)、(右)就労産業クラスター x1 の逆U字(部分効果 +2.299·x1 − 2.495·x1²)。報告値の可視化(再計算ではない)。赤=有意、灰=非有意。
📊 この図の読み方
左・赤い棒
有意な変数。x4 製造業事業所数と x6 住宅地価格は、x2 国籍クラスターは。x1 は1次が正・2乗が負。
右・逆U字
就労産業の偏りが中間の県で技能実習生割合が最も高く、偏りが極端に大きい/小さい県では低い。頂点は x1≈0.46 付近(観測平均0.42に近い)。
位置づけ
報告値の可視化。係数・符号・桁は原論文 表4 のとおりで、本ページで新たに計算したものではない。
4
図1:表5 年度ごとの時間効果(報告値の可視化)
やってみよう原論文 表5 の年度ごとの時間効果を転記して折れ線にする【報告値の可視化】
  • ① このコードの目的:原論文 表5(2016年を基準=0 とした年度固定効果と標準誤差)を転記する。年度ダミーの係数は「その年の技能実習生受入の底上げ」を表す。
  • ② 前後のつながり:この4点を折れ線(図1)にして、時間効果が年々強まっているかを見る。
📝 コード
177
178
179
180
181
182
183
184
185
186
187
# 原論文 表5(2016年を基準=0 とした年度固定効果)
YEARS      = [2016, 2017, 2018, 2019]
TIME_COEF  = [0.0000, 0.0667, 0.1287, 0.2254]
TIME_SE    = [None,   0.0197, 0.0334, 0.0345]
TIME_SIG   = ['***',  '**',   '***',  '***']
print(f"  {'年度':<8}{'時間効果係数':>12}{'標準誤差':>10}{'有意':>6}")
print("  " + "-" * 36)
for y, c, se, sig in zip(YEARS, TIME_COEF, TIME_SE, TIME_SIG):
    se_s = '―' if se is None else f'{se:.4f}'
    print(f"  {y:<8}{c:>12.4f}{se_s:>10}{sig:>6}")
print("  " + "-" * 36)
▼ 実行結果
=== [3] 【報告値の可視化】表5 年度ごとの時間効果(原論文より転記)
====================================================================
  年度            時間効果係数      標準誤差    有意
  ------------------------------------
  2016          0.0000         ―   ***
  2017          0.0667    0.0197    **
  2018          0.1287    0.0334   ***
  2019          0.2254    0.0345   ***
  ------------------------------------
  読み: 2016→2019 で時間効果は単調に増加(0→0.0667→0.1287→0.2254)。
        技能実習生受入が年々強まったことを示す。※報告値。

====================================================================
  • ④ 実行結果の読み取り:2016→2019で 0 → 0.0667 → 0.1287 → 0.2254 と単調に増加し、2019年は***(p<.001)。政府が技能実習制度に注力し、受入が年々強まったことを示す(報告値)。
表5 年度ごとの時間効果(報告値の可視化)
図1:年度固定効果(2016年=0)。誤差棒は±1.96×標準誤差。報告値の可視化(再計算ではない)(原論文 表5)。
5
図2:表7 標準化個体効果ランキング(報告値の可視化)

都道府県ダミーの係数 αi は「技能実習生にとっての各県の魅力度」を表す。地図の代わりに標準化個体効果のランキングで、正の効果がどこに集まるかを可視化する。

やってみよう原論文 表6 の個体効果 αi を転記し、表7 の標準化を再現してランキングする【報告値の可視化】
  • ① このコードの目的:原論文 表6 の生の個体効果 αi(全47都道府県、愛知は基準県で0)を転記し、原論文が表7で用いた標準化定数(平均−0.916・標準偏差0.526)で標準化して並べる。個々の標準化値は表7の記載値を正しく再現する=報告値の転記であり、新しい推定ではない。
  • ② 前後のつながり:この標準化個体効果を横棒ランキング(図2)にして、どの都道府県に正の効果が集中するかを見る。
📝 コード
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
# 原論文 表6 の生の個体効果 αi(PDFから全47都道府県を転記)。愛知は基準県で αi=0。
ALPHA = {
    '北海道':-1.676,'青森':-1.728,'岩手':-0.9746,'宮城':-1.463,'秋田':-1.176,'山形':-0.5994,
    '福島':-0.8719,'茨城':-0.6030,'栃木':-0.4443,'群馬':-0.1008,'埼玉':-0.8639,'千葉':-1.442,
    '東京':-0.5908,'神奈川':-1.043,'新潟':-0.5530,'富山':0.2044,'石川':0.0059,'福井':0.3584,
    '山梨':-0.7100,'長野':-0.2901,'岐阜':0.5550,'静岡':-0.0541,'愛知':0.0000,'三重':-0.3649,
    '滋賀':-0.6049,'京都':-0.7951,'大阪':-0.1931,'兵庫':-0.9517,'奈良':-1.280,'和歌山':-1.033,
    '鳥取':-1.128,'島根':-0.9412,'岡山':-0.7145,'広島':-0.3725,'山口':-1.352,'徳島':-0.8800,
    '香川':-0.2273,'愛媛':-0.5517,'高知':-1.064,'福岡':-1.443,'佐賀':-1.061,'長崎':-1.432,
    '熊本':-1.212,'大分':-1.232,'宮崎':-1.337,'鹿児島':-1.402,'沖縄':-1.962,
}
# 原論文 表7 が標準化に用いた定数(平均・標準偏差=報告値)
REP_MEAN, REP_SD = -0.916, 0.526
prefs  = list(ALPHA.keys())
alpha  = np.array([ALPHA[p] for p in prefs])
# 表7 の標準化(原論文の報告パラメータを使用): CV_i = (αi - 平均) / 標準偏差
alpha_std = (alpha - REP_MEAN) / REP_SD
print(f"  標準化定数(報告値): 平均 {REP_MEAN} / 標準偏差 {REP_SD} を使用")
print(f"  (表6 αi 実測の平均 {alpha.mean():.3f}・SD {alpha.std():.3f} とは僅差だが、")
print(f"    個々の標準化値は表7の記載値を正しく再現する=報告値の転記)")
order = np.argsort(-alpha_std)
print("\n  標準化個体効果(表7の再現)上位10:")
for r in order[:10]:
    print(f"    {r+1:>2}{prefs[r]:<4} 標準化={alpha_std[r]:+.4f}  (生の αi={alpha[r]:+.4f})")
▼ 実行結果
=== [4] 【報告値の可視化】表6→表7 都道府県別の個体効果と標準化
====================================================================
  標準化定数(報告値): 平均 -0.916 / 標準偏差 0.526 を使用
  (表6 αi 実測の平均 -0.800・SD 0.566 とは僅差だが、
    個々の標準化値は表7の記載値を正しく再現する=報告値の転記)

  標準化個体効果(表7の再現)上位10:
    21位  岐阜   標準化=+2.7966  (生の αi=+0.5550)
    18位  福井   標準化=+2.4228  (生の αi=+0.3584)
    16位  富山   標準化=+2.1300  (生の αi=+0.2044)
    17位  石川   標準化=+1.7527  (生の αi=+0.0059)
    23位  愛知   標準化=+1.7414  (生の αi=+0.0000)
    22位  静岡   標準化=+1.6386  (生の αi=-0.0541)
    10位  群馬   標準化=+1.5498  (生の αi=-0.1008)
    27位  大阪   標準化=+1.3743  (生の αi=-0.1931)
    37位  香川   標準化=+1.3093  (生の αi=-0.2273)
    20位  長野   標準化=+1.1899  (生の αi=-0.2901)

  ※原論文本文は上位5位を「岐阜・福井・栃木・愛媛・山形」とし、
    大都市圏の周縁地域に正の効果が集中すると結論(報告値)。
  ※より正確な分析(補足):表7の数値どおりに並べると、愛知(生の個体効果=0の
    基準県)や長野・三重・広島も正の標準化個体効果を示し、栃木・愛媛より上位。
    愛知は基準県ゆえ標準化で見かけ上大きくなる点に注意。原論文の主張自体は
    「大都市の周縁に正の効果」という傾向として妥当。
  • ④ 実行結果の読み取り:標準化の上位には 岐阜・福井・富山・石川(北陸・中京)などが並ぶ。原論文本文は上位5位を「岐阜・福井・栃木・愛媛・山形」とし、大都市圏の周縁地域に正の効果が集中すると結論する。なお表7の数値どおりでは愛知(基準県で生の効果=0)や長野・三重・広島も正で栃木・愛媛より上位——愛知は基準県ゆえ標準化で見かけ上大きくなる点に注意(原論文の傾向的主張自体は妥当)。
表7 標準化した都道府県別の個体効果ランキング(報告値の可視化)
図2:標準化個体効果 CV=(αi−平均)/標準偏差 の都道府県ランキング(N=47)。報告値の可視化(再計算ではない)(原論文 表6→表7)。赤=原論文が挙げた上位5、橙=その他の正、灰=負。
📊 この図の読み方
右(プラス)
技能実習生への正の個体効果。北陸(福井・富山・石川)・中京(岐阜・愛知)・関東外縁・瀬戸内周辺が並ぶ。
左(マイナス)
沖縄・青森・北海道など、三大都市圏から遠い地域で負。
「都会過ぎず田舎過ぎない」
新潟・名古屋・広島のような中規模の工業都市を中心に、同心円状に正の効果が広がる、と著者は解釈した。
6
再現コード:統制変数をSSDSE-Bで再現する(実計算)

ここまでは報告値の可視化だった。最後に、SSDSE-Bで実際に再計算できる統制変数(有効求人倍率・住宅地価格・着工床面積)を計算し、原論文 表2 の記述統計と照合する。これは技能実習生の実習地選択そのものではなく、データの妥当性チェックである。

やってみようSSDSE-Bで統制変数 x3・x5・x6 を再計算し、原論文 表2 の記述統計と照合する【実計算】
  • ① このコードの目的:SSDSE-B-2026 を cp932・header=1 で読み込み、都道府県行(地域コード R+5桁)の2016〜2019年だけ残す(47×4=188で論文のNと一致)。統制変数のうち x3=求人数/求職者数x5=着工床面積/総人口x6=住宅地価格/1万 を計算し、原論文 表2 の平均・標準偏差・最小・最大と一致度を並べる。
  • ② 前後のつながり:技能実習生数やクラスター指標はSSDSE-Bに無いが、統制変数の一部は再現できる。ここでデータ系列が原論文と同じことを確かめ、報告値の信頼性を裏づける。
📝 コード
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
df_raw = pd.read_csv(DATA_B, encoding='cp932', header=1)
# 都道府県行のみ(地域コード = R + 5桁、全国 R00000 を除外)
df = df_raw[df_raw['地域コード'].astype(str).str.match(r'^R\d{5}$', na=False)].copy()
df['年度'] = df['年度'].astype(int)
# 論文の分析期間 2016〜2019 に限定(47都道府県 × 4年 = 188 と一致するはず)
d = df[df['年度'].between(2016, 2019)].copy()

pop   = pd.to_numeric(d['総人口'], errors='coerce')
req   = pd.to_numeric(d['月間有効求人数(一般)'], errors='coerce')
seek  = pd.to_numeric(d['月間有効求職者数(一般)'], errors='coerce')
floor = pd.to_numeric(d['着工建築物床面積'], errors='coerce')
land  = pd.to_numeric(d['標準価格(平均価格)(住宅地)'], errors='coerce')

d['x3_有効求人倍率'] = req / seek                 # = 有効求人数 / 有効求職者数
d['x5_着工床面積対人口'] = floor / pop            # = 着工建築物床面積 / 総人口(m2/人)
d['x6_住宅地価格'] = land / 10000                 # = 標準価格(住宅地)/ 10000(万円/m2)

print(f"  対象: {d['都道府県'].nunique()} 都道府県 × {d['年度'].nunique()} 年度 = {len(d)} 観測(論文 N=188)")
print()
# 原論文 表2 の記述統計(報告値)
REPORTED = {
    'x3_有効求人倍率':   dict(mean=1.3955, sd=0.2578, mn=0.8846, mx=1.9998),
    'x5_着工床面積対人口': dict(mean=1.0362, sd=0.1594, mn=0.6783, mx=1.5569),
    'x6_住宅地価格':     dict(mean=5.0888, sd=5.6117, mn=1.3300, mx=37.4300),
}
LABEL = {'x3_有効求人倍率':'x3 有効求人倍率',
         'x5_着工床面積対人口':'x5 着工床面積/人口',
         'x6_住宅地価格':'x6 住宅地価格(万円/m2)'}
print(f"  {'変数':<20}{'統計量':<6}{'再計算値':>12}{'報告値(表2)':>12}{'一致度':>9}")
print("  " + "-" * 62)
recomp = {}
for col, rep in REPORTED.items():
    s = d[col]
    got = dict(mean=s.mean(), sd=s.std(), mn=s.min(), mx=s.max())
    recomp[col] = got
    for stat, jp in [('mean','平均'), ('sd','標準偏差'), ('mn','最小'), ('mx','最大')]:
        ratio = got[stat] / rep[stat] if rep[stat] else float('nan')
        head = LABEL[col] if stat == 'mean' else ''
        print(f"  {head:<20}{jp:<6}{got[stat]:>12.4f}{rep[stat]:>12.4f}{ratio:>8.1%}")
▼ 実行結果
=== [1] 【実再現】SSDSE-B-2026 による統制変数 x3・x5・x6 の再現
====================================================================
  対象: 47 都道府県 × 4 年度 = 188 観測(論文 N=188)

  変数                  統計量           再計算値     報告値(表2)      一致度
  --------------------------------------------------------------
  x3 有効求人倍率           平均          1.3955      1.3955  100.0%
                      標準偏差        0.2585      0.2578  100.3%
                      最小          0.8846      0.8846  100.0%
                      最大          2.0000      1.9998  100.0%
  --------------------------------------------------------------
  x5 着工床面積/人口         平均          1.0271      1.0362   99.1%
                      標準偏差        0.1613      0.1594  101.2%
                      最小          0.6773      0.6783   99.9%
                      最大          1.5515      1.5569   99.7%
  --------------------------------------------------------------
  x6 住宅地価格(万円/m2)     平均          5.0888      5.0888  100.0%
                      標準偏差        5.6267      5.6117  100.3%
                      最小          1.3300      1.3300  100.0%
                      最大         37.4300     37.4300  100.0%
  --------------------------------------------------------------
  → x3・x6 は平均・最小・最大まで報告値とほぼ完全一致。
    x5 は着工床面積/総人口(m2/人)で約1%差(SSDSE-B改訂による微差)。
    技能実習生数・就労産業/国籍クラスター(x1,x2)・製造業事業所数(x4)は
    SSDSE-B に無いため、以下の表4・5・7は報告値の可視化として扱う。

====================================================================
  • ④ 実行結果の読み取り:観測数は188で論文Nと一致。x3 有効求人倍率は平均1.3955・最小0.8846・最大2.00まで報告値とほぼ完全一致、x6 住宅地価格も平均5.0888・最大37.43まで一致。x5 は約1%差(SSDSE-B改訂による微差)。報告値の可視化とは別に、この3変数は実データで再現できることが確認できた。
SSDSE-Bによる統制変数x3/x5/x6の再現検証(実計算)
図4:(左)報告値(表2)と再計算値の一致(平均・標準偏差・最小・最大を対数軸で。点が対角線=完全一致)、(右)2019年の実データで有効求人倍率×住宅地価格の分布(都道府県ラベル)。実計算:SSDSE-B-2026 から再計算。
📊 この図の読み方
左・対角線
点がすべて y=x 線上=再計算値が報告値と一致。x3・x6 はほぼ完全一致、x5 のみ約1%差。
右・散布
住宅地価格は東京・神奈川で突出。原論文はこの x6 が技能実習生割合と有意に負(生活費を抑えられる地域を選ぶ)と報告した。
位置づけ
実計算。ただし従属変数(技能実習生割合)とクラスター指標は再現対象外で、あくまで統制変数の妥当性確認。

結果の解釈(原論文 5章)

ⅰ)就労産業クラスター x1:逆U字(仮説と逆符号)

仮説はU字だったが、結果は逆U字。産業の偏りが極端に大きい地域と極端に小さい地域では技能実習生割合がむしろ低く、中間層で最も高い。著者は、産業割合の全国平均に外国人労働者全般のデータを使ったため、製造業中心の技能実習生とのズレが生じたと考察。「都会過ぎず田舎過ぎない地域」に集まる傾向の手がかりになったとする。

ⅱ)国籍クラスター x2:正の相関(有意)

仮説通り正で有意(.001<p<.05)。国籍の偏りが大きい地域ほど、同国籍の実習生が帰属意識を抱きやすく、乗数的に増える傾向が認められた。

ⅲ〜ⅵ)統制変数

変数結果(報告値)著者の解釈
x3 有効求人倍率非有意全業種横断の指標で、製造・建設中心の技能実習生割合とは相関しにくい
x4 製造業事業所数/万人負・有意(***)従属変数の分母(労働人口)が大きくなり効果が薄まるトレードオフ
x5 着工床面積/万人非有意建築業への就業は2割程度で、県境をまたぐ性質もあり交絡になりにくい
x6 住宅地価格負・有意(***)生活費を抑えられる地域を選ぶ傾向(初期投資が小さい)

都道府県・年度の効果

年度効果は2016→2019で単調増加(労働市場のグローバル化・制度の後押し)。個体効果は大都市圏の周縁地域(関東外縁・北陸・中京・瀬戸内周辺)に正の効果が集中し、新潟・名古屋・広島といった中規模工業都市を中心に同心円状に波及する、と著者は結論した。

まとめ

本研究は、外国人技能実習生の実習地選択を産業・国籍のクラスター効果という指標に落とし込み、47都道府県×4年のパネルを二方向固定効果モデルで分析した。製造業事業所数と住宅地価格が有意に負国籍クラスターが正就労産業クラスターは逆U字(いずれも報告値)で、技能実習生が「都会過ぎず田舎過ぎない地域」を選ぶ傾向を一定の有意水準で定量化・可視化した。

この研究の限界(原論文) ①産業割合の全国平均に外国人労働者全般のデータを用いたため、技能実習生に限定した就労産業比データが必要。②個体効果の要因を詳しく知るには、実習生の体験談や個人単位の詳細な統計が必要。
審査会の評価 注目されにくいテーマで先行研究を十分に押さえ、交絡要因の影響除去など適切な分析を行っている。実証技術の独創性は希薄だが、教科書的で丁寧な計量実証を行っており、手堅い実証能力・考察能力が評価できる、とされた。

データ・コードのダウンロード

このページの統制変数の再現検証(図4)は、以下から実際に再現できます。

🐍 再現コード(.py) 📊 SSDSE-B-2026.csv

※ 回帰係数(図3)・時間効果(図1)・個体効果ランキング(図2)は、技能実習生数・就労産業/国籍クラスター・製造業事業所数などSSDSE-B外のデータに基づくため、原論文の報告値を可視化したものです。図4のみ実データからの再計算で、しかも従属変数ではなく統制変数の妥当性確認です。本ページに新しく推定した数値はありません。

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

この研究を読むとき・まねするときに陥りやすい誤解を整理する。

誤解1:「クラスター効果」だから k-means などのクラスタリングを使った
違う。本論文の「クラスター」は各県の産業・国籍構成が全国平均からどれだけ偏っているか変動係数で数値化した指標で、機械的なクラスタリング(k-means・階層クラスタリング)ではない。手法の中心は固定効果パネル回帰である。
誤解2:「逆U字だから、産業の偏りが技能実習生を引き寄せる」
著者はむしろ「特定産業の偏りが技能実習生を引き付けるとは結論できない」と述べている。全国平均に外国人労働者全般のデータを使った制約が影響した可能性を指摘しており、逆U字は「都会過ぎず田舎過ぎない地域」への集まりの手がかりという位置づけ。
誤解3:「個体効果が高い=住みやすい」
個体効果 αi は「技能実習生への需要/魅力度」を表す相対指標で、基準県(愛知)を0とした差である。愛知は基準ゆえ標準化で見かけ上大きくなるなど、絶対的な順位として過度に読み込まないこと。
誤解4:「このページの図はすべて実データで再現した数値」
図3・図1・図2は原論文の報告値の可視化(再計算ではない)。実データからの再計算は図4だけで、それも従属変数ではなく統制変数の妥当性確認。図注・実行結果に明記している。

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

クリックすると各用語の詳しい解説ページに移動できます。

固定効果モデル
パネルデータで、個体(都道府県)や時間(年度)ごとの観察されない一定の異質性を除いて推定する方法。本研究は個体と時間の両方を除く二方向固定効果。
パネルデータ
同じ対象(47都道府県)を複数時点(2016〜2019)で観測したデータ。本研究は N=188。
ダミー変数
都道府県や年度など、カテゴリを0/1で表す変数。1つを基準(本研究では愛知)にして残りの効果を推定する。
多重共線性
説明変数どうしが強く相関し、係数が不安定になる問題。本研究は相関の高いx3×x4に交差項を入れて配慮した。
標準化
平均0・標準偏差1に変換して大きさを比較可能にする操作。表7で個体効果を標準化している。
相関係数
2つの数量が一緒に増減する強さと向きを−1〜+1で表す指標。本研究の表3で変数間の交絡を確認する。
変動係数(クラスター度)
標準偏差÷平均。本研究では各県の産業・国籍構成が全国平均からどれだけ偏っているかを測る「クラスター度」の材料に使われる。

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

この研究で使われている手法を、手を動かす順に説明する。

全体像
各県の産業・国籍の偏りを変動係数でクラスター指標にする → 二方向固定効果モデルで技能実習生割合を説明する → 係数(クラスター効果)と、都道府県・年度の固定効果(魅力度・時間トレンド)を読む。
🧮 二方向固定効果モデル
何をする
各県・各年の水準差を除いて、変数の「変化」どうしの関係を推定する。都道府県の魅力度や年ごとの底上げをダミー係数として取り出せる。
読み方
個体効果 αi が大きい県ほど技能実習生への需要/魅力度が高い。年度効果が右上がりなら受入が年々増えている。
注意
1つの県(愛知)を基準に0とするため、係数は相対値。基準県は標準化で見かけ上大きく出ることがある。
🔁 2次項(逆U字)と交差項
何をする
x1 の1次項と2乗項を同時に入れると、山型/谷型の非線形な関係を捉えられる。交差項 x3×x4 は「2変数の組み合わせ効果」を統制する。
なぜ必要
産業の偏りと技能実習生割合が直線でない可能性、および相関の高い変数(r=0.47)の見かけ上の効果を抑えるため。
注意
2乗項・交差項は解釈が難しくなる。符号(1次+・2乗−なら逆U字)と頂点の位置をセットで読む。
📏 変動係数によるクラスター指標と標準化
何をする
各県の産業・国籍構成が全国平均からどれだけ散らばっているかを変動係数で測り、加重平均して1つの「クラスター度」にまとめる。個体効果は標準化して県間比較する。
なぜ必要
「偏り」という抽象概念を1つの数値にし、県ごとに比較できるようにするため。
注意
指標の作り方(どの産業・国籍を上位に取るか)で値が変わる。定義を確認して使うこと。

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

この研究の「データの制約で仮説が一部覆った」という結論は、次の研究の出発点になる。

発展1:技能実習生に限定した産業データで逆U字を再検証
結果X
就労産業クラスターは仮説(U字)と逆の逆U字だった。原因は全国平均に外国人労働者全般のデータを使った制約。
新仮説Y
技能実習生に限定した産業構成でクラスター指標を作れば、仮説どおりのU字(偏りが大きい県で割合が高い)が出るのでは。
課題Z
在留資格別・産業別の実習生数を入手し、x1 を作り直して再推定する。
発展2:個体効果の要因を説明する第2段階回帰
結果X
個体効果は大都市圏の周縁に集中したが、「なぜ」は定量化できていない。
新仮説Y
賃金水準・同国籍コミュニティの規模・交通アクセスなどが個体効果を説明するのでは。
課題Z
推定した αi を被説明変数に、地域特性を説明変数にした2段階回帰や、実習生への聞き取り調査を組み合わせる。

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

再現コードを少し変えるだけで試せる課題を、易しい順に用意した(図4の統制変数再現がベース)。

★☆☆☆☆ 難易度1
別の年で統制変数を再現する
d = df[df['年度'].between(2016, 2019)] の範囲を 2020〜2023 に変えて、有効求人倍率や住宅地価格の平均がどう動いたか確かめよう。
★★☆☆☆ 難易度2
住宅地価格の都道府県ランキングを出す
2019年の x6_住宅地価格 で47都道府県を降順に並べ、東京・神奈川が上位、地方が下位という構図を確認しよう。原論文が x6 を負に効くと報告した背景が見えてくる。
★★★☆☆ 難易度3
有効求人倍率と住宅地価格の相関を計算する
scipy.stats.pearsonr で2019年の x3 と x6 の相関を計算しよう。原論文 表3 では両者の相関は0.12前後だった。近い値になるか?
★★★★☆ 難易度4
SSDSE-Bにある変数だけで簡易パネル回帰を組む
従属変数に「外国人延べ宿泊者数/総人口」などSSDSE-Bにある指標を置き、linearmodels.PanelOLS で都道府県固定効果を入れて推定してみよう(技能実習生割合の代わりの練習)。
★★★★★ 難易度5
2乗項を入れて逆U字を自分で確かめる
難易度4のモデルに、ある説明変数の2乗項を追加して、1次が正・2乗が負なら逆U字になることを係数の符号で確かめよう。頂点は −(1次係数)/(2×2乗係数) で計算できる。
ヒント:2乗項を入れる前に変数を中心化(平均を引く)すると、多重共線性が減り係数が安定する。

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

この研究を読んで浮かびやすい疑問に答える。

Q. なぜ従属変数は「労働人口に占める」割合なの?「総人口に占める」ではダメ?
A. 総人口を分母にすると少子高齢化の影響が交絡します。労働人口(15〜64歳)を分母にすることでその影響を抑えられますが、代わりに製造業事業所数の効果が分母を通じて薄まるトレードオフが生じる、と著者は述べています。
Q. このページの図は原論文と同じ数値ですか?
A. 図3(回帰係数)・図1(時間効果)・図2(個体効果)は原論文の報告値を可視化したもの(再計算ではない)。実データからの再計算は図4だけで、それも従属変数ではなく統制変数(有効求人倍率・住宅地価格など)の妥当性確認です。技能実習生数やクラスター指標はSSDSE-Bに無いため再計算できません。新しく推定した数値はありません。
Q. 「逆U字」ってどういう意味?産業の偏りは技能実習生を集めるの?
A. x1(産業の偏り)の1次項が正・2乗項が負なので、偏りが中間の県で技能実習生割合が最も高く、極端に大きい/小さい県では低い山型です。ただし著者は「産業の偏りが実習生を引き付ける」とは結論せず、データの制約を挙げています。
Q. 統制変数の再現(図4)が一致したなら、回帰結果も正しいと言える?
A. いいえ。図4で一致したのは統制変数の記述統計(データ系列が同じこと)までです。回帰係数そのものは、SSDSE-Bに無い従属変数・クラスター指標を使って推定されているため、このページでは検証できません。あくまで報告値です。

✅ 理解度チェック(4問)

この論文を理解できたか、クリックで確認しましょう。間違えても解説が出ます。

🐍 ブラウザで動かす — インストール不要でこの論文の分析を再現する

このページの分析は、この画面の中でそのまま実行できます。 Python をインストールする必要も、CSV をダウンロードする必要もありません。 下のセルの 「▶ ブラウザで実行」 を上から順に押すか、 「▶ 最初から全部実行」 で一気に流してください。 表示されるのは、本文の図表とまったく同じ計算の結果です (動かしているのは再現スクリプト code/2021_U5_1_shorei.py そのもの)。

コードは書き換えられます。「✏️ 書き換える」で数字や変数を変えて ▶ を押すと、 結果がどう変わるかをその場で確かめられます(元に戻すボタンつき)。 ページを開いた時点で裏で実行環境の準備が始まっているので、待ち時間はほとんどありません。 初回だけ実行環境の取得にインターネット接続が必要です。