Rの標準偏差関数sd
で使用される式は何ですか?
コメント
- 通常、関数'のコードは、呼び出すだけで読み取ることができます。 Gschneiderが行ったように、括弧なしでそれを行います。
- @OweJessen本当ですが、これは多くの場合、思ったほど役に立ちません。 Rの多くの関数は、基になるCコードを呼び出す単なるラッパーです。たとえば、sdはvarに移動し、varは.Call(C_cov、x、y、na.method、FALSE)に移動します。
回答
@Gschneiderが指摘しているように、サンプルの標準偏差を計算します
$$ \ sqrt {\ frac {\ sum \ limits_ {i = 1} ^ {n }(x_i- \ bar {x})^ 2} {n-1}} $$
次のように簡単に確認できます:
> #generate a random vector > x <- rnorm(n=5, mean=3, sd=1.5) > n <- length(x) > > #sd in R > sd1 <- sd(x) > > #self-written sd > sd2 <- sqrt(sum((x - mean(x))^2) / (n - 1)) > > #comparison > c(sd1, sd2) #:-) [1] 0.6054196 0.6054196
コメント
- ヘルプページ(?sd)を見ると、" varのように、これは分母n-1 "を使用します。何らかの理由で、'がocram 'のシミュレーション:-)
- @ Matt:たぶん、ヘルプファイルを更新して、"のように言う必要があります。これはvar "?
- @OweJessen、実際には" varが平方根を返すと言っていると思います!"
- 関連項目: stackoverflow.com/questions/9508518/ … は、このシミュレーションで両方の関数に異なる結果が得られる理由を学習しています。
- それをテストするもう1つの簡単な方法は、1を出力する
sd( c(-1,0,1) )
です。
回答
はい。技術的には、サンプルの分散を計算してから、平方根を取ります。
> sd function (x, na.rm = FALSE) { if (is.matrix(x)) apply(x, 2, sd, na.rm = na.rm) else if (is.vector(x)) sqrt(var(x, na.rm = na.rm)) else if (is.data.frame(x)) sapply(x, sd, na.rm = na.rm) else sqrt(var(as.vector(x), na.rm = na.rm)) }