RでTIMSSを分析するときは、intsvy packageが便利です。ただ、簡単すぎて内部で何をやっているのかわからない/可能な分析方法が少なく応用が効かないというデメリットもあります。
そこで今回は、survey packageを使って、TIMSSを分析することを考えます。
Replicate Weightの生成
TIMSSのデータセットには、Replicate Weightが存在しない。そのため、分析者が各自で生成する必要がある。
ここでは、TIMSS 2011の日本のデータを例に、Replicate Weightを生成する方法を考える。
TIMSSのReplicate Weightの生成ルールは、次の通り。
- Replicate Weightは75個生成する
- i個目のReplicate Weightは、JKZONEがiの標本について、JKREPが1ならば当該標本のWeightを2倍にし、これをReplicate Weightとする。同じくJKZONEがiの標本について、JKREPが0ならば当該標本のReplicate Weightは0となる。JKZONEがi以外の標本については、当該標本のWeightがReplicate Weightとなる
# 必要なlibraryの読込 library(foreign) library(survey) # 日本のデータを読み込み jp11 <- read.spss("asgjpnm5.sav", use.value.labels=F, to.data.frame=T) # replicate weightの生成 # TOTWGTを例にする W <- data.frame(sapply(1:75, function(i){ ifelse(jp11[["JKZONE"]] == i, 2 * jp11[["TOTWGT"]] * jp11[["JKREP"]], jp11[["TOTWGT"]]) } ) ) # データセットの結合 jp11 <- cbind(jp11, W)
survey designの指定
続いて、survey designを指定し、分析を実行する。
jp <- svrepdesign(data=jp11, repweights="X[0-9]", weights=~TOTWGT, combined.weights=TRUE, type="JK1", mse=TRUE, scale=1, rscales=1 ) # 分析の実行 svymean(jp11$ASBG04, design=jp, na.rm=T) svymean(jp11$ASMMAT01, design=jp) svyglm(ASMMAT01 ~ ITSEX + ASBG04, design=jp)
基本的な分析方法は以上。なお、survey packageでは、PVsの計算は行えないので、5つのPVを統合する作業は、分析者が行う必要がある。