論文一覧に戻る 🕸 論文ネットワーク 🗺 用語ネットワーク 統計データ分析コンペ 教育用再現集
審査員奨励賞[高校生の部] ★

新型コロナウイルス感染者数減少において
効率的な政策の検討

⏱️ 推定読了時間: 約20分
2022年度(令和4年度)統計データ分析コンペティション | 篠田 桜楽(品川女子学院高等部) | SSDSE-E-2022v2・国勢調査・NHKまとめ(+本ページ実再現はSSDSE-B) | 単回帰・重回帰・多重共線性の考察
🔬 VIF/多重共線性🔬 単回帰🔬 重回帰🏷 感染症・コロナ🏷 医療・健康🏷 観光
🔬 手法タグ / 🏷 応用タグ(クリックで同タグの論文をネットワーク検索)
🔬 再現カルテ — 原論文のデータが手に入らないため、代替データで再現

この教材は、原論文が使ったデータそのものを使えていません。そこで代わりのデータで同じ問いを追いかけ、結論の向き(増える/減る、強い/弱い)が原論文と一致するかを確かめます。「同じ数値が出る」ことは目標にしていません。

原論文が使ったデータSSDSE-E・国勢調査
分析単位:都道府県
中核手法:単回帰分析・重回帰分析・相関分析
この教材が使うデータ
原論文(PDF)新型コロナウイルス感染者数減少において効率的な政策の検討
審査員奨励賞/篠田 桜楽(品川女子学院高等部)
✅ この教材でできること
  • 原論文の中核手法(相関分析)を実データで実行できる
  • 分析に使うデータは同梱済みで、ブラウザ上でそのまま読み込める
  • 数値・図を最後まで再計算できる(相関分析)
⚠️ この教材ではできないこと(原論文との違い)
  • 原論文と同じデータでの再現はできない:論文=SSDSE-E → 教材=SSDSE-B
  • 原論文は SSDSE-E を使っているが、この教材は SSDSE-B を使っている(原論文本文で確認)
📄 原論文との違いを、もっと詳しく
📄 原論文:SSDSE-E(基礎素材)のデータで新型コロナウイルス感染者数減少に効率的な政策を検討。
📘 本教材:step 1〜4 は SSDSE-B での代理分析。step 5 で原論文と同じ SSDSE-E の変数構築を再現
⚠️ 注意:感染者数データ(厚労省オープンデータ)は SSDSE 未収録。
🚀 原論文と同じ粒度で挑戦したい人へ

原論文と同じ粒度のデータは、この教材にも同梱しています。これを読み込めば、原論文と同じ細かさで分析をやり直せます(下の「🐍 ブラウザで動かす」でコードを書き換えて試せます)。ただし原論文が使った項目がすべて収録されているとは限りません。足りない項目は、上の「できないこと」に書いた出典から取ってくる必要があります。

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

📝 3行で分かる要約

目次

  1. 研究のテーマと目的
  2. 使用データと再現可能性の整理
  3. 分析の流れ:単回帰 → 重回帰 → 多重共線性の発見
  4. 図1:都道府県別 総人口ランキング(実再現)
  5. 図2:説明変数は人口と相関する(実再現)
  6. 図3:原論文 表4 の重回帰係数(報告値)
  7. 図4:感染者数の単回帰R²一覧(報告値)
  8. 結果の解釈と提言
  9. SSDSE-E データでの再現
  10. まとめと今後の課題
  11. データ・コードのDL
  12. ⚠️ よくある誤解
  13. 📖 用語集
  14. 📐 手法ガイド
  15. 🚀 発展の可能性
  16. 🎯 自分でやってみよう
  17. 🤔 Q&A
  18. 🐍 ブラウザで動かす

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

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

このページで実再現できるのは図1(総人口ランキング)と図2(総人口×延べ宿泊者数・総人口×一般病院数)です。コードの編集は不要です。(原論文の中心である累計感染者数・小売店数・飲食店数・事業所数は SSDSE-B に無いため、図3・図4は原論文の報告値を可視化します。)

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

著者は品川女子学院高等部の生徒である。新型コロナウイルスは「三密(密閉・密集・密接)」の条件がそろう環境で感染が広がりやすい。一方で東京都の人口は1400万人を超え一極集中が進み、満員電車(JR横須賀線の朝は混雑率195%)のような「三密」の場も都市部に集中している。そこで著者は「感染者数は人口密度(=人が集まる度合い)と関係するのではないか」と考えた。

そこで本研究では、47都道府県別の累計感染者数(2022年8月5日現在・NHKまとめ)を目的変数として回帰分析を行う。まず総人口で単回帰し、次に医療・観光・娯楽など16項目で重回帰して、人口以外にどんな社会的事象が感染に関わるかを調べる、という二段構えである。

0.9405
感染者数×総人口の単回帰・重決定R²(原論文 表2の報告値)
0.99063
6項目の重回帰・重決定R²(原論文 表4の報告値)
934.13
一般病院数の重回帰係数(原論文 表4の報告値)
46
6項目重回帰の観測数(原論文 表4)
研究の問い 都道府県ごとの新型コロナ累計感染者数は、人口とどれだけ相関するのか。人口以外にどんな社会的事象(観光・医療・飲食など)が感染に関わり、そこからどんな政策が効率的だと言えるのか。
分析のキモ:高いR²の裏にある「多重共線性」 感染者数は総人口とR²=0.94、6項目の重回帰ではR²=0.99と非常によく当てはまる。しかし著者は「6項目は全て人口と相関している」と気づき、当てはまりの良さを鵜呑みにしない。説明変数どうしが強く相関する多重共線性を自ら指摘した点が、この研究の見どころ。

高校生の部 SSDSE-E+国勢調査+NHKまとめ 単回帰分析 重回帰分析 多重共線性の考察

使用データと再現可能性の整理

本研究は複数の出典を組み合わせている。目的変数の累計感染者数は「NHKまとめ」(2022年8月5日現在)、16項目の説明変数は主に SSDSE-E-2022v2(人口・世帯/経済/労働/娯楽/医療)から、公共交通機関通勤・通学率と乗用車保有台数は国勢調査(偏差値化)から取っている。いずれも都道府県粒度である。

主なデータと出典(原論文 表1)

役割データ出典(年度)本ページでの扱い
目的変数累計感染者数(2022/8/5現在)NHKまとめ報告値の可視化
人口総人口・15歳未満・15〜65歳未満・65歳以上SSDSE-E-2022v2(2020)実再現(SSDSE-B)
経済・労働事業所数・小売店数・飲食店数・大型小売店数SSDSE-E-2022v2(2016)報告値の可視化
娯楽・観光延べ宿泊者数・体育施設・劇場・映画館・旅券発行SSDSE-E-2022v2(2016〜2020)延べ宿泊者数のみ実再現(SSDSE-B)
交通公共交通機関通勤・通学率/乗用車保有台数(偏差値)国勢調査(2010〜2015)報告値の可視化
医療一般病院数SSDSE-E-2022v2(2019)実再現(SSDSE-B)
再現可能性の整理(このページの図の作り方)
  • 実再現できる部分:原論文の説明変数のうち 総人口(A1101)延べ宿泊者数(G7101)一般病院数(I510120)・世代別人口 は SSDSE-B(都道府県)にも実在する。そこで図1で総人口ランキングを、図2で原論文の主張「説明変数は全て人口と相関する」を 総人口×延べ宿泊者数・総人口×一般病院数として実データで再現・検証する。
  • 報告値の可視化(再計算ではない):研究の中心である累計感染者数は SSDSE に無く、小売店数・飲食店数・事業所数・旅券発行件数・偏差値化した交通指標も SSDSE-B に列が無い。よって図3(表4の重回帰係数)と図4(単回帰の決定係数R²)は原論文の報告値を転記して可視化する(符号・桁そのまま)。
  • 新しい数値の捏造はしない:報告値と再計算値はラベルで分離する。感染者数・GDP・県内総生産など SSDSE-B に無い列は一切使わない。実再現(図1・図2)は、原論文が示した「説明変数と人口の相関」を実データで裏づける参考であり、感染者数そのものの回帰の代わりにはならない点を図注に明記する。

分析の流れ:単回帰 → 重回帰 → 多重共線性の発見

分析の流れ
単回帰
感染者数×総人口
R²=0.9405
重回帰(16項目)
P<0.1 は
6項目
重回帰(6項目)
R²=0.99063
多重共線性
6項目は全て
人口と相関
提言
観光地・医療施設
の集団感染対策

① 単回帰:感染者数と総人口

まず「人が多い=三密が起きやすい」という直感を確かめる。感染者数を目的変数、総人口を説明変数に単回帰すると、重決定=0.9405(原論文 表2)と強い相関が出た。

② 重回帰:16項目で要因を広げる

人口以外の社会的事象を探るため、医療・観光・飲食など16項目で重回帰P値が0.1未満だったのは、総人口・宿泊飲食の事業所数・延べ宿泊者数・小売店数・飲食店数・一般病院数の6項目(原論文 表3)。

③ 6項目に絞って重回帰

その6項目に絞って重回帰すると R²=0.99063(原論文 表4)とさらに当てはまりが良くなった。観光業・医療・飲食が人口以外の要因として浮かび上がる。

④ 多重共線性を疑う

ただし著者は「6項目は全て人口と強く相関している」と気づく(原論文 図3〜7)。説明変数どうしが相関する多重共線性があると、係数の解釈は難しくなる。当てはまりの良さ=正しい要因分解、ではないことを著者自身が指摘した。

⑤ 世代別・病院数と高齢者の関係

さらに世代別人口(15歳未満・生産年齢・65歳以上)でも感染者数と単回帰し、世代差が小さいことを確認(図9・11・12)。病院数と高齢者数の相関(図10)も調べ、「病院が多い=PCR検査がしやすく集団感染も起きやすい」という仮説を検討した。

相関は「関係の強さ」であって因果ではない 本研究は相関・回帰を中心に用いる。感染者数と病院数に相関があっても病院が感染を生むわけではない。PCR検査のしやすさや高齢者の多さなど、背後の要因を通じた見かけの関係かもしれない。著者も「回帰分析は相関を示すが因果ではない」と明記している。
1
図1:都道府県別 総人口ランキング(実再現)

原論文 図1 は都道府県別の累計感染者数を棒グラフで示したが、感染者数は SSDSE に無い。そこで感染者数と強く連動する総人口(R²=0.94・報告値)を SSDSE-B で実再現する。ここは都道府県データから計算できる実再現部分である。

やってみようSSDSE-B を読み込み、原論文の説明変数のうち実在する列だけを取り出す【実再現の準備】
  • ① このコードの目的:SSDSE-B-2026 を cp932・ラベル行 skiprows=[1] で読み込み、原論文が使った説明変数のうち SSDSE-B にも実在する A1101 総人口A1301/A1302/A1303 世代別人口G7101 延べ宿泊者数I510120 一般病院数 を数値化する。直近年の 2023年・47都道府県断面 d23 を作る。
  • ② 前後のつながり:この読み込みが実再現(図1・図2)の土台になる。累計感染者数や小売店数など原論文の中心指標は SSDSE-B に無いが、人口・宿泊者数・病院数はここから再計算できる。
📝 コード
69
70
71
72
73
74
75
76
df = pd.read_csv(DATA_B, encoding='cp932', skiprows=[1])
NUM = ['A1101', 'A1301', 'A1302', 'A1303', 'G7101', 'I510120']
for c in NUM:
    df[c] = pd.to_numeric(df[c], errors='coerce')
df['年度'] = df['SSDSE-B-2026'].astype(int)

# 直近年(2023)の47都道府県断面
d23 = df[df['SSDSE-B-2026'] == 2023].copy().reset_index(drop=True)
  • ④ 実行結果の読み取り:エラーなく読み込めれば準備完了。原論文は SSDSE-E(2016〜2020年の値)を使ったが、SSDSE-B の直近2023年でも同じ都道府県粒度で分析でき、原論文の相関構造を実データで確かめられる。
やってみよう都道府県別の総人口を並べる【実再現・図1】
  • ① このコードの目的:2023年の総人口 A1101 を降順に並べ、人口が多い上位・少ない下位の都道府県を書き出す。原論文 図1(都道府県別累計感染者数)に対応させる。感染者数は SSDSE に無いため、原論文が単回帰で R²=0.9405 と示した「総人口」を実データで並べる。
  • ② 前後のつながり:著者は図1で感染者数の都道府県差(上位に東京・大阪・神奈川・愛知・福岡、下位に鳥取・山形・秋田)を示した。感染者数≒総人口という主張の土台となる人口分布を、まず実データで確認する。
📝 コード
84
85
86
87
88
89
90
rank = d23.sort_values('A1101', ascending=False).reset_index(drop=True)
print(f"標本数 N = {len(d23)} 都道府県(2023年・SSDSE-B A1101 総人口)")
print("人口が多い上位5: " +
      "、".join(f"{r.Prefecture}({int(r.A1101):,})" for r in rank.head(5).itertuples()))
print("人口が少ない下位3: " +
      "、".join(f"{r.Prefecture}({int(r.A1101):,})" for r in rank.tail(3).itertuples()))
print("※原論文は感染者数上位に東京・大阪・神奈川・愛知・福岡、下位に鳥取・山形・秋田を挙げた")
▼ 実行結果
=== [1] 都道府県別 総人口ランキング(2023・実再現) ===
標本数 N = 47 都道府県(2023年・SSDSE-B A1101 総人口)
人口が多い上位5: 東京都(14,086,000)、神奈川県(9,229,000)、大阪府(8,763,000)、愛知県(7,477,000)、埼玉県(7,331,000)
人口が少ない下位3: 高知県(666,000)、島根県(650,000)、鳥取県(537,000)
※原論文は感染者数上位に東京・大阪・神奈川・愛知・福岡、下位に鳥取・山形・秋田を挙げた
  • ④ 実行結果の読み取り:人口上位は東京・神奈川・大阪・愛知・埼玉、下位は高知・島根・鳥取原論文が挙げた感染者数の上位(東京・大阪・神奈川・愛知)・下位(鳥取)とほぼ一致する。感染者数と総人口が強く連動する(R²=0.94・報告値)という主張が、人口分布の側から裏づけられる。福岡が人口5位圏外にある点など、人口だけでは説明しきれない差も残る。
都道府県別 総人口ランキング(2023・SSDSE-B A1101・実再現)
図1:都道府県別 総人口ランキング(2023年)。実再現(原論文 図1「累計感染者数」の代理)。SSDSE-B の A1101 から算出。上位は東京・神奈川・大阪・愛知・埼玉。感染者数はSSDSE未収録のため、原論文が単回帰で示した「感染者数≒総人口(R²≈0.94・報告値)」の総人口を実データで並べたもので、感染者数そのものではない。
📊 この図の読み方
上位に大都市
東京・神奈川・大阪・愛知・埼玉。原論文が挙げた感染者数の上位(東京・大阪・神奈川・愛知)とほぼ一致。
下位に地方
高知・島根・鳥取。原論文の感染者数下位(鳥取・山形・秋田)と重なる。
位置づけ
実再現。感染者数ではなく総人口を示す。両者の連動(R²≈0.94)は原論文の報告値。
2
図2:説明変数は人口と相関する(実再現)

原論文の核心的な注意点「重回帰の6項目は全て人口と相関している」を、SSDSE-Bで実データ検証する。感染者数・小売店数などは収録されていないので、SSDSE-Bに実在する延べ宿泊者数・一般病院数で確かめる。

やってみよう原論文の主張「説明変数は全て人口と相関する」を実データで検証する【実再現・図2】
  • ① このコードの目的:2023年の47都道府県で、総人口×延べ宿泊者数総人口×一般病院数相関scipy.stats.pearsonr で求め、決定係数R²を計算する。原論文 図4(人口×宿泊者数・R²=0.7093)・図7(人口×一般病院数・R²=0.801)の報告値と突き合わせる。
  • ② 前後のつながり:原論文は重回帰でR²=0.99を得たあと、「6項目は全て人口と相関している(多重共線性)」と自ら指摘した。その根拠となる相関を、SSDSE-Bに実在する宿泊者数・病院数で実データから確かめる。
📝 コード
118
119
120
121
122
123
124
125
126
127
128
print("\n=== [2] 「説明変数は人口と相関」実データ検証(2023・実再現) ===")
pairs = [('A1101', 'G7101', '総人口 × 延べ宿泊者数', 0.7093, '図4'),
         ('A1101', 'I510120', '総人口 × 一般病院数', 0.801, '図7')]
res2 = []
for xc, yc, name, rep, src in pairs:
    r, p = stats.pearsonr(d23[xc], d23[yc])
    res2.append((name, r, r ** 2, p, rep, src))
    print(f"{name}: r={r:.4f}  実再現R²={r**2:.4f}  (原論文{src}の報告値R²={rep})  p={p:.2e}")
# 参考:一般病院数×65歳以上人口(原論文 図10 に対応)
r10, p10 = stats.pearsonr(d23['I510120'], d23['A1303'])
print(f"(参考)一般病院数 × 65歳以上人口: 実再現R²={r10**2:.4f}  (原論文 図10 の報告値R²=0.8346)")
▼ 実行結果
=== [2] 「説明変数は人口と相関」実データ検証(2023・実再現) ===
総人口 × 延べ宿泊者数: r=0.8398  実再現R²=0.7053  (原論文図4の報告値R²=0.7093)  p=1.61e-13
総人口 × 一般病院数: r=0.9003  実再現R²=0.8105  (原論文図7の報告値R²=0.801)  p=7.28e-18
(参考)一般病院数 × 65歳以上人口: 実再現R²=0.8453  (原論文 図10 の報告値R²=0.8346)
  • ④ 実行結果の読み取り:実再現の決定係数は 総人口×延べ宿泊者数 R²=0.705総人口×一般病院数 R²=0.811(いずれもp<0.001, N=47)。原論文の報告値0.7093・0.801とほぼ一致し、参考の一般病院数×65歳以上人口も R²=0.845(報告値0.8346)とよく合う。原論文が指摘した多重共線性——説明変数どうしが人口を通じて強く相関する構造——が、別年度・別データセットの実データでも再現された。
総人口×延べ宿泊者数・総人口×一般病院数の散布図(2023年・47都道府県・実再現)
図2:総人口と説明変数の関係(2023年・47都道府県)。実再現。SSDSE-B の A1101・G7101・I510120 から算出。左:総人口×延べ宿泊者数(実再現R²=0.705/原論文 図4 報告値R²=0.7093)、右:総人口×一般病院数(実再現R²=0.811/原論文 図7 報告値R²=0.801)。報告値と実再現はラベルで分離。感染者数そのものの回帰ではなく、原論文の多重共線性の指摘を裏づける実データ検証。
📊 この図の読み方
右肩上がりの直線
人口が多い県ほど宿泊者数も病院数も多い。説明変数が人口とほぼ比例する=多重共線性。
報告値との一致
実再現R²(0.705/0.811)が原論文の報告値(0.7093/0.801)とほぼ一致。別年度の実データでも同じ構造。
意味
これらを重回帰にまとめて入れると、各係数は「人口の効果」と混ざって解釈が難しくなる(多重共線性)。
3
図3:原論文 表4 の重回帰係数(報告値)

ここからが原論文の中心である。感染者数を目的変数、6項目を説明変数とした重回帰の係数を見る。感染者数・小売店数・飲食店数・事業所数は SSDSE-B に無いため、原論文の報告値を転記して可視化する(再計算ではない)。

やってみよう原論文 表4 の6項目重回帰係数を転記する
  • ① このブロックの目的:感染者数を目的変数とした6項目重回帰(観測数46・重決定R²=0.99062555)の係数とP値を、符号・桁そのままに書き出す。再計算ではなく報告値の転記。
  • ② 前後のつながり:「人口以外に何が感染に効くのか」を係数で読む中心部分。飲食店数・一般病院数が正、事業所数・小売店数が負と符号が割れる点が、多重共線性の考察につながる。
▼ 実行結果(原論文の報告値)
=== [3] 原論文の報告値:6項目の重回帰係数(表4・観測数46・重決定R²=0.99062555) ===
変数                                    係数            P値  有意
人口                              0.127976     6.316e-10  ***
事業所数(宿泊業・飲食サービス業)             -36.965634     2.180e-02  *
延べ宿泊者数                          0.010620     1.043e-02  *
小売店数                          -28.317459     2.849e-07  ***
飲食店数                           73.134609     2.624e-05  ***
一般病院数                         934.126306     2.792e-05  ***
※いずれも原論文 表4 の報告値(感染者数・小売店数・飲食店数等は SSDSE-B に無く再計算不可)
  • ④ 実行結果の読み取り:正の寄与:人口(0.128, p=6.3e-10)・延べ宿泊者数(0.0106, p=0.010)・飲食店数(73.13, p=2.6e-05)・一般病院数(934.13, p=2.8e-05)。長期滞在の観光や飲食、医療施設が感染者数を押し上げる向き。② 負の寄与:宿泊飲食の事業所数(−36.97, p=0.022)・小売店数(−28.32, p=2.8e-07)。本来は人口と正相関する変数が負の係数を持つのは、人口や他変数と強く相関する多重共線性で係数の符号が不安定になったためと読める。③ いずれも原論文 表4 の報告値であり、感染者数がSSDSEに無いため再計算はしていない。
原論文 表4 の6項目重回帰係数(報告値の可視化)
図3:原論文 表4 の6項目重回帰係数。報告値の可視化(再計算ではない)(原論文 表4)。青=正、赤=負。係数のスケールが桁違い(人口0.13〜病院934)のため sign(β)·log10(|β|+1) で表示。数値はすべて原論文の報告値。
📊 この図の読み方
0の縦線
右(正)なら感染者数を増やす向き、左(負)なら減らす向きの係数。
正の4項目
人口・延べ宿泊者数・飲食店数・一般病院数。観光・飲食・医療が感染者数と正の関係。
負の2項目
事業所数・小売店数。人口と正相関する変数が負に出るのは多重共線性のサイン。
4
図4:感染者数の単回帰R²一覧(報告値)

著者は世代別人口でも感染者数と単回帰し、「世代による違いは小さい」ことを確かめた。目的変数が累計感染者数のため再計算できず、報告値を可視化する。

やってみよう原論文が報告した単回帰の決定係数R²を転記する
  • ① このブロックの目的:累計感染者数を目的変数とした単回帰の決定係数R²を、総人口・15歳未満・15〜64歳・65歳以上について書き出す。再計算ではなく報告値の転記。
  • ② 前後のつながり:「感染は特定の世代に偏っているのか」を確かめる部分。どの世代人口でもR²が高いことが、後の「世代を問わず感染する」という考察につながる。
▼ 実行結果(原論文の報告値)
=== [4] 原論文の報告値:累計感染者数を目的変数とした単回帰の決定係数R²(表2・図9・11・12) ===
説明変数              決定係数R²  出所
総人口               0.9405  表2
15歳未満人口           0.9319  図11
15〜64歳人口          0.9501  図12
65歳以上人口           0.8869  図9
※原論文の報告値。目的変数(累計感染者数)が SSDSE に無いため再計算不可。
※図2の近似直線ラベルは R²=0.9354、表2の重決定R²は 0.9405318(原論文の記載どおり併記)。
  • ④ 実行結果の読み取り:総人口(R²=0.9405)・15歳未満(0.9319)・15〜64歳(0.9501)・65歳以上(0.8869)と、どの世代人口でも感染者数と強く相関し、世代差は小さい。著者はここから「感染は世代を問わず広がるが、比較的症状が軽い若者が気づかずに接触して感染を広げている可能性がある」と考察した。なお図2の近似直線ラベルはR²=0.9354、表2の重決定R²は0.9405318で、原論文の記載どおり併記している。すべて原論文の報告値である。
累計感染者数を目的変数とした単回帰の決定係数R²一覧(報告値の可視化)
図4:累計感染者数を目的変数とした単回帰の決定係数R²。報告値の可視化(再計算ではない)(原論文 表2・図9・図11・図12)。総人口・世代別人口いずれも0.88〜0.95と高く、世代差は小さい。数値はすべて原論文の報告値。
📊 この図の読み方
すべて高い
0.88〜0.95。どの世代人口でも感染者数をよく説明する。
世代差が小さい
15歳未満0.93・生産年齢0.95・65歳以上0.89とほぼ横並び。特定世代に偏っていない。
裏返せば
世代別人口も総人口も互いに強く相関する(図2と同じ多重共線性)ため、どれで回帰しても高R²になる。

結果の解釈と提言

重回帰で人口以外に効いたのは観光・医療・飲食であり、娯楽施設(映画館・体育施設)や交通指標は相関が弱かった。著者はここから、どんな場所の対策が効率的かを考察する。

要因:長期滞在・共有の場ほど感染が広がる(原論文 4章)

公共交通機関や娯楽施設の相関が弱かったのは、滞在時間が短く、他人と同じ物を長く共有しにくいからだと著者は解釈する。逆に、延べ宿泊者数(観光地)や一般病院数(医療・介護施設)が効いたのは、長時間の滞在や、マスクを外す・同じ物を複数人で共有する場面が多いからだと考えた。厚生労働省の集団感染データでも、医療機関・福祉施設の集団感染が上位を占める。

病院数の相関は「因果」ではない(原論文 4章の再検討)

当初は「病院が多い→PCR検査がしやすく集団感染も起きやすい→感染者数が多い」と考えたが、病院数は65歳以上人口とも総人口とも強く相関する。よって「病院が感染を生む」という因果は棄却し、病院数はあくまで人口・高齢者数を映す相関変数だと結論づけた。相関を因果と取り違えない、誠実な後退である。

提言:個人間の感染防止意識に働きかける(原論文 5章)

感染は世代を問わず広がり、症状の軽い人が気づかず感染を広げやすい。そこで著者は、換気されない密閉空間での長時間の接触を避けることを軸に、個人間の感染防止意識に左右されやすい場所——家族や友人間のホームパーティなど——での感染防止の呼びかけを効率的な政策として提言する。特に基礎疾患のある人や関係者がいる場合は一層の注意が必要とした。

効率的な政策の方向(原論文 5章)
長期滞在の観光地・医療介護施設
集団感染の起点
換気・接触時間の管理
家庭・友人間の個人対策
この考察の限界 回帰分析は因果を示さない。感染者数と相関した6項目は全て人口と相関しており(多重共線性)、どれが独立に効いているかは特定できない。政策提言も相関に基づく解釈であり、実際に感染が減るかは未検証だと著者自身が述べている。
5
SSDSE-E(基礎素材)のデータで再現する

原論文のデータ出典は SSDSE-E(都道府県の基礎素材)でした。同じ SSDSE-E-2026 から、感染症対策の検討で鍵になる人口密度変数を構築します。

やってみようSSDSE-E 可住地面積から人口密度をつくる
📝 コード
1
2
3
4
5
6
7
8
e_raw = pd.read_csv('data/raw/SSDSE-E-2026.csv', encoding='cp932', header=2)
e = e_raw[e_raw['地域コード'].str.match(r'^R\d{5}$', na=False)].set_index('都道府県')
ev = lambda c: pd.to_numeric(e[c], errors='coerce')
dens = ev('総人口') / ev('可住地面積')
print('可住地人口密度(人/ha) 上位5県:')
for p2, v in dens.nlargest(5).items(): print(f'  {p2}: {v:.1f}')
print(f'最下位: {dens.idxmin()} {dens.min():.1f}')
print('→ 原論文はこの SSDSE-E の可住地面積から人口密度を作り、感染要因分析の説明変数にした')
▼ 実行結果
可住地人口密度(人/ha) 上位5県: 東京都: 99.2 大阪府: 65.6 神奈川県: 62.6 埼玉県: 28.2 愛知県: 24.9 最下位: 北海道 2.2 → 原論文はこの SSDSE-E の可住地面積から人口密度を作り、感染要因分析の説明変数にした
💡 解説
  • 東京の可住地人口密度は 99.2 人/ha で最下位の北海道(2.2)の 45 倍。人口密度は感染拡大速度・政策効果の分析に欠かせない基礎変数で、原論文もここから出発しています。
💡 Python TIPS 「密度」は分母の選び方(総面積/可住地/DID)で値が大きく変わります。定義を必ず明記。

まとめと今後の課題

本研究は、都道府県別の新型コロナ累計感染者数は何と関係し、どんな政策が効率的かという問いに、単回帰・重回帰で挑んだ。感染者数は総人口と単回帰でR²=0.9405(報告値)、6項目の重回帰でR²=0.99063(報告値)と非常によく当てはまった。しかし著者は6項目が全て人口と相関する多重共線性を自ら指摘し、病院数の相関も因果ではないと棄却した。そのうえで、長期滞在の観光地・医療介護施設の集団感染対策と、家族・友人間の個人間感染防止の呼びかけを効率的な政策として提言した。本ページでは、総人口の分布(図1)と「説明変数は人口と相関する」構造(図2)をSSDSE-Bで実再現し、感染者数を含む回帰結果は報告値として切り分けた。高校生が高い決定係数に満足せず多重共線性まで踏み込んだ探究の姿勢が見どころである。

この研究の限界 ①目的変数の感染者数と多くの説明変数はSSDSE未収録で、本ページのSSDSE-Bでは実再現できず報告値の可視化にとどまる(人口・宿泊者数・病院数の相関のみ実再現)。②回帰は因果を示さず、多重共線性のため各要因の独立の効果は不明。③感染者数は検査体制や報告基準に左右され、真の感染規模とはずれる。④提言した対策が実際に感染を減らすかは未検証と著者自身が述べている。
この研究から学べること 目的変数を決めて回帰で要因を探る進め方、そして高い決定係数を鵜呑みにせず多重共線性を疑う統計リテラシー。さらに実再現できる部分と報告値を切り分ける誠実さ。審査会も高校生による身近な課題設定と、多重共線性・相関と因果の区別まで踏み込む丁寧さを評価し、審査員奨励賞に選んだ。

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

