Formula apa yang digunakan untuk standar deviasi dalam R?


19

Formula apa yang digunakan dalam fungsi standar deviasi sddalam R?


Secara umum, Anda dapat membaca kode fungsi hanya dengan memanggilnya tanpa tanda kurung, seperti yang dilakukan Gschneider.
Owe Jessen

2
@ OweJessen Meskipun benar, ini seringkali tidak membantu seperti yang diperkirakan orang. Banyak fungsi dalam R hanya pembungkus yang memanggil kode C yang mendasarinya. Misalnya, sd mengarahkan Anda ke var, yang mengarahkan Anda ke .Call (C_cov, x, y, na.method, FALSE).
Erik

Jawaban:


31

Seperti yang ditunjukkan oleh @Gschneider, itu menghitung standar deviasi sampel

saya=1n(xsaya-x¯)2n-1

yang dapat Anda periksa dengan mudah sebagai berikut:

> #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
Jika Anda melihat halaman bantuan (? Sd), ia mengatakan "Seperti var, ini menggunakan penyebut n-1", jika karena alasan tertentu Anda tidak percaya simulasi ocram :-)
Matt Krause

@ Matt: Mungkin mereka harus memperbarui file bantuan itu dan mengatakan sesuatu seperti "ini mengembalikan sqrt of var"?
Owe Jessen

@ OweJessen, saya pikir itu sebenarnya mengatakan bahwa "var mengembalikan kuadratnya!"
Matt Krause

Lihat juga: stackoverflow.com/questions/9508518/… untuk mempelajari mengapa simulasi ini dapat memberikan hasil yang berbeda untuk kedua fungsi.
Tim

Cara sederhana lain untuk mengujinya adalah sd( c(-1,0,1) )yang keluaran 1.
kjetil b halvorsen

12

Iya. Secara teknis, ini menghitung varians sampel, dan kemudian mengambil akar kuadrat:

> 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))
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.