Jaký vzorec se používá pro směrodatnou odchylku v R?

Jaký vzorec se používá ve funkci standardní odchylky sd v R?

Komentáře

  • Obecně si budete moci přečíst kód funkce ' s jednoduchým voláním bez závorek, jak to udělal Gschneider.
  • @OweJessen I když je to pravda, často to není tak užitečné, jak by si někdo myslel. Mnoho funkcí v R jsou jen obálky, které volají podkladový C kód. Například sd vás vede k var, což vás vede k .Call (C_cov, x, y, na.method, FALSE).

Odpovědět

Jak zdůraznil @Gschneider, vypočítává vzorovou směrodatnou odchylku

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

které můžete snadno zkontrolovat následujícím způsobem:

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

Komentáře

  • Pokud se podíváte na stránku nápovědy (? sd), říká " Jako var, používá se jmenovatel n-1 ", pokud z nějakého důvodu nevěříte ' ocram ' s simulace 🙂
  • @ Matt: Možná by měli aktualizovat tento soubor nápovědy a říct něco jako " toto vrátí sqrt var "?
  • @OweJessen, myslím, že ve skutečnosti říká, že " var vrátí svůj čtverec! "
  • Viz také: stackoverflow.com/questions/9508518/ … pro zjištění, proč by tato simulace mohla poskytnout odlišné výsledky pro obě funkce.
  • Další jednoduchý způsob, jak to otestovat, je sd( c(-1,0,1) ) které výstupy 1.

Odpovědět

Ano. Technicky spočítá rozptyl vzorku a poté vezme druhou odmocninu:

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

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *