Mitä kaavaa käytetään R: n keskihajontaan?

Mitä kaavaa käytetään keskihajontatoiminnossa sd R: ssä?

Kommentit

  • Yleensä voit lukea funktion ' koodin yksinkertaisesti soittamalla se ilman sulkeita, kuten Gschneider teki.
  • @OweJessen Tämä on totta, mutta se ei useinkaan ole niin hyödyllistä kuin luulisi. Monet R: n toiminnot ovat vain kääreitä, jotka kutsuvat taustalla olevaa C-koodia. Esimerkiksi sd johtaa sinut variin, joka johtaa sinut .Call (C_cov, x, y, na.method, FALSE).

Vastaa

Kuten @Gschneider huomautti, se laskee otoksen keskihajonnan.

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

jonka voit helposti tarkistaa seuraavasti:

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

kommentit

  • Jos katsot ohjesivua (? sd), siinä lukee " Kuten var, tämä käyttää nimittäjää n-1 ", jos jostain syystä et ' usko okramia ' s-simulointi 🙂
  • @ Matt: Ehkä heidän pitäisi päivittää kyseinen ohjetiedosto ja sanoa jotain ". ”937c4e8985″>

?

  • @OweJessen, mielestäni siinä todellakin sanotaan, että " var palauttaa neliönsä! "
  • Katso myös: stackoverflow.com/questions/9508518/ … oppiaksesi, miksi tämä simulointi voisi tuottaa erilaisia tuloksia molemmille toiminnoille.
  • Toinen yksinkertainen tapa testata sitä on sd( c(-1,0,1) ), joka tuottaa 1.
  • Vastaa

    Kyllä. Teknisesti se laskee varianssin ja ottaa sitten neliöjuuren:

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

    Vastaa

    Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *