Jakiego wzoru używa się do odchylenia standardowego w R?

19

Jakiego wzoru używa się w funkcji odchylenia standardowego sdw R?

CodeGuy
źródło
Zasadniczo będziesz w stanie odczytać kod funkcji, po prostu wywołując go bez nawiasów, jak zrobił to Gschneider.
Owe Jessen
2
@OweJessen Chociaż prawda, często nie jest tak pomocna, jak mogłoby się wydawać. Wiele funkcji w R to tylko opakowania, które wywołują podstawowy kod C. Na przykład sd prowadzi do var, co prowadzi do .Call (C_cov, x, y, na.method, FALSE).
Erik

Odpowiedzi:

31

Jak wskazał @Gschneider, oblicza odchylenie standardowe próbki

ja=1n(xja-x¯)2)n-1

które możesz łatwo sprawdzić w następujący sposób:

> #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
źródło
4
Jeśli spojrzysz na stronę pomocy (? Sd), zobaczysz: „Podobnie jak var, używa mianownika n-1”, jeśli z jakiegoś powodu nie wierzysz w symulację ocrama :-)
Matt Krause
@ Matt: Może powinni zaktualizować ten plik pomocy i powiedzieć coś takiego: „zwraca sqrt var”?
Owe Jessen
@OweJessen, myślę, że faktycznie mówi, że „var zwraca kwadrat!”
Matt Krause,
Zobacz także: stackoverflow.com/questions/9508518/..., aby dowiedzieć się, dlaczego ta symulacja może dawać różne wyniki dla obu funkcji.
Tim
Innym prostym sposobem na przetestowanie jest to, sd( c(-1,0,1) )które wyjścia 1.
kjetil b halvorsen
12

Tak. Technicznie oblicza wariancję próbki, a następnie przyjmuje pierwiastek kwadratowy:

> 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
źródło