このページの実再現の図(図1・図2)は、以下から再現できます。

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

※ 図1(総人口ランキング)・図2(総人口×延べ宿泊者数/総人口×一般病院数)はSSDSE-Bの A1101/G7101/I510120 から算出した実再現です。図3(表4の重回帰係数)と図4(単回帰の決定係数R²)は、目的変数の累計感染者数や小売店数・飲食店数・事業所数などがSSDSE-B外のため、原論文の報告値を可視化したものです(新たな数値の捏造はしていません)。

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

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

誤解1:「R²が0.99なら、この6項目で感染者数を正しく説明できている」
決定係数が高くても各説明変数の効果を正しく分解できているとは限らない。6項目は全て人口と強く相関しており(多重共線性)、係数の符号や大きさは不安定になる。著者自身がこの点を限界として明記している。
誤解2:「病院数と感染者数に相関があるから、病院が感染を広げている」
相関因果ではない。病院数は総人口・高齢者数と強く相関する。著者も「病院が感染を生む」という因果は棄却し、病院数は人口・高齢者数を映す変数だと結論づけた。
誤解3:「このページの散布図の総人口は、原論文の感染者数と同じもの」
違う。感染者数はSSDSEに無いため、図1・図2は総人口・延べ宿泊者数・一般病院数(SSDSE-B)の実再現。感染者数を含む回帰結果(図3・図4)は原論文の報告値の可視化で、図注にラベルを分けて明記している。
誤解4:「累計感染者数=その地域で実際に感染した人数」
累計感染者数は検査で確認・報告された数で、検査体制や報告基準に左右される。無症状・未検査の感染は含まれない。都市部で病院・検査が多いほど「見つかる」数が増える点も、人口との相関に影響している可能性がある。

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

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

単回帰分析
1つの説明変数で目的変数を予測する回帰。本研究では感染者数を総人口で単回帰し、重決定R²=0.9405(報告値)を得た。
重回帰分析
複数の説明変数で目的変数を予測する回帰。本研究では16項目→6項目の重回帰を行い、R²=0.99063(報告値)を得た。
決定係数(R²)
モデルが目的変数のばらつきをどれだけ説明できたかを0〜1で表す。1に近いほど当てはまりが良い。ただし高い=正しい要因分解ではない。
回帰係数
説明変数が1単位増えたとき目的変数がどれだけ変わるか。本研究 表4 では一般病院数の係数が934.13(報告値)など。多重共線性下では符号が不安定になる。
多重共線性
説明変数どうしが強く相関している状態。係数の推定が不安定になり解釈が難しい。本研究の6項目は全て人口と相関しており、著者が限界として指摘した。
相関(相関係数)
2つの量が一緒に動く強さを−1〜+1で表す。本研究では総人口×延べ宿泊者数(実再現r=0.84)などを計算した。
P値
「本当は効果がない」と仮定したとき、観測された結果が起こる確率。本研究は P値0.1未満の6項目を選んで重回帰した。
因果関係
一方が原因で他方が結果という関係。相関があっても因果は言えない。病院数と感染者数の因果を著者は棄却した。
SSDSE
教育用標準データセット。本ページの実再現はSSDSE-B(都道府県別)の総人口・延べ宿泊者数・一般病院数を用いる。原論文の感染者数・小売店数などはSSDSE-Bに無い。

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

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

全体像
まず単回帰で感染者数と総人口の関係を測り → 重回帰で人口以外の要因を探し → 高い決定係数の裏にある多重共線性を疑う。当てはまりの良さを鵜呑みにせず、説明変数どうしの相関を確かめるのが見どころ。
📈 単回帰・重回帰分析
何をする
目的変数(感染者数)を説明変数で予測する直線・平面を当てはめる。説明変数が1つなら単回帰、複数なら重回帰。
読み方
各説明変数の係数が「1単位増えると目的変数がどれだけ変わるか」。P値が小さいほどその係数は偶然では説明しにくい。
注意
回帰は因果を示さない。当てはめる変数を変えると係数も変わる。外れ値の影響も受けやすい。
🎯 決定係数(R²)
何をする
モデルが目的変数のばらつきをどれだけ説明できたかを0〜1で測る。0.9405なら約94%を説明。
なぜ有効
モデルの当てはまりを一目で比較できる。単回帰0.94→重回帰0.99のように改善を追える。
注意
説明変数を増やせばR²はほぼ必ず上がる。高い=正しい、ではない。自由度調整済みR²や多重共線性の確認が要る。
🔗 多重共線性を疑う
何をする
重回帰の説明変数どうしの相関を確かめる。本研究は6項目が全て人口と相関(実再現でR²=0.7〜0.8)することを示した。
なぜ有効
多重共線性があると、各変数の係数の符号・大きさが不安定になり、「どれが効いているか」を誤読しやすい。事前に気づけば解釈を慎重にできる。
注意
相関の高い変数をまとめて入れると係数が予想外の符号を取ることがある(本研究の小売店数の負係数など)。変数選択や主成分分析で対処する。

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

