¿Qué fórmula se usa para la desviación estándar en R?

19

¿Qué fórmula se usa en la función de desviación estándar sden R?

CodeGuy
fuente
En general, podrá leer el código de la función simplemente llamándolo sin paréntesis, como lo hizo Gschneider.
Le debo a Jessen el
2
@OweJessen Si bien es cierto, esto a menudo no es tan útil como uno podría pensar. Muchas funciones en R son solo envoltorios que llaman al código C subyacente. Por ejemplo, sd lo lleva a var, que lo lleva a .Call (C_cov, x, y, na.method, FALSE).
Erik

Respuestas:

31

Como señaló @Gschneider, calcula la desviación estándar de la muestra

yo=1norte(Xyo-X¯)2norte-1

que puede verificar fácilmente de la siguiente manera:

> #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
ocram
fuente
44
Si mira la página de ayuda (? Sd), dice "Al igual que var, esto usa el denominador n-1", si por alguna razón no cree en la simulación de ocram :-)
Matt Krause
@ Matt: ¿Quizás deberían actualizar ese archivo de ayuda y decir algo como "esto devuelve el sqrt de var"?
Le debo a Jessen el
@OweJessen, creo que en realidad dice que "¡var devuelve su cuadrado!"
Matt Krause el
Consulte también: stackoverflow.com/questions/9508518/… para saber por qué esta simulación podría dar resultados diferentes para ambas funciones.
Tim
Otra forma sencilla de probarlo es sd( c(-1,0,1) )qué salidas 1.
kjetil b halvorsen
12

Si. Técnicamente, calcula la varianza de la muestra y luego toma la raíz cuadrada:

> 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))
}
Gschneider
fuente