¿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?


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

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))
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.