Hvilken formel anvendes til standardafvigelse i R?

Hvilken formel bruges i standardafvigelsesfunktionen sd i R?

Kommentarer

  • Generelt vil du være i stand til at læse funktionens ' -kode ved blot at ringe det uden parentes, som Gschneider gjorde.
  • @OweJessen Selvom det er sandt, er dette ofte ikke så nyttigt som man måske tror. Mange funktioner i R er bare indpakninger, der kalder den underliggende C-kode. For eksempel fører sd dig til var, hvilket fører dig til .Call (C_cov, x, y, na.method, FALSE).

Svar

Som påpeget af @Gschneider, beregner den prøve standardafvigelsen

$$ \ sqrt {\ frac {\ sum \ limits_ {i = 1} ^ {n } (x_i – \ bar {x}) ^ 2} {n-1}} $$

som du nemt kan kontrollere som følger:

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

Kommentarer

  • Hvis du ser på hjælpesiden (? sd), står der " Ligesom var, dette bruger nævneren n-1 ", hvis du af en eller anden grund ikke ' ikke tror på ocram ' s simulation 🙂
  • @ Matt: Måske skulle de opdatere den hjælpefil og sige noget som " dette returnerer sqrt af var "?
  • @OweJessen, jeg tror, det siger faktisk, at " var returnerer sit kvadrat! "
  • Se også: stackoverflow.com/questions/9508518/ … for at lære, hvorfor denne simulering kunne give forskellige resultater for begge funktioner.
  • En anden enkel måde at teste det på er sd( c(-1,0,1) ) som output 1.

Svar

Ja. Teknisk beregner den prøvevariansen og tager derefter kvadratroden:

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

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *