🎯 この記事を読むと何ができるようになるか
研究の核心: 身近な社会問題(コロナ感染)を、目的変数を決めて回帰分析で要因を探る という探究の進め方。単回帰から重回帰へ広げる流れ。
多重共線性に気づく: 「R²が0.99でよく当てはまった!」で終わらせず、説明変数どうしが人口と強く相関している 多重共線性 を疑う目。著者自身が「全項目が人口と相関する」と限界を明記している点が見どころ。
誠実な再現: 感染者数・政策データはSSDSEに無いので報告値の可視化 にとどめ、SSDSE-Bに実在する総人口・延べ宿泊者数・一般病院数だけを実再現 する。捏造しないデータの扱い方。
相関≠因果: 感染者数と病院数に相関があっても「病院が感染を生む」わけではない(PCR検査のしやすさ・高齢者の多さが背景)。因果 を急がない姿勢。
📥 データの準備(再現コードを動かす前に)
このページで実再現できるのは図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の報告値)
研究の問い
都道府県ごとの新型コロナ累計感染者数は、人口とどれだけ相関するのか。人口以外にどんな社会的事象(観光・医療・飲食など)が感染に関わり、そこからどんな政策が効率的だと言えるのか。
分析のキモ:高い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項目は全て 人口と相関
→
提言 観光地・医療施設 の集団感染対策
① 単回帰:感染者数と総人口
まず「人が多い=三密が起きやすい」という直感を確かめる。感染者数を目的変数、総人口を説明変数に単回帰 すると、重決定R² =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 は都道府県別の累計感染者数を棒グラフで示したが、感染者数は SSDSE に無い。そこで感染者数と強く連動する総人口(R²=0.94・報告値)を SSDSE-B で実再現 する。ここは都道府県データから計算できる実再現部分 である。
① このコードの目的: SSDSE-B-2026 を cp932 ・ラベル行 skiprows=[1] で読み込み、原論文が使った説明変数のうち SSDSE-B にも実在する A1101 総人口・A1301/A1302/A1303 世代別人口・G7101 延べ宿泊者数・I510120 一般病院数 を数値化する。直近年の 2023年・47都道府県 断面 d23 を作る。
② 前後のつながり: この読み込みが実再現(図1・図2)の土台になる。累計感染者数や小売店数など原論文の中心指標は SSDSE-B に無いが、人口・宿泊者数・病院数はここから再計算できる。
📝 コード
📋 コピー 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年でも同じ都道府県粒度で分析でき、原論文の相関構造を実データで確かめられる。
① このコードの目的: 2023年の総人口 A1101 を降順に並べ、人口が多い上位・少ない下位の都道府県を書き出す。原論文 図1(都道府県別累計感染者数)に対応させる。感染者数は SSDSE に無いため、原論文が単回帰で R²=0.9405 と示した「総人口」を実データで並べる。
② 前後のつながり: 著者は図1で感染者数の都道府県差(上位に東京・大阪・神奈川・愛知・福岡、下位に鳥取・山形・秋田)を示した。感染者数≒総人口という主張の土台となる人口分布を、まず実データで確認する。
📝 コード
📋 コピー 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位圏外にある点など、人口だけでは説明しきれない差も残る。
📊 この図の読み方
上位に大都市 東京・神奈川・大阪・愛知・埼玉。原論文が挙げた感染者数の上位(東京・大阪・神奈川・愛知)とほぼ一致。
下位に地方 高知・島根・鳥取。原論文の感染者数下位(鳥取・山形・秋田)と重なる。
位置づけ 実再現 。感染者数ではなく総人口を示す。両者の連動(R²≈0.94)は原論文の報告値。
原論文の核心的な注意点「重回帰の6項目は全て人口と相関している」を、SSDSE-Bで実データ検証する。感染者数・小売店数などは収録されていないので、SSDSE-Bに実在する延べ宿泊者数・一般病院数 で確かめる。
① このコードの目的: 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)とよく合う。原論文が指摘した多重共線性 ——説明変数どうしが人口を通じて強く相関する構造——が、別年度・別データセットの実データでも再現された。
📊 この図の読み方
右肩上がりの直線 人口が多い県ほど宿泊者数も病院数も多い。説明変数が人口とほぼ比例する=多重共線性。
報告値との一致 実再現R²(0.705/0.811)が原論文の報告値(0.7093/0.801)とほぼ一致。別年度の実データでも同じ構造。
意味 これらを重回帰にまとめて入れると、各係数は「人口の効果」と混ざって解釈が難しくなる(多重共線性)。
ここからが原論文の中心である。感染者数を目的変数、6項目を説明変数とした重回帰の係数を見る。感染者数・小売店数・飲食店数・事業所数は SSDSE-B に無いため、原論文の報告値を転記して可視化する(再計算ではない)。
① このブロックの目的: 感染者数を目的変数とした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に無いため再計算はしていない。
📊 この図の読み方
0の縦線 右(正)なら感染者数を増やす向き、左(負)なら減らす向きの係数。
正の4項目 人口・延べ宿泊者数・飲食店数・一般病院数。観光・飲食・医療が感染者数と正の関係。
負の2項目 事業所数・小売店数。人口と正相関する変数が負に出るのは多重共線性のサイン。
著者は世代別人口でも感染者数と単回帰し、「世代による違いは小さい」ことを確かめた。目的変数が累計感染者数のため再計算できず、報告値を可視化する。
① このブロックの目的: 累計感染者数を目的変数とした単回帰の決定係数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で、原論文の記載どおり併記している。すべて原論文の報告値である。
📊 この図の読み方
すべて高い 0.88〜0.95。どの世代人口でも感染者数をよく説明する。
世代差が小さい 15歳未満0.93・生産年齢0.95・65歳以上0.89とほぼ横並び。特定世代に偏っていない。
裏返せば 世代別人口も総人口も互いに強く相関する(図2と同じ多重共線性)ため、どれで回帰しても高R²になる。
結果の解釈と提言
重回帰で人口以外に効いたのは観光・医療・飲食であり、娯楽施設(映画館・体育施設)や交通指標は相関が弱かった。著者はここから、どんな場所の対策が効率的かを考察する。
要因:長期滞在・共有の場ほど感染が広がる(原論文 4章)
公共交通機関や娯楽施設の相関が弱かったのは、滞在時間が短く、他人と同じ物を長く共有しにくい からだと著者は解釈する。逆に、延べ宿泊者数(観光地)や一般病院数(医療・介護施設)が効いたのは、長時間の滞在や、マスクを外す・同じ物を複数人で共有する場面 が多いからだと考えた。厚生労働省の集団感染データでも、医療機関・福祉施設の集団感染が上位を占める。
病院数の相関は「因果」ではない(原論文 4章の再検討)
当初は「病院が多い→PCR検査がしやすく集団感染も起きやすい→感染者数が多い」と考えたが、病院数は65歳以上人口とも総人口とも強く相関する。よって「病院が感染を生む」という因果は棄却 し、病院数はあくまで人口・高齢者数を映す相関 変数だと結論づけた。相関を因果と取り違えない、誠実な後退である。
提言:個人間の感染防止意識に働きかける(原論文 5章)
感染は世代を問わず広がり、症状の軽い人が気づかず感染を広げやすい。そこで著者は、換気されない密閉空間での長時間の接触を避けることを軸に、個人間の感染防止意識に左右されやすい場所——家族や友人間のホームパーティなど——での感染防止の呼びかけ を効率的な政策として提言する。特に基礎疾患のある人や関係者がいる場合は一層の注意が必要とした。
効率的な政策の方向(原論文 5章)
長期滞在の観光地・医療介護施設
→
集団感染の起点
→
換気・接触時間の管理
→
家庭・友人間の個人対策
この考察の限界 回帰分析は因果 を示さない。感染者数と相関した6項目は全て人口と相関しており(多重共線性 )、どれが独立に効いているかは特定できない。政策提言も相関に基づく解釈であり、実際に感染が減るかは未検証だと著者自身が述べている。
原論文のデータ出典は SSDSE-E (都道府県の基礎素材)でした。同じ SSDSE-E-2026 から、感染症対策の検討で鍵になる人口密度変数を構築します。
📝 コード
📋 コピー 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問)
この論文を理解できたか、クリックで確認しましょう。間違えても解説が出ます。