この研究の「感染者数は人口と強く相関し、6項目は多重共線」という結論は、次の研究の出発点になる。

発展1:人口あたりに直して「密度」の効果を見る
結果X
感染者数も説明変数も総人口とほぼ比例(多重共線性)。絶対数どうしの相関が大きく出やすい。
新仮説Y
人口あたり感染率(感染者数/人口)で見れば、人口規模の影響を除いた「密度・観光・医療」の効果が浮かぶのではないか。
課題Z
目的変数・説明変数をすべて人口比・密度に標準化して回帰し、絶対数のときと係数がどう変わるかを比べる。
発展2:時系列・波ごとに分けて分析する
結果X
2022/8/5時点の累計感染者数という1断面で分析している。
新仮説Y
第1波〜第7波では主な感染の場(観光・職場・家庭)が変わり、効く説明変数も変化するのではないか。
課題Z
波ごとの新規感染者数を目的変数に、同じ説明変数で回帰し、係数の時間変化を追う。政策のタイミングも組み込む。

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

再現コードを少し変えるだけで試せる課題を、易しい順に用意した。

★☆☆☆☆ 難易度1
別の年で総人口ランキングを出す
図1のコードは df[df['SSDSE-B-2026']==2023] で2023年を選んでいる。ここを2015年などに変えて、人口上位・下位の顔ぶれが変わるかを見てみよう。
★★☆☆☆ 難易度2
別の説明変数と人口の相関を見る
図2は延べ宿泊者数(G7101)と一般病院数(I510120)。pairs に世代別人口(A1301/A1302/A1303)を足して、それらも総人口と相関するか(多重共線性)を確かめよう。
★★★☆☆ 難易度3
人口あたりに直して相関を見る
総人口×一般病院数ではなく、人口あたり病院数(I510120/A1101)と高齢化率(A1303/A1101)の相関を計算してみよう。絶対数のときと印象が変わるはず。
★★★★☆ 難易度4
SSDSE-Bにある列で重回帰してみる
目的変数を延べ宿泊者数(G7101)にして、総人口・世代別人口・一般病院数で重回帰し、statsmodelsでR²と各P値を出そう。多重共線性で係数がどう振れるかを観察する。
★★★★★ 難易度5
なぜ感染者数の回帰は再現できないのか説明する
原論文の中心(感染者数×総人口R²=0.9405、6項目重回帰R²=0.99063)が、なぜSSDSE-Bで実再現できないのかを、目的変数の有無説明変数の欠落(小売店数・飲食店数・事業所数)の2点から自分の言葉で説明してみよう。

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

「回帰で要因を探り、多重共線性に注意しながら政策を考える」発想は、行政や企業で広く使われている。

🦠
感染症対策・公衆衛生
感染者数を人口・人流・気温などで回帰し、どの要因に対策資源を割くかを判断する。本研究と同じ発想。
📊
需要予測・マーケティング
売上を広告費・気温・人口などで重回帰する際、説明変数どうしの相関(多重共線性)を確認して係数を正しく読む。
🏙️
都市・交通計画
交通量や事故件数を人口・施設数で回帰。相関の高い指標をまとめず、人口あたりに直して比較する工夫が要る。

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

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

Q. R²が0.99もあるのに、なぜ「限界がある」と言うの?
A. 決定係数が高くても、6項目が全て総人口と強く相関しているためです(多重共線性)。この状態では各変数の係数が不安定になり、「どれが独立に効いているか」を正しく分解できません。著者自身がこの点を限界として明記しています。
Q. このページの図は原論文と同じ数値ですか?
A. 図1(総人口ランキング)と図2(総人口×延べ宿泊者数・総人口×一般病院数)はSSDSE-Bからの実再現です。図3(表4の重回帰係数)と図4(単回帰の決定係数R²)は、目的変数の累計感染者数や小売店数・飲食店数などがSSDSE-Bに無いため、原論文の報告値を符号・桁そのままに転記して可視化しています。新たな数値の捏造はしていません。
Q. 図2の実再現R²(0.705/0.811)は原論文の値とどう違うの?
A. 原論文は図4で人口×宿泊者数R²=0.7093、図7で人口×一般病院数R²=0.801(いずれもSSDSE-Eの2016〜2020年値)と報告しました。図2の0.705/0.811は、私たちがSSDSE-Bの2023年値で計算した実再現です。データ年度もデータセットも違いますが、ほぼ一致しており、原論文の「説明変数は人口と相関する」という指摘を裏づけています。
Q. 病院数が多いと感染者数が増えるなら、病院を減らせばいいの?
A. いいえ。相関は因果ではありません。病院数は総人口や高齢者数と強く相関しており、病院そのものが感染を生むわけではない(PCR検査で「見つかる」数が増える面もある)。著者も「病院が感染を生む」という因果は棄却しています。

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

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

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

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

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