R의 표준 편차에 어떤 공식이 사용됩니까?


19

sdR 의 표준 편차 함수 에 어떤 공식이 사용 됩니까?


일반적으로 Gschneider처럼 괄호없이 간단히 호출하여 함수의 코드를 읽을 수 있습니다.
Owe Jessen

2
@OweJessen 사실이지만, 이것은 생각만큼 도움이되지 않는 경우가 많습니다. R의 많은 함수는 기본 C 코드를 호출하는 래퍼 일뿐입니다. 예를 들어, sd는 var로 연결하여 .Call (C_cov, x, y, na.method, FALSE)로 연결됩니다.
Erik

답변:


31

@Gschneider가 지적했듯이 샘플 표준 편차를 계산합니다.

나는=1(엑스나는엑스¯)21

다음과 같이 쉽게 확인할 수 있습니다.

> #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)를 보면 "var과 마찬가지로 분모 n-1을 사용합니다"라고 표시됩니다. 어떤 이유로 ocram의 시뮬레이션을 믿지 않는 경우 :-)
Matt Krause

@ Matt : 어쩌면 그들은 도움말 파일을 업데이트하고 "var의 sqrt를 반환합니다"와 같은 것을 말해야합니까?
Owe Jessen

@OweJessen, 실제로 "var은 사각형을 반환합니다!"라고 말합니다.
매트 크라우스

이 시뮬레이션이 두 기능에 대해 다른 결과를 제공 할 수있는 이유를 알아 보려면 stackoverflow.com/questions/9508518/… 도 참조하십시오 .

그것을 테스트하는 또 다른 간단한 방법은 1 sd( c(-1,0,1) )을 출력하는 것입니다.
kjetil b halvorsen

12

예. 기술적으로 샘플 분산을 계산 한 다음 제곱근을 취합니다.

> 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))
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.