第7章(標準誤差の推定)、第8章(PVs)に引き続き、PISA Data Analysis Manual SPSS 2nd Editionの分析を、Rで再現してみます。
今回は、習熟度(Proficiency Levels)に関わる第9章を扱います。
習熟度
PISAの読解・数学・科学の成績は、OECD参加国の平均を500、標準偏差を100とする数値になっている(※注 これは、起点となる2000年読解・2003年数学・2006年科学のスコアの算出方法のことである。以降のPISAの点数は、起点となるPISAのスコアをもとに調整されているため、OECD平均500・標準偏差100にはなっていない)。
このスコアをよりわかりやすい形で示すため、PISAでは習熟度(Proficiency Levels)を定義している。この値は、PVsから得ることができる。
具体的に、PISA2006の科学リテラシーを考えてみよう。習熟度の分割点は、334.94, 409.54, 484.14, 558.73, 633.33, 707.93の6つである。これを5つのPVsのそれぞれに適用し、第7章で示した方法で合成したものが習熟度となる。
具体的な方法は以下の通り。ここでは、PISA2006のドイツ(DEU)の科学リテラシーをもとに習熟度を計算することを考える。
deu2006 <- read.csv("2006DEU.csv") library(intsvy) # cut関数でPV1からPV5を習熟度に変換する deu2006$PS1 <- cut(deu2006$PV1SCIE, breaks=c(0, 334.94, 409.54, 484.14, 558.73, 633.33, 707.93, 9999), labels=c("Level 0", "Level 1", "Level 2", "Level 3", "Level 4", "Level 5", "Level 6")) deu2006$PS2 <- cut(deu2006$PV2SCIE, breaks=c(0, 334.94, 409.54, 484.14, 558.73, 633.33, 707.93, 9999), labels=c("Level 0", "Level 1", "Level 2", "Level 3", "Level 4", "Level 5", "Level 6")) deu2006$PS3 <- cut(deu2006$PV3SCIE, breaks=c(0, 334.94, 409.54, 484.14, 558.73, 633.33, 707.93, 9999), labels=c("Level 0", "Level 1", "Level 2", "Level 3", "Level 4", "Level 5", "Level 6")) deu2006$PS4 <- cut(deu2006$PV4SCIE, breaks=c(0, 334.94, 409.54, 484.14, 558.73, 633.33, 707.93, 9999), labels=c("Level 0", "Level 1", "Level 2", "Level 3", "Level 4", "Level 5", "Level 6")) deu2006$PS5 <- cut(deu2006$PV5SCIE, breaks=c(0, 334.94, 409.54, 484.14, 558.73, 633.33, 707.93, 9999), labels=c("Level 0", "Level 1", "Level 2", "Level 3", "Level 4", "Level 5", "Level 6")) # pisa.table関数を使う pv1 <- pisa.table("PS1", data=deu2006) pv2 <- pisa.table("PS2", data=deu2006) pv3 <- pisa.table("PS3", data=deu2006) pv4 <- pisa.table("PS4", data=deu2006) pv5 <- pisa.table("PS5", data=deu2006) # 最終的な推定値は、PV1からPV5の推定値の平均になる。 m <- (pv1[,3]+pv2[,3]+pv3[,3]+pv4[,3]+pv5[,3]) / 5 # 標準誤差の計算。まず、PV1からPV5の標準誤差の2乗の平均を計算する。 u <- (pv1[,4]^2 + pv2[,4]^2 + pv3[,4]^2 + pv4[,4]^2 + pv5[,4]^2) / 5 # imputation varianceの計算。 t <- ((pv1[,3]-m)^2 + (pv2[,3]-m)^2 + (pv3[,3]-m)^2 + (pv4[,3]-m)^2 + (pv5[,3]-m)^2) / 4 # 最終的な分散は、u + 1.2 * t になる。最終的な標準誤差は、sqrt(e) e <- u + 1.2 * t # 推定値の表示 ans <- round(cbind(m, sqrt(e)), 2) colnames(ans) <- c("Percentage", "S.E") rownames(ans) <- c("Level 1 未満", "Level 1", "Level 2", "Level 3", "Level 4", "Level 5", "Level 6") ans
これまでと同じく、intsvy package内にある、pisa.ben.pvを使えば1行で書ける。
pisa.ben.pv(pvlabel="SCIE", cutoff=c(334.94, 409.54, 484.14, 558.73, 633.33, 707.93), data=deu2006) # 男女(ST04Q01)別。Table 9.5に対応する pisa.ben.pv(pvlabel="SCIE", cutoff=c(334.94, 409.54, 484.14, 558.73, 633.33, 707.93), by="ST04Q01", data=deu2006)
なお、読解・数学・科学の各リテラシー領域における、習熟度の分割点は、以下のようになる。
# 例として2012年の日本(2012JPN.csv)を使うが、他のサイクル・他の国でも構わない jpn2012 <- read.csv("2012JPN.csv") library(intsvy) # 読解(2000〜2006の規準) pisa.ben.pv(pvlabel="READ", cutoff=c(334.75, 407.47, 480.18, 552.89, 625.61), data=jpn2012) # 読解(2009以降の規準) pisa.ben.pv(pvlabel="READ", cutoff=c(262.04, 334.75, 407.47, 480.18, 552.89, 625.61, 698.32), data=jpn2012) # 数学 pisa.ben.pv(pvlabel="MATH", cutoff=c(357.77, 420.07, 482.38, 544.68, 606.99, 669.30), data=jpn2012) # 科学 pisa.ben.pv(pvlabel="SCIE", cutoff=c(334.94, 409.54, 484.14, 558.73, 633.33, 707.93), data=jpn2012)
読解(Reading Literacy)は、PISA2000から2006までは分割点が5つであり、習熟度はレベル1未満からレベル5までの6段階だった。
それが、PISA2009でレベル6が追加され、さらにレベル1がレベル1a・レベル1bに分割されたことにより、レベル1b未満からレベル6までの8段階になっている。
数学と科学の習熟度はレベル1未満からレベル6までの7段階である。