前回の続き。だいたい納得したのだが、SPSSの「ケースの重み付け」が一体何をしているのかもう少し調べてみたくなった。「ケースの重み付け」を設定したとき、分散や標準偏差はどうやって計算されているのだろう?
weighted.var <- function(x, w, na.rm = FALSE) {
if (na.rm) {
w <- w[!is.na(x)]
x <- x[!is.na(x)]
}
sum(w * (x - weighted.mean(x, w))^2) / (sum(w) - 1)
}
weighted.se <- function(x, w, na.rm = FALSE) {
if (na.rm) {
w <- w[!is.na(x)]
x <- x[!is.na(x)]
}
v <- sum(w * (x - weighted.mean(x, w))^2) / (sum(w) - 1)
sqrt(v) / sqrt(sum(w))
}
d <- data.frame(
ans = c(1, 2, 2, 3, 3, 4, 4, 1, 2, 3),
gender = c(rep(1, 7), rep(2, 3)),
w = c(rep(5 / 7, 7), rep(5 / 3, 3))
)
weighted.mean(d$ans, d$w) # 平均
sqrt(weighted.var(d$ans, d$w)) # 標準偏差
weighted.se(d$ans, d$w) # 標準誤差
というわけでRのコード。例題は前回と同じくこちらのサイトのものを流用。これならウェイトが整数でないにもかかわらず、それっぽい(誤った)数値が算出される。na.rmのオプションも付けたので、欠測があっても大丈夫。もっとも使うことはないだろうが。