Welke formule wordt gebruikt voor standaarddeviatie in R?

Welke formule wordt gebruikt in de standaarddeviatie-functie sd in R?

Reacties

  • Over het algemeen kun je de code van de functie ' lezen door simpelweg aan te roepen zonder haakjes, zoals Gschneider deed.
  • @OweJessen Hoewel het waar is, is dit vaak niet zo nuttig als men zou denken. Veel functies in R zijn slechts wrappers die onderliggende C-code aanroepen. Sd leidt je bijvoorbeeld naar var, wat je naar .Call leidt (C_cov, x, y, na.method, FALSE).

Answer

Zoals aangegeven door @Gschneider, berekent het de standaarddeviatie van het voorbeeld.

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

die u gemakkelijk als volgt kunt controleren:

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

Reacties

  • Als je naar de helppagina (? sd) kijkt, staat er " Net als var, dit gebruikt noemer n-1 ", als u om de een of andere reden niet ' ocram ' s simulatie 🙂
  • @ Matt: Misschien moeten ze dat helpbestand bijwerken en iets zeggen als " dit geeft de sqrt van var "?
  • @OweJessen, ik denk dat er eigenlijk staat dat " var zijn kwadraat teruggeeft! "
  • Zie ook: stackoverflow.com/questions/9508518/ … om te leren waarom deze simulatie verschillende resultaten zou kunnen geven voor beide functies.
  • Een andere eenvoudige manier om het te testen is sd( c(-1,0,1) ) met als output 1.

Antwoord

Ja. Technisch gezien berekent het de steekproefvariantie en neemt vervolgens de vierkantswortel:

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

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *