RによるTIMSS2011の分析方法(その2)です。今回は、学校・教員ファイルを使った分析を行います。
データの読み込み
RによるTIMSSの分析を可能にするため、例によってintsvy packageを利用する。
ここでは、日本のTIMSS2011を例にとる。分析に使用するデータは、asgjpm5.sav(児童質問紙), acgjpm5.sav(学校質問紙), astjpnm5.sav(児童・教員リンクファイル), atgjpnm5.sav(教員質問紙)である。
# intsvy packageを使うと、read.spss関数は使用可能になるため、library(foreign)は不要。 library(intsvy) library(car) # 後の分析で使う jp11stu <- read.spss("asgjpnm5.sav", use.value.labels=F, to.data.frame=T, use.missing=T) jp11sch <- read.spss("acgjpnm5.sav", use.value.labels=F, to.data.frame=T, use.missing=T) jp11lin <- read.spss("astjpnm5.sav", use.value.labels=F, to.data.frame=T, use.missing=T) jp11tea <- read.spss("atgjpnm5.sav", use.value.labels=F, to.data.frame=T, use.missing=T)
データの結合
TIMSSは、基本的には、学校/教室という2段階抽出法を利用している。注意が必要なのは、TIMSSの教員質問紙は「調査対象となった児童・生徒に算数(数学)・理科を教えている教員」が対象になっているという点である。
第一の注意点は、TIMSSでは教員が無作為に抽出されていないという点である。教員質問紙は、常に児童・生徒を中心に解釈しなければならない。
TIMSSでは、「第4学年の教員のうち、教員経験20年以上の教員が○割である」という分析はできない。できるのは、「教員経験20年以上の教員に教えられている第4学年の児童の割合は、第4学年の児童のうち○割である」という分析である。
第二の注意点は、必ずしも児童・学級と教員が1対1で対応しているわけではないという点である。複数の教員が同一のクラスを教えている場合、1学級に複数の教員が対応するケースがある。
TIMSSでは、児童(生徒)・教員リンクファイルと、教員weightを使うことで、このことを再現している。教員質問紙を使って分析を行う場合は、必ず教員weight(TCHWGT, MATWGT, SCIWGT)のいずれかを使用しなければならない。intsvyのデフォルトは、児童・生徒weight(TOTWGT)なので、分析時には注意が必要である。
以下では、学校質問紙を使う場合のデータ結合(jp11SCH)、児童・教員・学校質問紙を使う場合のデータ結合(jp11TEA)、教員質問紙を使う場合のデータ結合(jp11TEA2)の三種類の結合方法を示す。
教員質問紙のみに興味があるというケースは少ないと思うので、現実的には、jp11SCHかjp11TEAのいずれかを使用することになるだろう。
# 児童・学校質問紙を利用する場合 jp11SCH <- merge(jp11stu, jp11sch, by=c("IDCNTRY", "IDSCHOOL", "IDGRADE","IDPOP", "IDGRADER","IDSTRATE","IDSTRATI","WGTADJ1", "WGTFAC1","DPCDATE")) # 児童・教員・学校質問紙を利用する場合 jp11LIN <- merge(jp11stu, jp11lin, by=c("IDCNTRY", "IDBOOK","IDSCHOOL","IDCLASS","IDSTUD", "IDGRADE","IDPOP","IDGRADER","IDSTRATE","IDSTRATI", "TOTWGT","JKZONE","JKREP", "ASMMAT01","ASMMAT02","ASMMAT03","ASMMAT04","ASMMAT05", "ASSSCI01","ASSSCI02","ASSSCI03","ASSSCI04","ASSSCI05", "ASMDAT01","ASMDAT02","ASMDAT03","ASMDAT04","ASMDAT05", "ASMGEO01","ASMGEO02","ASMGEO03","ASMGEO04","ASMGEO05", "ASMNUM01","ASMNUM02","ASMNUM03","ASMNUM04","ASMNUM05", "ASSEAR01","ASSEAR02","ASSEAR03","ASSEAR04","ASSEAR05", "ASSLIF01","ASSLIF02","ASSLIF03","ASSLIF04","ASSLIF05", "ASSPHY01","ASSPHY02","ASSPHY03","ASSPHY04","ASSPHY05", "ASMKNO01","ASMKNO02","ASMKNO03","ASMKNO04","ASMKNO05", "ASMAPP01","ASMAPP02","ASMAPP03","ASMAPP04","ASMAPP05", "ASMREA01","ASMREA02","ASMREA03","ASMREA04","ASMREA05", "ASSKNO01","ASSKNO02","ASSKNO03","ASSKNO04","ASSKNO05", "ASSAPP01","ASSAPP02","ASSAPP03","ASSAPP04","ASSAPP05", "ASSREA01","ASSREA02","ASSREA03","ASSREA04","ASSREA05", "ASMIBM01","ASMIBM02","ASMIBM03","ASMIBM04","ASMIBM05", "ASSIBM01","ASSIBM02","ASSIBM03","ASSIBM04","ASSIBM05", "DPCDATE" )) jp11LIN2 <- merge(jp11LIN, jp11tea, by=c("IDCNTRY","IDSCHOOL","ITCOURSE","IDTEACH","IDTEALIN", "IDLINK","IDPOP","IDGRADE","IDGRADER","IDSUBJ", "DPCDATE")) jp11TEA <- merge(jp11LIN2, jp11sch, by=c("IDCNTRY", "IDSCHOOL", "IDGRADE","IDPOP", "IDGRADER","IDSTRATE","IDSTRATI","WGTADJ1", "WGTFAC1","DPCDATE")) # 教員質問紙を利用する場合 jp11TEA2 <- merge(jp11lin, jp11tea, by=c("IDCNTRY","IDSCHOOL","ITCOURSE","IDTEACH","IDTEALIN", "IDLINK","IDPOP","IDGRADE","IDGRADER","IDSUBJ", "DPCDATE")) # 不要になったデータフレームを除去 rm(jp11stu, jp11sch, jp11lin, jp11tea, jp11LIN, jp11LIN2)
intsvyによる分析
学校質問紙を利用する
学校質問紙を利用する場合は、jp11SCHを使って分析すると良い。weightはデフォルトのまま(TOTWGT)。
ここでは、TIMSS2011のMathematics Results(pdf)のうち、表5.1 学校の場所と成績の関連(p.208)の数値を再現することを目指す。
jp11SCH$location <- recode(jp11SCH$ACBG05A, "1:2=1; 3:4=2; 5:6=3") timss.table(variable="location", data=jp11SCH) timss.mean.pv(pvlabel="ASMMAT", by="location", data=jp11SCH)
教員質問紙を利用する
教員質問紙を利用する場合は、jp11TEA, jp11TEA2のいずれかを使う。weightは分析する教科に合わせて設定しなければならない。算数・数学ならMATWGT、理科ならSCIWGTである。
ここでは、TIMSS2011のMathematics Results(pdf)のうち、表7.5 教員経験年数と成績の関連(p.294)の数値を再現することを目指す。
# weightの使い方。算数の得点(ASMMAT)を従属変数とする場合 timss.mean.pv(pvlabel="ASMMAT", data=jp11SCH) # jp11SCHを使うとき timss.mean.pv(pvlabel="ASMMAT", data=jp11TEA, weight="MATWGT") # jp11TEAを使うとき timss.mean.pv(pvlabel="ASMMAT", data=jp11TEA) # weightを間違えると推定値が狂う # 表7.5の再現 jp11TEA$career <- recode(jp11TEA$ATBG01, "1:4=1; 5:9=2; 10:19=3; 20:50=4") timss.table(variable="career", data=jp11TEA, weight="MATWGT") timss.mean.pv(pvlabel="ASMMAT", by="career", data=jp11TEA, weight="MATWGT") # jp11TEA2でもOK jp11TEA2$career <- recode(jp11TEA2$ATBG01, "1:4=1; 5:9=2; 10:19=3; 20:50=4") timss.table(variable="career", data=jp11TEA2, weight="MATWGT") timss.mean.pv(pvlabel="ASMMAT", by="career", data=jp11TEA2, weight="MATWGT")
いずれの結果も報告書のものと一致している。