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?


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

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))
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.