Quelle formule est utilisée pour l'écart type dans R?

19

Quelle formule est utilisée dans la fonction d'écart type sddans R?

CodeGuy
la source
Généralement, vous pourrez lire le code de la fonction en l'appelant simplement sans parenthèses, comme l'a fait Gschneider.
Owe Jessen
2
@OweJessen Bien que cela soit vrai, ce n'est souvent pas aussi utile qu'on pourrait le penser. De nombreuses fonctions dans R ne sont que des wrappers qui appellent du code C sous-jacent. Par exemple, sd vous mène à var, ce qui vous mène à .Call (C_cov, x, y, na.method, FALSE).
Erik

Réponses:

31

Comme l'a souligné @Gschneider, il calcule l'écart type de l'échantillon

je=1n(Xje-X¯)2n-1

que vous pouvez facilement vérifier comme suit:

> #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
la source
4
Si vous regardez la page d'aide (? Sd), elle dit "Comme var, cela utilise le dénominateur n-1", si pour une raison quelconque vous ne croyez pas la simulation d'ocram :-)
Matt Krause
@ Matt: Peut-être qu'ils devraient mettre à jour ce fichier d'aide et dire quelque chose comme "cela retourne le sqrt de var"?
Owe Jessen
@OweJessen, je pense qu'il dit en fait que "var renvoie son carré!"
Matt Krause
Voir aussi: stackoverflow.com/questions/9508518/… pour savoir pourquoi cette simulation pourrait donner des résultats différents pour les deux fonctions.
Tim
Un autre moyen simple de le tester est la sd( c(-1,0,1) )sortie 1.
kjetil b halvorsen
12

Oui. Techniquement, il calcule la variance de l'échantillon, puis prend la racine carrée:

> 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
la source