まずは児童の理科調査データを学級別に集計する
データを読み込む
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")