地域の大人に勉強を教えてもらうと成績が下がる?

平成30年度 全国学力・学習状況調査 調査結果資料 【全国版/中学校】の下の方にある相関係数(生徒質問紙-教科)全国【表】というExcelファイルには,生徒へのいろいろな質問事項と各科目の正答率との相関係数が載っている。ほとんどの事項については,相関は正で,積極的な回答をする生徒ほど成績が良い。しかし,よく見ると,24「地域の大人(学校や塾・習い事の先生を除く)に勉強やスポーツを教えてもらったり,一緒に遊んだりすることがありますか」という質問事項だけ,どの科目との相関係数も負である。相関係数の絶対値は大きくない(国語A: -0.136,国語B: -0.124,数学A: -0.101,数学B: -0.111,理科: -0.107)が,人数が百万のオーダーなので,統計的には非常に有意である。より詳しくは,同じところからリンクされているクロス集計表(生徒質問紙-教科)全国【表】の「質問024」シートで調べられる。

なぜだろう?

ツイッターでは「単に都市部ほど成績が良く、都市部ほど「学校や塾、習い事の先生以外の大人」と接する機会がないということでは?」,「成績が良くない子を地域でサポートすることがたまにあるので少し負の相関が出たのかも」といったご意見をいただいた。

この質問はダブルバーレルではないかという指摘もいただいた。勉強・スポーツ・遊びをまとめて聞いているので,トリプルバーレルかもしれない。

同じことを,都道府県ごとの回答集計値から計算してみよう。

全国学力テストの都道府県別正答率(2018年版)で説明した方法を使う。このページからリンクされている都道府県ごとの「回答結果集計[生徒質問紙]」というExcelファイルをすべてダウンロードし,その上位ディレクトリで次のようにする:

names = dir(pattern="^\\d\\dm_18a.xlsx$", full.names=TRUE, recursive=TRUE)
library(readxl)
f = function(n) unlist(read_excel(n, 1, col_names=FALSE, range="C81:N81"))
x = sapply(names, f)  # x[1,1:47]をざっと見て項目のズレがないことを確認
y = sapply(1:47, function(i) sum(as.numeric(x[9:12,i])*(4:1))/sum(as.numeric(x[9:12,i])))
a = read.csv("https://oku.edu.mie-u.ac.jp/~okumura/stat/data/atest2018.csv", fileEncoding="UTF-8")
cor(y, a$中国A)  # -0.02080954
cor(y, a$中国B)  #  0.02718476
cor(y, a$中数A)  # -0.1501752
cor(y, a$中数B)  # -0.1497885
cor(y, a$中理)   #  0.0729672

数学は負の相関だが,国語はほぼ無相関,理科は少し正の相関がある。もっとも,サンプルサイズが47であることを考えれば,これらはどれも統計的に有意でない。

念のため,もっと強い相関がある項目も調べてみる。29「数学の授業の内容はよく分かりますか」は明らかに数学の正答率と相関がある(数学A: 0.438,数学B: 0.400)。都道府県レベルでは

f = function(n) unlist(read_excel(n, 1, col_names=FALSE, range="C96:N96"))
x = sapply(names, f)  # x[1,1:47]をざっと見て項目のズレがないことを確認
y = sapply(1:47, function(i) sum(as.numeric(x[9:12,i])*(4:1))/sum(as.numeric(x[9:12,i])))
cor(y, a$中数A)  # 0.4382923
cor(y, a$中数B)  # 0.4480176

これらは都道府県レベルでも統計的に有意である(p = 0.002 程度)。

都道府県レベルの結果と個人レベルの結果をごっちゃにすることを Ecological Fallacy(生態学的誤謬)と呼ぶことを先日教えていただいた。これについては,このページがわかりやすい。ここにある図の右下はWikipediaの Simpson's paradox の最初の図と同じ形であるので,これはSimpsonのパラドックスの一種といってもよいかもしれない。同様な話はPIAACデータ解析でも書いた。