Welche Formel wird für die Standardabweichung in R verwendet?

19

Welche Formel wird in der Standardabweichungsfunktion sdin R verwendet?

CodeGuy
quelle
Im Allgemeinen können Sie den Funktionscode lesen, indem Sie ihn einfach ohne Klammern aufrufen, wie es Gschneider getan hat.
Owe Jessen
2
@OweJessen Das stimmt zwar, ist aber oft nicht so hilfreich, wie man denkt. Viele Funktionen in R sind nur Wrapper, die den zugrunde liegenden C-Code aufrufen. Zum Beispiel führt sd Sie zu var, was Sie zu .Call (C_cov, x, y, na.method, FALSE) führt.
Erik

Antworten:

31

Wie von @Gschneider ausgeführt, wird die Standardabweichung der Stichprobe berechnet

ich=1n(xich-x¯)2n-1

was Sie leicht wie folgt überprüfen können:

> #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
quelle
4
Wenn Sie sich die Hilfeseite (? Sd) ansehen, heißt es "Wie var, dies verwendet den Nenner n-1", wenn Sie aus irgendeinem Grund Ocrams Simulation nicht glauben :-)
Matt Krause
@ Matt: Vielleicht sollten sie diese Hilfedatei aktualisieren und so etwas wie "das gibt den sqrt von var zurück" sagen?
Owe Jessen
@OweJessen, ich denke, es sagt tatsächlich, dass "var sein Quadrat zurückgibt!"
Matt Krause
Unter stackoverflow.com/questions/9508518/… erfahren Sie, warum diese Simulation für beide Funktionen unterschiedliche Ergebnisse liefern kann.
Tim
Eine andere einfache Möglichkeit, es zu testen, ist sd( c(-1,0,1) )die
Ausgabe von
12

Ja. Technisch berechnet es die Stichprobenvarianz und nimmt dann die Quadratwurzel:

> 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
quelle