RigelのR言語メモであーる(R言語だけとは言っていない)

RigelのR言語メモであーる(主にpython)

興味あることや趣味、やったことについて書くよ

Rで標本分散と標本標準偏差を求める関数

分散には、不偏分散と標本分散がありますよね。
標準偏差には、不偏標準偏差と標本標準偏差がありますよね。
しかし、Rのbaseには不偏分散と不偏標準偏差を求める関数しかないです。
私は標本分散、標本標準偏差の方が知りたいことが多いです。
毎回ぐぐってコードコピペが面倒なので自分のブログにメモしておきます。

不偏分散と標本分散、不偏標準偏差と標本標準偏差の違い

{ \displaystyle x }:標本、{ \displaystyle n }:標本サイズ、{ \displaystyle \bar{x} }:標本平均とします。
このとき、不偏分散と標本分散の定義は、
不偏分散 : { \displaystyle u^2=\frac{1}{n-1}\sum^n_{i=1}(x_i-\bar{x})^2 }
標本分散 : { \displaystyle s^2=\frac{1}{n}\sum^n_{i=1}(x_i-\bar{x})^2 }
となります。
式的な違いは、{ \displaystyle n-1 }で割るか、{ \displaystyle n }で割るかだけです。
この違いの意味などは他のブログや本を参考にしてください。
そして、不偏分散と標本分散の関係は、
{ \displaystyle s^2=\frac{n-1}{n}u^2 }
となります。
また、不偏標準偏差と標本標準偏差の定義は、
不偏標準偏差 : { \displaystyle u=\sqrt{u^2} }
標本標準偏差 : { \displaystyle s=\sqrt{s^2} }
となります。
それぞれの分散の平方根をとるだけです。

標本分散と標本標準偏差を求める関数のRコード

標本分散と標本標準偏差を求める関数を作成します。
以下Rコード。

s2 <- function(x){ var(x)*(length(x)-1)/length(x) }
s1 <- function(x){ sqrt(s2(x)) }

以上です。
s2が標本分散を求める関数、s1が標本標準偏差を求める関数です。
var(x)はbaseパッケージの不偏分散を求める関数となっています。

まとめ

標本分散と標本標準偏差を求める関数を記載しました。
式を見ると分かるように、サンプルサイズ{ n }が大きくなると、不偏分散と標本分散、不偏標準偏差と標本それぞれの差は小さくなりますので、ある程度の量があるサンプルの時は、標本分散標本標準偏差を求める変わりに不偏分散不偏標準偏差でも良いと思います。

参考
http://cse.naro.affrc.go.jp/takezawa/r-tips/r/59.html