この教材は原論文と同じデータを読み込み、同じ手順で計算し直しています。画面に出る数値と図は、あなたのブラウザがその場で計算した結果です。
| 原論文が使ったデータ | 令和4年度全国学力・学習状況調査・令和3年度全国体力・運動能力、運動習慣等調査 分析単位:都道府県 中核手法:因子分析・重回帰分析 |
|---|---|
| この教材が使うデータ |
|
| 原論文(PDF) | 体力が基礎学力に与える影響について 総務大臣賞/太佐 美結(フェリス女学院高等学校) |
▶ ここに書いてある分析は、ページ下部の「🐍 ブラウザで動かす」でそのまま実行できます(インストール不要)。動かしているのは code/2022_H1_daijin.py(364 行)そのものです。
このページで実際に手を動かして再現できるのは図5・図6です(SSDSE-Bにある変数のみ)。図1〜図4は、原論文が使った学力調査・体力テストのデータが当プロジェクトのSSDSEに収録されていないため、原論文の報告値を転記して可視化したもの(再計算ではない)です。コードの編集は不要です。
data/raw/ フォルダに入れます。html/figures/ に自動保存されます。
小学5年生と中学2年生を対象とした「全国体力・運動能力、運動習慣等調査」(体力テスト)の結果は、平成30年までは緩やかな増加傾向だったが、平成30年以降は急激に減少している。一方、小学6年生と中学3年生を対象とした「全国学力・学習状況調査」(学力調査)は、同一の指導要領で授業が行われているにもかかわらず、都道府県ごとに各科目の正答率に大きな差が見られる。
学力の地域差には、学校での授業サポートや家庭の経済環境が影響すると指摘されている。これに加えて小中学生の体力と学力の関係を見つけることができれば、学力の地域差を縮める一助になるかもしれない——これが本研究の着眼である。先行研究(生駒)は「所得の影響を除いても、体力は学力に対して正の統計的予測力を持つ」と論じたが、体力の総合得点を用いており「体力のどの力が効くか」までは踏み込めていなかった。そこで著者は、個別の体力テストの点数から背後の体力因子を抽出して学力への影響を分析した。
高校生の部 学力調査・体力テスト・SSDSE・e-Stat 因子分析(主成分法・プロマックス回転) 重回帰・交互作用 媒介分析(ブートストラップ)
研究に影響を与えそうな要因を「体力」および「体力以外」の観点からロジックツリーで整理し(原論文 図4)、以下のデータを用いた。因子分析では、数値が小さいほど良い変数(待機児童数など)は符号を反転している。
| 区分 | 内容 | 出典(原論文) |
|---|---|---|
| 学力データ | 令和4年度 全国学力・学習状況調査(都道府県別・公立学校の平均正答率)。国語・算数/数学を問題内容別・形式別・評価の観点別に細分 | SSDSE-C・e-Stat(2022) |
| 体力データ | 令和3年度 全国体力・運動能力、運動習慣等調査。握力・上体起こし・長座体前屈・反復横跳び・20mシャトルラン・50m走・立ち幅跳び・ソフトボール投げ等の種目別点数(男女別) | スポーツ庁・SSDSE-D・e-Stat(2021) |
| 体力以外 | 1人あたり公立小/中学校費、教員1人あたり児童・生徒数、離婚件数、母子または父子世帯割合、図書館数、社会体育施設数、体育館数、年間収入、生活保護被保護実世帯数、持ち家比率など | SSDSE-B/D・e-Stat |
| 対象 | 47都道府県(体力=小5・中2/学力=小6・中3で母集団をほぼ一致) | — |
分析はEXCEL上の統計分析ソフト HAD で行われた。手順は3ステップである。
因子分析は、多数の観測変数の背後にある少数の潜在的な因子を取り出す手法。因子数は固有値1以上、抽出法は主成分法、回転法は因子間の相関を許すプロマックス回転(斜交回転)を用いた(原論文 表3)。結果、次の因子が得られた。
| 種類 | 抽出された因子(累積寄与率) |
|---|---|
| 学力因子 | 小学生国語=思考的国語力/知識的国語力の2因子(累積寄与率 88%)。小学生算数・中学生の国語/数学は1因子 |
| 体力因子 | 持久力/柔軟性と筋力/スピード力/瞬発力の4因子(累積寄与率 小学生87%・中学生81%) |
| 体力以外 | 行政支援/家庭環境/学習環境の3因子 |
学力因子を目的変数、体力因子+体力以外の因子を説明変数として、重回帰分析を強制投入法で行う。影響の大きさは標準化係数(β)で比較する(図1・図2)。
重回帰が妥当でない箇所では、説明変数どうしの交互作用(掛け算の項)や媒介変数を検討する。中学生では瞬発力×家庭環境の交互作用を(図3)、小学生では家庭環境→体力因子→学力の媒介を(図4)調べた。
因子分析で得た小学生の学力因子(思考的国語力・知識的国語力・算数)を目的変数に、体力因子と体力以外の因子を説明変数にした重回帰の標準化係数を示す。これは再計算ではなく、原論文 表7 の報告値をそのまま可視化したものである。
=== [1] 小学生 重回帰 標準化係数(表7・原論文の報告値, 再計算ではない)===
説明変数 思考的国語力 知識的国語力 算数
持久力 0.321 0.851 0.314
柔軟性と筋力 0.074 -0.195 0.015
スピード力 0.263 0.136 0.493
瞬発力 -0.169 -0.034 -0.055
行政支援 -0.263 0.239 0.121
家庭環境 0.154 -0.213 -0.054
学習環境(逆符号) 0.293 0.247 0.358
** = 1%有意 / + = 10%有意(原論文の表記)
思考的国語力: R2=0.470 AdjR2=0.375 p=0.000
知識的国語力: R2=0.594 AdjR2=0.522 p=0.000
算数: R2=0.422 AdjR2=0.318 p=0.002
★注目: 知識的国語力←持久力 0.851**、算数←スピード力 0.493** が有意
同じ重回帰を中学生(国語・数学)で行った結果。小学生と対照的に、体力因子はどれも有意でなく、「家庭環境」だけが強く効く。原論文 表7(中学生)の報告値の可視化である。
=== [2] 中学生 重回帰 標準化係数(表7・原論文の報告値, 再計算ではない)=== 説明変数 国語 数学 瞬発力 -0.001 0.030 柔軟性と筋力 0.096 -0.050 持久力 0.035 -0.005 スピード力 0.043 -0.035 行政支援 0.009 -0.033 家庭環境 0.581 0.648 学習環境 0.050 0.115 国語: R2=0.367 AdjR2=0.253 p=0.008 数学: R2=0.451 AdjR2=0.352 p=0.001 ★中学生では「家庭環境」のみが 1%有意(国語0.581**, 数学0.648**)。体力因子は非有意
中学生で「家庭環境だけが効く」のを受け、著者は瞬発力×家庭環境の交互作用項を追加した。原論文 表8 の報告値の可視化である。
=== [3] 中学生 交互作用モデル(表8・原論文の報告値, 再計算ではない)===
説明変数 国語 数学
瞬発力 0.181 0.187
柔軟性と筋力 -0.007 -0.139
持久力 0.009 -0.028
スピード力 -0.042 -0.043
行政支援 -0.159 -0.361
家庭環境 0.379 0.472
学習環境 -0.032 0.044
瞬発力×家庭環境 0.431 0.374
国語: R2=0.468 AdjR2=0.356 p=0.001
数学: R2=0.527 AdjR2=0.427 p=0.000
★瞬発力×家庭環境が5%有意(国語0.431*, 数学0.374*)。表7より自由度調整済R²が向上
小学生では体力が学力に直接効く一方、家庭環境は直接には効きにくかった。そこで著者は「家庭環境は体力を通じて学力に効くのでは」と考え、体力因子を媒介変数とした媒介分析(ブートストラップ)を行った。原論文 図9 の報告値の可視化である。
=== [4] 小学生 媒介分析(図9・原論文の報告値, 再計算ではない)=== [知識的国語力] 家庭環境→持久力=0.35*, 持久力→知識的国語力=0.76**, 直接効果 0.15→-0.12 間接効果(Bootstrap): 係数=0.266, 標準化=0.266, SE=0.107, Z=2.481, p=0.013 [算数] 家庭環境→スピード力=0.41**, スピード力→算数=0.49**, 直接効果 0.29→0.09 間接効果(Bootstrap): 係数=0.393, 標準化=0.2, SE=0.187, Z=2.098, p=0.036 ★家庭環境から持久力/スピード力を媒介した間接効果が5%有意(p=0.013 / p=0.036)
図1〜図4は原論文の報告値でした。ここからは実際に手を動かせる部分です。原論文の学力・体力データはSSDSEにありませんが、「体力以外の因子」に使われた離婚件数・教員数・児童生徒数はSSDSE-Bに収録されています。まず読み込みます。
header=1(1行目は変数コード、2行目が日本語名)で読み込み、体力調査と同じ令和3年度(2021)の47都道府県を残す。地域ブロックの色分けも用意する。261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 | df = pd.read_csv(DATA_B, encoding='cp932', header=1) df['年度'] = df['年度'].astype(int) d = df[df['年度'] == 2021].copy() # 令和3年度(体力調査と同年) region = { '北海道': '北海道・東北', '青森県': '北海道・東北', '岩手県': '北海道・東北', '宮城県': '北海道・東北', '秋田県': '北海道・東北', '山形県': '北海道・東北', '福島県': '北海道・東北', '茨城県': '関東', '栃木県': '関東', '群馬県': '関東', '埼玉県': '関東', '千葉県': '関東', '東京都': '関東', '神奈川県': '関東', '新潟県': '中部', '富山県': '中部', '石川県': '中部', '福井県': '中部', '山梨県': '中部', '長野県': '中部', '岐阜県': '中部', '静岡県': '中部', '愛知県': '中部', '三重県': '近畿', '滋賀県': '近畿', '京都府': '近畿', '大阪府': '近畿', '兵庫県': '近畿', '奈良県': '近畿', '和歌山県': '近畿', '鳥取県': '中国・四国', '島根県': '中国・四国', '岡山県': '中国・四国', '広島県': '中国・四国', '山口県': '中国・四国', '徳島県': '中国・四国', '香川県': '中国・四国', '愛媛県': '中国・四国', '高知県': '中国・四国', '福岡県': '九州・沖縄', '佐賀県': '九州・沖縄', '長崎県': '九州・沖縄', '熊本県': '九州・沖縄', '大分県': '九州・沖縄', '宮崎県': '九州・沖縄', '鹿児島県': '九州・沖縄', '沖縄県': '九州・沖縄', } rc = {'北海道・東北': '#4e9af1', '関東': '#e05c5c', '中部': '#f0a500', '近畿': '#5cb85c', '中国・四国': '#9b59b6', '九州・沖縄': '#f39c12'} d['地域'] = d['都道府県'].map(region) |
289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 | # ===================================================================== # 原論文 3.3 と 図6 は「離婚件数」で沖縄県が外れ値だと指摘している。 # 離婚件数は SSDSE-B に収録されているので、実データで外れ値を確認する。 d['離婚率_千人'] = d['離婚件数'] / d['総人口'] * 1000 s = d[['都道府県', '離婚率_千人', '地域']].dropna().sort_values('離婚率_千人', ascending=False) z = (s['離婚率_千人'] - s['離婚率_千人'].mean()) / s['離婚率_千人'].std() s = s.assign(z=z.values) print('=== [5] 実再現:離婚件数(人口千あたり)の分布と外れ値(SSDSE-B 2021)===') print(f' 平均={s["離婚率_千人"].mean():.3f} 標準偏差={s["離婚率_千人"].std():.3f} N={len(s)}') print(' 上位5県:') print(s.head(5)[['都道府県', '離婚率_千人', 'z']].to_string(index=False)) okinawa = s[s['都道府県'] == '沖縄県'].iloc[0] print(f' → 沖縄県: 離婚率={okinawa["離婚率_千人"]:.3f}(全国1位, z={okinawa["z"]:.2f})' '。原論文が図6で指摘した外れ値を実データで確認') fig, ax = plt.subplots(figsize=(9, 5)) ax.hist(s['離婚率_千人'], bins=16, color=BLUE, alpha=0.75, edgecolor='white') ax.axvline(okinawa['離婚率_千人'], color=RED, lw=2, ls='--') ax.text(okinawa['離婚率_千人'], ax.get_ylim()[1] * 0.9, f' 沖縄県 {okinawa["離婚率_千人"]:.2f}\n (外れ値・z={okinawa["z"]:.1f})', color=RED, fontsize=10, fontweight='bold', va='top') ax.set_xlabel('離婚件数(人口千人あたり)', fontsize=11) ax.set_ylabel('都道府県の数', fontsize=11) ax.set_title('図5:離婚件数(人口千あたり)の都道府県分布【SSDSE-B 2021・実再現】\n' '原論文 図6 の「沖縄県が外れ値」を実データで確認(家庭環境因子の入力変数)', fontsize=12, fontweight='bold') ax.grid(axis='y', alpha=0.3) plt.tight_layout() plt.savefig(os.path.join(FIG_DIR, '2022_H1_fig5_repro_rikon.png'), dpi=150, bbox_inches='tight') plt.close() |
=== [5] 実再現:離婚件数(人口千あたり)の分布と外れ値(SSDSE-B 2021)=== 平均=1.445 標準偏差=0.171 N=47 上位5県: 都道府県 離婚率_千人 z 沖縄県 2.170981 4.246894 宮崎県 1.677663 1.359722 福岡県 1.671351 1.322780 北海道 1.671233 1.322091 大阪府 1.657279 1.240426 → 沖縄県: 離婚率=2.171(全国1位, z=4.25)。原論文が図6で指摘した外れ値を実データで確認
326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 | # ===================================================================== # 原論文は「教員1人あたり児童数/生徒数」を行政支援・学習環境因子の入力変数に用いた。 # SSDSE-B の学校統計から実際に計算し、都道府県のばらつきを確認する。 d['小学校_教員あたり児童数'] = d['小学校児童数'] / d['小学校教員数'] d['中学校_教員あたり生徒数'] = d['中学校生徒数'] / d['中学校教員数'] t = d[['都道府県', '小学校_教員あたり児童数', '中学校_教員あたり生徒数', '地域']].dropna() print('=== [6] 実再現:教員1人あたり児童・生徒数(SSDSE-B 2021)===') for col, lab in [('小学校_教員あたり児童数', '小学校'), ('中学校_教員あたり生徒数', '中学校')]: top = t.sort_values(col, ascending=False).iloc[0] bot = t.sort_values(col).iloc[0] print(f' {lab}: 平均={t[col].mean():.2f}人 最多={top["都道府県"]}({top[col]:.2f}) ' f' 最少={bot["都道府県"]}({bot[col]:.2f})') print(' → 教員配置(少人数教育の手厚さ)に都道府県差。原論文はこれらを' '「行政支援/学習環境」因子として集約した') fig, ax = plt.subplots(figsize=(9, 5.5)) for reg, g in t.groupby('地域'): ax.scatter(g['小学校_教員あたり児童数'], g['中学校_教員あたり生徒数'], color=rc.get(reg, GRAY), s=70, alpha=0.85, label=reg) for _, r in t.iterrows(): ax.annotate(r['都道府県'][:2], (r['小学校_教員あたり児童数'], r['中学校_教員あたり生徒数']), fontsize=7, alpha=0.7, xytext=(3, 3), textcoords='offset points') ax.set_xlabel('小学校 教員1人あたり児童数(人)', fontsize=11) ax.set_ylabel('中学校 教員1人あたり生徒数(人)', fontsize=11) ax.set_title('図6:教員1人あたり児童・生徒数【SSDSE-B 2021・実再現】\n' '原論文が行政支援/学習環境因子の入力に用いた変数を実データで可視化', fontsize=12, fontweight='bold') ax.legend(fontsize=8, ncol=2) ax.grid(alpha=0.3) plt.tight_layout() plt.savefig(os.path.join(FIG_DIR, '2022_H1_fig6_repro_teacher.png'), dpi=150, bbox_inches='tight') plt.close() |
=== [6] 実再現:教員1人あたり児童・生徒数(SSDSE-B 2021)=== 小学校: 平均=13.68人 最多=埼玉県(17.39) 最少=高知県(10.65) 中学校: 平均=12.12人 最多=東京都(15.41) 最少=高知県(8.38) → 教員配置(少人数教育の手厚さ)に都道府県差。原論文はこれらを「行政支援/学習環境」因子として集約した
持久力が知識的国語力に1%有意。著者は「持久力は身体が苦しい状況下で運動を継続する力であり、暗記を要する知識にも粘り強く考える思考力が求められる」と考え、筑波大学・征矢の「持久力の高さは記憶力向上(海馬)に関係する」研究と重ねて解釈した。スピード力は算数に1%有意で、幼少期〜小学生時代の運動神経を形成するゴールデンエイジで鬼ごっこや公園を駆けまわりスピードがついた児童ほど、素早い計算処理・論理組み立て能力が形成されるのでは、と考察している。
中学生では家庭環境が1%有意。さらに瞬発力×家庭環境の交互作用が5%有意で、家庭環境が平均以上の都道府県では瞬発力が高い方が正答率も高くなる。体力要因は、家庭環境が整った上で学力に良い効果をもたらすのではないか、と著者は考えた。中学生になると学習量が増え、家庭の環境によっては家庭内でこなしきれず差が出ている可能性を指摘している。
中学生の国語・数学で同率4位の徳島県は、家庭環境の因子得点が平均以下・体力因子もすべて平均以下だが、行政支援の得点はトップ10に入る。徳島県は「学力向上フォーラム」など学校・家庭・地域が連携した取り組みを行っており、こうした取り組みが家庭環境因子を超える影響力を持つのではないか、と考察した。
本研究は、従来の研究が用いた体力テストの総合得点ではなく、個別種目から抽出した体力因子で学力への影響を分析した点に価値がある。小学生では持久力の強化が知識的国語力に、スピード力の強化が算数につながる可能性を示し、中学生では家庭環境の影響が大きいながらも、家庭環境と瞬発力が合わさることで基礎学力の向上が見込まれることに言及した。以上から、小中学生の運動意欲の向上・運動の動機付けを提案できたと結論づけている。
このページの図5・図6(離婚件数の外れ値・教員1人あたり児童生徒数)は、以下から実際に再現できます。
🐍 再現コード(.py) 📊 SSDSE-B-2026.csv
※ 図1〜図4(因子分析・重回帰・交互作用・媒介分析)は、原論文が使った学力調査・体力テストのデータが当プロジェクトのSSDSEに収録されていないため、原論文の報告値を可視化したもの(再計算ではない)です。図5・図6は実データでの再計算ですが、原論文の因子得点そのものではなく入力変数の分布・外れ値の確認です。新しい統計量の捏造は一切行っていません。
この研究を読むとき・まねするときに陥りやすい誤解を整理する。
クリックすると各用語の詳しい解説ページに移動できます。
この研究で使われている手法を、手を動かす順に説明する。
この研究の「都道府県単位で関連は見えたが個人・因果は不明」という結論は、次の研究の出発点になる。
再現コード(図5・図6)を少し変えるだけで試せる課題を、易しい順に用意した。
d = df[df['年度'] == 2021] を 2019 や 2022 に変えて、離婚件数の外れ値(沖縄県)が年によらず現れるか確かめよう。scipy.stats.pearsonr で計算しよう。家庭環境と学習環境の代理変数は関連するか?factor_analyzer を入れ、SSDSE-Bの離婚件数・婚姻件数・教育費・教員配置など複数変数で FactorAnalyzer を回し、原論文のように「家庭環境/学習環境」に相当する因子が現れるか試そう。pip install factor_analyzer。学力・体力データは無いので、あくまで「体力以外の因子」の再現体験になる。「多数の指標を少数の因子にまとめ、影響を回帰で推定する」発想は、現場でも広く使われている。
この研究を読んで浮かびやすい疑問に答える。
この論文を理解できたか、クリックで確認しましょう。間違えても解説が出ます。
このページの分析は、この画面の中でそのまま実行できます。
Python をインストールする必要も、CSV をダウンロードする必要もありません。
下のセルの 「▶ ブラウザで実行」 を上から順に押すか、
「▶ 最初から全部実行」 で一気に流してください。
表示されるのは、本文の図表とまったく同じ計算の結果です
(動かしているのは再現スクリプト code/2022_H1_daijin.py そのもの)。
コードは書き換えられます。「✏️ 書き換える」で数字や変数を変えて ▶ を押すと、 結果がどう変わるかをその場で確かめられます(元に戻すボタンつき)。 ページを開いた時点で裏で実行環境の準備が始まっているので、待ち時間はほとんどありません。 初回だけ実行環境の取得にインターネット接続が必要です。