「Rの手作りプログラム」中の「標本分散,標本共分散」について
#標本分散
sample.variance<-function(a) var(a)*(length(a)-1)/length(a)
#以下でも同じ。
#sample2.variance<-function(x) mean(x^2)-(mean(x))^2
#標本共分散
sample.covariance<-function(x,y) mean(x*y)-mean(x)*mean(y)
「標本分散」という使い方がおかしい。
これは詰まるところ,「変動をサンプルサイズで割る」という方の分散のこと。Excel なんかは,これは「母分散である」といっているが,これも間違い。そもそも,母分散なんか計算できるものではない。
名前は,単に「分散」という。「変動をサンプルサイズ - 1 で割る」分散は,「不偏分散」と呼ぶ。
それはさておき,mean(x^2)-(mean(x))^2 は非常にマズイ。
mean((x-mean(x))^2) とすべき。ちなみに,mean(x)^2 でよいし。
理由?それはね,場合によって計算誤差が出るから
> x <- 100000000+1:100
> sample.variance(x) # 著者が定義した関数による場合 正しい
[1] 833.25
> mean(x^2)-(mean(x))^2 # 著者が別法として提示したもの 誤り
[1] 834 # 誤った結果だ!!!
> mean((x-mean(x))^2) # 正しくは,このようにする
[1] 833.25
※コメント投稿者のブログIDはブログ作成者のみに通知されます