Яка формула використовується для стандартного відхилення в R?


19

Яка формула використовується у функції стандартного відхилення sdв R?


Як правило, ви зможете прочитати код функції, просто зателефонувавши без дужок, як це робив Gschneider.
заборгували Йессен

2
@OweJessen Хоча це правда, це часто не так корисно, як можна подумати. Багато функцій в R - просто обгортки, які викликають базовий код C. Наприклад, sd приводить вас до var, який веде вас до .Call (C_cov, x, y, na.method, FALSE).
Ерік

Відповіді:


31

Як вказував @Gschneider, він обчислює вибіркове стандартне відхилення

i=1н(хi-х¯)2н-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

4
Якщо ви подивитесь на сторінку довідки (? Sd), на ній написано "Як вар, і для цього використовується знаменник n-1", якщо ви чомусь не вірите імітації ocram :-)
Метт Крауз

@ Matt: Може, вони повинні оновити цей довідковий файл і сказати щось на кшталт "це повертає sqrt var"?
заборгували Йессен

@OweJessen, я думаю, це насправді говорить про те, що "var повертає свою площу!"
Метт Крауз

Дивіться також: stackoverflow.com/questions/9508518/…, щоб дізнатися, чому таке моделювання може дати різні результати для обох функцій.
Тім

Ще один простий спосіб перевірити це - sd( c(-1,0,1) )вихід 1.
kjetil b halvorsen

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))
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.