Vilken formel används för standardavvikelse i R?

Vilken formel används i standardavvikelsesfunktionen sd i R?

Kommentarer

  • Generellt sett kommer du att kunna läsa funktionens ' -kod genom att helt enkelt ringa det utan parentes, som Gschneider gjorde.
  • @OweJessen Även om det är sant är det ofta inte så användbart som man kan tro. Många funktioner i R är bara omslag som kallar underliggande C-kod. Till exempel leder sd dig till var, vilket leder dig till .Call (C_cov, x, y, na.method, FALSE).

Svar

Som påpekats av @Gschneider beräknar den standardavvikelsen för exempel

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

som du enkelt kan kontrollera på följande sätt:

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

  • Om du tittar på hjälpsidan (? sd) står det " Som var, detta använder nämnaren n-1 ", om du av någon anledning inte ' tror att ocram ' s simulering 🙂
  • @ Matt: Kanske borde de uppdatera den hjälpfilen och säga något som " detta returnerar sqrt av var "?
  • @OweJessen, jag tror att det faktiskt står att " var returnerar sitt kvadrat! "
  • Se även: stackoverflow.com/questions/9508518/ … för att lära sig varför denna simulering kan ge olika resultat för båda funktionerna.
  • Ett annat enkelt sätt att testa det är sd( c(-1,0,1) ) som matar ut 1.

Svar

Ja. Tekniskt beräknar den provvariansen och tar sedan kvadratroten:

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

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *