# TIMSS2011のデータで遊んでみる(2)

そもそもTIMS2011って


データの種類

データの種類 ファイル名 コードブック
学校質問紙 acgjpnm5 ACGTMSM5
算数理科調査 asajpnm5 ASATMSM5
児童質問紙 asgjpnm5 ASGTMSM5
家庭背景 ASHTMSM5
国内信頼性 asrjpnm5 ASRTMSM5
教師-児童リンクファイル astjpnm5 ASTTMSM5
教師質問紙 atgjpnm5 ATGTMSM5

まずは児童の理科調査データを学級別に集計する

データを読み込む

asajpnm5 <- read.csv("asajpnm5.csv")

使う変数を限定する

変数名 内容
IDCNTRY 国番号
IDBOOK 冊子番号
IDSCHOOL 学校番号
IDCLASS 学級番号
IDSTUD 児童番号
ASSSCI01 理科第1推算値
ASSIBM01 理科の第1推算値にもとづくレベル
  • レベルは625点以上(5),550点以上(4),475点以上(3),400点以上(2),400点未満(1)
jido.rika <- asajpnm5[c("IDSCHOOL","IDCLASS","IDSTUD","ASSSCI01","ASSIBM01")]
# その後の処理を考えて変数名を変更
colnames(jido.rika) <- c("idschool","idclass","idstudent","rikascore","rikalevel")
# 小文字にしておいた方がキーを打ちやすいですから

学級別の理科得点の平均と標準偏差

class.mean_ <- tapply(jido.rika$rikascore, jido.rika$idclass, mean)
class.sd_ <- tapply(jido.rika$rikascore, jido.rika$idclass, sd)

#ついでにデータとして使えるようにしておこう
write.csv(class.mean_, "class.mean_.csv")
class.mean <- read.csv("class.mean_.csv")
colnames(class.mean) <- c("idclass","rika.mean")

write.csv(class.sd_, "class.sd_.csv")
class.sd <- read.csv("class.sd_.csv")
colnames(class.sd) <- c("idclass","rika.sd")

# 2つをまとめておく
class.rika.score <- merge(class.mean, class.sd)

# こんな感じ
head(class.rika.score)
##   idclass rika.mean  rika.sd
## 1     104  569.8817 53.97667
## 2     204  564.3780 54.67014
## 3     305  576.2101 61.08431
## 4     401  597.7882 55.92306
## 5     501  547.6221 77.69665
## 6     601  566.7242 71.60676

学級別の到達レベルの割合

class.level.tab <- table(jido.rika$idclass, jido.rika$rikalevel)
class.level.tab.p <- prop.table(class.level.tab, margin=1)
write.csv(class.level.tab.p, "class.level.tab.p.csv")
class.level <- read.csv("class.level.tab.p.csv")
colnames(class.level) <- c("idclass","lv1","lv2","lv3","lv4","lv5")
head(class.level)
##   idclass        lv1        lv2       lv3       lv4       lv5
## 1     104 0.00000000 0.02702703 0.3513514 0.4594595 0.1621622
## 2     204 0.00000000 0.03225806 0.2903226 0.5483871 0.1290323
## 3     305 0.00000000 0.03571429 0.3571429 0.3214286 0.2857143
## 4     401 0.00000000 0.02857143 0.1142857 0.5142857 0.3428571
## 5     501 0.06060606 0.09090909 0.2727273 0.4545455 0.1212121
## 6     601 0.03571429 0.03571429 0.1785714 0.6071429 0.1428571
  • 学級規模研究では小規模学級では下位層が少ないとかいう結果も見られるので,各学級の下位層の割合も変数として追加してみる。
  • 第1推算値の平均559.7884,中央値562.862,550点以上がレベル4ということを踏まえて,レベル3以下を下位層としておく。
class.level <- transform(class.level, lo.prop = lv1 + lv2 + lv3)
head(class.level)
##   idclass        lv1        lv2       lv3       lv4       lv5   lo.prop
## 1     104 0.00000000 0.02702703 0.3513514 0.4594595 0.1621622 0.3783784
## 2     204 0.00000000 0.03225806 0.2903226 0.5483871 0.1290323 0.3225806
## 3     305 0.00000000 0.03571429 0.3571429 0.3214286 0.2857143 0.3928571
## 4     401 0.00000000 0.02857143 0.1142857 0.5142857 0.3428571 0.1428571
## 5     501 0.06060606 0.09090909 0.2727273 0.4545455 0.1212121 0.4242424
## 6     601 0.03571429 0.03571429 0.1785714 0.6071429 0.1428571 0.2500000

class.levelとclass.rika.scoreをマージする

class.rika <- merge(class.rika.score, class.level)
head(class.rika)
##   idclass rika.mean  rika.sd        lv1        lv2       lv3       lv4
## 1     104  569.8817 53.97667 0.00000000 0.02702703 0.3513514 0.4594595
## 2     204  564.3780 54.67014 0.00000000 0.03225806 0.2903226 0.5483871
## 3     305  576.2101 61.08431 0.00000000 0.03571429 0.3571429 0.3214286
## 4     401  597.7882 55.92306 0.00000000 0.02857143 0.1142857 0.5142857
## 5     501  547.6221 77.69665 0.06060606 0.09090909 0.2727273 0.4545455
## 6     601  566.7242 71.60676 0.03571429 0.03571429 0.1785714 0.6071429
##         lv5   lo.prop
## 1 0.1621622 0.3783784
## 2 0.1290323 0.3225806
## 3 0.2857143 0.3928571
## 4 0.3428571 0.1428571
## 5 0.1212121 0.4242424
## 6 0.1428571 0.2500000
# csvにして保存
write.csv(class.rika,"class.rika.csv")
# 不要なcsvファイルの削除
file.remove("class.level.tab.p.csv")
file.remove("class.mean_.csv")
file.remove("class.sd_.csv")