Rの標準偏差に使用される式は何ですか?


19

sdRの標準偏差関数で使用される式は何ですか?


一般に、Gschneiderが行ったように、括弧なしで呼び出すだけで、関数のコードを読み取ることができます。
オウェジェセン

2
@OweJessen真実ではありますが、これは多くの場合、考えられるほど有用ではありません。Rの多くの関数は、基になるCコードを呼び出す単なるラッパーです。たとえば、sdを使用するとvarに移動し、.Call(C_cov、x、y、na.method、FALSE)に移動します。
エリック

回答:


31

@Gschneiderが指摘したように、サンプルの標準偏差を計算します

=1nバツバツ¯2n1

次のように簡単に確認できます。

> #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

4
ヘルプページ(?sd)を見ると、「何らかの変数、これは分母n-1を使用しています」と表示されます。何らかの理由でocramのシミュレーションが信じられない場合
Matt Krause

@ Matt:たぶん彼らはそのヘルプファイルを更新し、「これはvarのsqrtを返す」のようなことを言うべきでしょうか?
オウェジェセン

@OweJessen、実際には「varがその正方形を返す」と言っていると思います。
マットクラウス

参照:stackoverflow.com/questions/9508518/…このシミュレーションが両方の関数で異なる結果をもたらす理由を学ぶために。
ティム

それはテストするための別の簡単な方法sd( c(-1,0,1) )1.出力
HalvorsenのはKjetil B

12

はい。技術的には、サンプル分散を計算し、平方根を取ります:

> 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))
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.