R'de standart sapma için hangi formül kullanılır?


19

sdR'de standart sapma fonksiyonunda hangi formül kullanılır ?


Genel olarak, fonksiyonun kodunu Gschneider'in yaptığı gibi parantez olmadan basitçe çağırarak okuyabilirsiniz.
Borç Jessen

2
@OweJessen Doğru olsa da, bu genellikle düşündüğünüz kadar yararlı değildir. R'deki birçok işlev sadece temel C kodunu çağıran sarmalayıcılardır. Örneğin, sd sizi var değerine götürür.
Erik

Yanıtlar:


31

@Gschneider'in işaret ettiği gibi, örnek standart sapmayı hesaplar

Σben=1n(xben-x¯)2n-1

hangi kolayca aşağıdaki gibi kontrol edebilirsiniz:

> #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
Yardım sayfasına (? Sd) bakarsanız, "Var gibi, bu payda n-1 kullanır" yazıyor, eğer herhangi bir nedenden ötürü ocram'ın simülasyonuna inanmıyorsanız :-)
Matt Krause

@ Matt: Belki de bu yardım dosyasını güncellemeli ve "bu var var sqrt döndürür" gibi bir şey söylemeliler?
Borç Jessen

@OweJessen, sanırım "var karesini döndürüyor!"
Matt Krause

Ayrıca, bu simülasyonun neden her iki işlev için farklı sonuçlar verebileceğini öğrenmek için stackoverflow.com/questions/9508518/… adresine bakın .
Tim

Bunu test etmenin bir başka basit yolu sd( c(-1,0,1) )da çıktılar 1
kjetil b halvorsen

12

Evet. Teknik olarak, örnek varyansını hesaplar ve ardından kare kökü alır:

> 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))
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.