第7章(標準誤差の推定)、第8章(PVs)、第9章(習熟度)に引き続き、PISA Data Analysis Manual SPSS 2nd Editionの分析を、Rで再現してみます。
今回は、学校の変数を扱う第10章です。
注意すること
PISAが調査対象とするのは、15歳の(学校に在籍している)子どもである。これは、調査対象が同一学年に在籍しているとは限らないということを意味する。
この理由には、主に
- 15歳までに、子どもが留年する割合が高い
- 留年制度がない場合でも、調査時点で15歳児が複数の学年に在籍している。多くの国で、15歳児はISCED 2(前期中等教育)とISCED 3(後期中等教育)に分かれて在籍している。
というものがある。
日本では、PISAの調査対象は100%が高1である。しかし、これは参加国の中ではかなり珍しいパターンであり、ほとんどの国は複数の学年が調査対象になっている。
それはともかく、PISAの調査対象は特定の年齢(15歳児)であり、特定の学年ではないということに注意しなければならない。
PISAの標本抽出では、15歳児が在籍していない学校は、そもそも抽出の対象にならない。つまり、同じ学校段階(ISCED 2)だったとしても、15歳児が在籍していれば抽出対象になるし、15歳児が在籍していなければ抽出対象にはならない。
その意味では、PISAを学校中心の視点で解釈することは誤った結論をもたらすかもしれない。PISAを分析する際は、あくまでも生徒データを中心に行う(≒学校データは生徒データに結合して分析する)必要がある。
学校データを生徒データに結合する
ここでは、PISA2006のドイツ(DEU)を対象に、学校データと生徒データを結合することを考える。
まず、ドイツの生徒・学校データは、spss.pyを使うことで取り出すことができる。
# PISA2006ドイツの生徒データを作成。ファイルは2006DEU.csvで作成される。 python spss.py INT_Stu06_SPSS_Dec07.sps INT_Stu06_Dec07.txt DEU 2006 # PISA2006ドイツの学校データを作成。ファイルは2006schDEU.csvで作成される。 python spss.py INT_Sch06_SPSS_Dec07.sps INT_Sch06_Dec07.txt DEU 2006sch
次に、R上で、これらのファイルを結合する。Rの場合、merge関数を使うのがかんたんである。
deu_stu <- read.csv("2006DEU.csv") deu_sch <- read.csv("2006schDEU.csv") # merge関数で結合する deu2006 <- merge(deu_stu, deu_sch, by=c("SUBNATIO", "SCHOOLID", "CNT", "COUNTRY", "OECD", "STRATUM"))
学校の変数を扱う
ここでは、学校の場所(School Location: SC07Q01)について考えてみよう。例によって、intsvy packageで分析する。
library(intsvy) # 欠損値をNAにする。 deu2006$SC07Q01[deu2006$SC07Q01 > 6] <- NA # 度数分布。あくまで生徒を中心に解釈すること。Table 10.2 pisa.table("SC07Q01", data=deu2006) # 成績の差。こちらもあくまで生徒が中心。Table 10.3 pisa.mean.pv(pvlabel="SCIE", by="SC07Q01", data=deu2006)
いずれもSPSSやSASによる出力を一致している。