Quale formula viene utilizzata per la deviazione standard in R?

Quale formula viene utilizzata nella funzione di deviazione standard sd in R?

Commenti

  • Generalmente, sarai in grado di leggere il codice della funzione ' semplicemente chiamando senza parentesi, come ha fatto Gschneider.
  • @OweJessen Sebbene sia 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).

Answer

Come sottolineato da @Gschneider, calcola la deviazione standard campione

$$ \ sqrt {\ frac {\ sum \ limits_ {i = 1} ^ {n } (x_i – \ bar {x}) ^ 2} {n-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 

Commenti

  • Se guardi la pagina della guida (? sd), viene visualizzato " Like var, questo utilizza il denominatore n-1 ", se per qualche motivo non ' credere ocram ' s 🙂
  • @ Matt: Forse dovrebbero aggiornare quel file di aiuto e dire qualcosa come " questo restituisce lo sqrt di var "?
  • @OweJessen, penso che in realtà dica che " var restituisce il suo quadrato! "
  • Vedi anche: stackoverflow.com/questions/9508518/ … per capire perché questa simulazione potrebbe fornire risultati diversi per entrambe le funzioni.
  • Un altro modo semplice per verificarlo è sd( c(-1,0,1) ) che restituisce 1.

Risposta

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)) } 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *