Qual fórmula é usada para o desvio padrão em R?


19

Qual fórmula é usada na função de desvio padrão sdem R?


Geralmente, você poderá ler o código da função simplesmente chamando-o sem parênteses, como Gschneider fez.
dever-Jessen

2
@OweJessen Embora seja verdade, isso geralmente não é tão útil quanto se poderia pensar. Muitas funções em R são apenas invólucros que chamam o código C subjacente. Por exemplo, sd leva você a var, o que leva a .Call (C_cov, x, y, na.method, FALSE).
Erik

Respostas:


31

Conforme apontado por @Gschneider, ele calcula o desvio padrão da amostra

Eu=1n(xEu-x¯)2n-1

que você pode verificar facilmente da seguinte maneira:

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

4
(? Sd) Se você olhar para a página de ajuda, ele diz que "Como var, isto usa denominador n-1", se por algum motivo você não acredita simulação de Ocram :-)
Matt Krause

@ Matt: Talvez eles devam atualizar o arquivo de ajuda e dizer algo como "isso retorna o sqrt de var"?
dever-Jessen

@OweJessen, acho que realmente diz que "var retorna seu quadrado!"
Matt Krause

Veja também: stackoverflow.com/questions/9508518/… para saber por que essa simulação pode fornecer resultados diferentes para ambas as funções.
Tim

Outra forma simples de testar isso é sd( c(-1,0,1) )que gera 1.
b Kjetil Halvorsen

12

Sim. Tecnicamente, calcula a variação da amostra e pega a raiz quadrada:

> 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))
}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.