Quale formula viene utilizzata per la deviazione standard in R?


19

Quale formula viene utilizzata nella funzione di deviazione standard sdin R?


In genere, sarai in grado di leggere il codice della funzione semplicemente chiamandolo senza parentesi, come ha fatto Gschneider.
Devo Jessen il

2
@OweJessen Se vero, spesso non è così utile come si potrebbe pensare. Molte funzioni in R sono solo wrapper che chiamano il codice C sottostante. Ad esempio, sd ti porta a var, che ti porta a .Call (C_cov, x, y, na.method, FALSE).
Erik

Risposte:


31

Come sottolineato da @Gschneider, calcola la deviazione standard del campione

Σio=1n(Xio-X¯)2n-1

che puoi facilmente controllare come segue:

> #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
Se guardi la pagina di aiuto (? Sd), dice "Come var, questo usa il denominatore n-1", se per qualche ragione non credi alla simulazione di ocram :-)
Matt Krause

@ Matt: Forse dovrebbero aggiornare quel file di aiuto e dire qualcosa del tipo "questo restituisce il sqrt di var"?
Devo Jessen il

@OweJessen, penso che in realtà dice che "var restituisce il suo quadrato!"
Matt Krause,

Vedi anche: stackoverflow.com/questions/9508518/… per sapere perché questa simulazione potrebbe dare risultati diversi per entrambe le funzioni.
Tim

Un altro modo semplice per testarlo è sd( c(-1,0,1) )quali uscite 1.
kjetil b halvorsen,

12

Sì. Tecnicamente, calcola la varianza del campione e quindi prende la radice quadrata:

> 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))
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.