日々の記録簿

日々のできごとの記録

TIMSS

TIMSSで教員データを使うとサンプルサイズが増えるのはなぜなのか?

投稿日:

11月ころにコメントで質問をいただいていたようで、その解説です。これだけ間が空くと、質問者は既に解決済みかもしれませんが・・・。

TIMSSで教員データを使うとサンプルサイズが増える?!

TIMSSで教員データを使わない場合と使う場合では、データのサンプルサイズが変わる(ように見える)。以前の記事を参考に、教員データを使わない場合(jpn)と使う場合(jpn2)のサンプルサイズを比較してみよう。

library(foreign)
library(plyr)
library(intsvy)

# 教員データを使わない場合
jpfile <- c("ASGJPNM6.sav", "ASHJPNM6.sav", "ACGJPNM6.sav")
dat <- lapply(jpfile, function(x) {
  read.spss(x, to.data.frame = TRUE, use.value.labels = FALSE)
})
jpn <- join_all(dat); rm(dat)

# 教員データを使う場合
jpfile2 <- c(jpfile, "ASTJPNM6.sav", "ATGJPNM6.sav")
dat2 <- lapply(jpfile2, function(x) {
  read.spss(x, to.data.frame = TRUE, use.value.labels = FALSE)
})
jpn2 <- join_all(dat2); rm(dat2)

# サンプルサイズを比べる
nrow(jpn) # 4383
nrow(jpn2) # 8596

前者は4383/後者は8596であり、およそ倍になっている。これはどうしたことか。

これは、TIMSSの設計に関係がある。TIMSSは(ほとんどの国で)まず学校を抽出し、続いて学級を抽出する二段階抽出を採用している。そして教員データについては、「対象となった児童生徒を教えている教員」が調査対象になっている。つまり、一人の児童生徒に対して、複数の教員が調査対象になっている可能性があるということだ。

そのため、教員データを利用した分析では、「複数の教員に同一の児童生徒を結びつける必要がある(児童aを、教員Aと教員Bが教えている場合、児童aのデータは教員Aにも教員Bにも結びつけないといけない)」ことになる。

先のデータ(jpnとjpn2)で、このことを確認してみよう。学校番号148に属する児童のIDを表示してみる。

table(jpn$IDSTUD[jpn$IDSCHOOL == 148])
table(jpn2$IDSTUD[jpn2$IDSCHOOL == 148])

ここでわかるのは、jpnでは1人ずつだった児童のIDが、jpn2では3人になっているということである。恐らくこの学校では、3人の教員が児童に算数を教えていたのだろう。

以上が、教員データを利用するとサンプルサイズが増加するように見える理由である。

分析時の注意点

では、分析時にどのようなことに注意すればよいのだろうか。重要なことは、教員データを使うとデータセット内に同一の児童生徒のデータが複数存在することになるから、そのまま分析すると推定を間違えるという点だろう。たとえば、intsvy library中のtimss.mean.pv関数を使ってみよう。

timss.mean.pv(pvlabel = "ASSSCI", data = jpn)
timss.mean.pv(pvlabel = "ASSSCI", data = jpn2)

2つの推定は結果が異なっているはずである(正しいのはjpnの方)。

上記の問題に対処するために、教員データを利用するときは、それ専用のweight(TCHWGT、MATWGT、SCIWGT)を使わなければならない(それぞれ教員、数学、理科のweightのようである。詳しいことはTechnical Reportに書いてあると思うが、時間がなくて読めていない。とりあえず以下の計算は、いずれを使っても同じ値になる)。

intsvy libraryを利用する場合は、intsvy.mean.pv関数を使えばよい。ちなみに、timss.mean.pvやpisa.mean.pvは、intsvy.mean.pv関数のconfigをtimss用/pisa用にあらかじめ設定した関数である(このことは、Rで、たんにtimss.mean.pvとだけ打てばわかる)。そのため、TOTWGTではなく、TCHWGT等を使うようにconfigを設定すれば、正しい推定値が計算できるようになる。

timss4_conf$variables$weight <- "SCIWGT" # configの設定。初期値は"TOTWGT"なので"SCIWGT"で上書きする。
intsvy.mean.pv(pvnames = paste0("ASSSCI0", 1:5),
  data = jpn2, config = timss4_conf)

スポンサーリンク

スポンサーリンク

-TIMSS

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

TIMSS報告書で標準誤差はどのように計算されているのか?

TIMSS報告書の標準誤差(PVsを使った場合)は、正規の式による計算ではなく、ショートカット計算になっています。 TIMSSを使った分析をしていて、報告書と数値が合わない・・・となった方の参考になる …

TIMSS2011から公立中学校と国・私立中学校の成績差を見てみる

タイトルのとおりですが、TIMSS2011を利用して、国・私立中学校と公立中学校の成績差を見てみます。 とりあえず、平均点の差を検討する TIMSS2011の学校質問紙や生徒質問紙では、生徒が通ってい …

RによるTIMSS2011の分析

RによるTIMSS2011の分析方法です。 データの読み込み SPSSデータを読み込むために、foreign packageを読み込みます。 また、RによるTIMSSの分析を可能にするため、intsv …

TIMSS2015の分析方法とintsvyの使い方

RでPISAやTIMSSを分析するためのintsvy packageの使い方が大きく変わっていたので、その紹介。本当はだいぶ前に変わっていたのだと思うが、気づいていなかった・・・。 データの読込 ここ …

TIMSS2011のTechnical Report

TIMSS2011のTechnical Reportに関するまとめです。量が多いので、要点のみ箇条書きしています。 全文は、Methods and Procedures in TIMSS and PI …