不偏分散を計算する際になぜnではなくn-1で割るのか。理由はともかくnで割ってマズイのは割ってみれば分かります。
やってみよう
- サイコロ: 1から6までが等しい確率で出る理想的なサイコロ様を用意
- 分散の計算: サイコロをn回振るごとに分散と不偏分散を計算
- nはとりあえず2から50まで
- それぞれのnについて1000回分散を計算し、その平均をそのn数における分散とする
## 分散(nで割るやつ) var <- function(data) sum((mean(data) - data)^2)/length(data) ## 不偏分散(n-1で割るやつ) var2 <- function(data) sum((mean(data) - data)^2)/(length(data)-1) dice <- 1:6 # サイコロ true.var <- var(dice) # 真の分散 n.limit <- 50 # サイコロを振る回数 rep.limit <- 1000 # 分散を計算する回数 mean.var <- mean.var2 <- numeric(n.limit-1) for(n in 2:n.limit){ v <- v2 <- numeric(rep.limit) for(i in 1:rep.limit){ v[i] <- var(sample(dice, n, rep=TRUE)) v2[i] <- var2(sample(dice, n, rep=TRUE)) } mean.var[n-1] <- mean(v) mean.var2[n-1] <- mean(v2) } plot(2:n.limit, ylim=c(0, 4), type="n", xlab="サイコロを振った回数", ylab="分散の平均値") points(2:n.limit, mean.var, col=2) points(2:n.limit, mean.var2, col=3) abline(h = true.var, col="skyblue") legend("bottomright", inset=0.05, legend=c("分散(nで割ったやつ)の平均", "不偏分散(n-1で割ったやつ)の平均", "真の分散"), pch=c(1, 1, NA), lty=c(NA, NA, 1), col=c(2, 3, "skyblue"), box.lty=0)