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

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

Comentarios

  • Generalmente, podrá leer el código de la función ' simplemente llamando sin paréntesis, como lo hizo Gschneider.
  • @OweJessen Si bien es cierto, esto a menudo no es tan útil como podría pensarse. Muchas funciones en R son simplemente envoltorios que llaman al código C subyacente. Por ejemplo, sd te lleva a var, que te lleva a .Call (C_cov, x, y, na.method, FALSE).

Answer

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

$$ \ sqrt {\ frac {\ sum \ limits_ {i = 1} ^ {n } (x_i – \ bar {x}) ^ 2} {n-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 

Comentarios

  • Si miras la página de ayuda (? sd), dice " Como var, esto usa el denominador n-1 ", si por alguna razón no ' no cree en ocram ' s 🙂
  • @ Matt: Tal vez deberían actualizar ese archivo de ayuda y decir algo como " esto devuelve el sqrt de var "?
  • @OweJessen, creo que en realidad dice que " var devuelve su cuadrado. "
  • Ver también: stackoverflow.com/questions/9508518/ … para saber por qué esta simulación podría dar resultados diferentes para ambas funciones.
  • Otra forma sencilla de probarlo es sd( c(-1,0,1) ) que da como resultado 1.

Respuesta

Sí. 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)) } 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *