2013-08-09 7 views
6

벡터에 표준 가중치를 빠르게 줄 수있는 함수를 사용하여 벡터에 요소의 가중치를 포함시킬 수있었습니다. 즉 가중 수단가중치가있는 빠른 표준 편차

sd(c(1,2,3))  #weights all equal 1 
#[1] 1 
sd(c(1,2,3,3,3)) #weights equal 1,1,3 respectively 
#[1] 0.8944272 

I는 library(SDMTools) 예에서 사용할 수 wt.mean()

> mean(c(1,2,3)) 
[1] 2 
>  wt.mean(c(1,2,3),c(1,1,1)) 
[1] 2 
> 
>  mean(c(1,2,3,3,3)) 
[1] 2.4 
>  wt.mean(c(1,2,3),c(1,1,3)) 
[1] 2.4 

하지만 wt.sd 기능 내가 원하는 무슨 생각을 제공하지 않는 것 : 나는 sd 가중 내에서 0.8944272을 반환하는 함수를 기대하고

> sd(c(1,2,3)) 
[1] 1 
>  wt.sd(c(1,2,3),c(1,1,1)) 
[1] 1 
>  sd(c(1,2,3,3,3)) 
[1] 0.8944272 
>  wt.sd(c(1,2,3),c(1,1,3)) 
[1] 1.069045 

. 바람직하게 나는 같은 data.frame에서이 작업을 사용하는 것입니다 : 당신은 자신의 무게에 따라 값을 복제 할 rep을 사용할 수 있습니다

data.frame(x=c(1,2,3),w=c(1,1,3)) 
+0

"SDMTools :: wt.var"의 문서에 유의하십시오. "wt.var는 GNU Scentific Library의 방정식을 사용하는 가중 평균 계산의 편미성 분산"입니다. – Roland

답변

9
library(Hmisc) 
sqrt(wtd.var(1:3,c(1,1,3))) 
#[1] 0.8944272 
3

. 그러면 결과 벡터에 대해 sd을 계산할 수 있습니다.

x <- c(1, 2, 3) # values 
w <- c(1, 1, 3) # weights 

sd(rep(x, w)) 
[1] 0.8944272 
+0

+1 -'Hmisc :: wtd.var'의 구현을 살펴보면 훨씬 더 확장 성이 좋습니다. – flodel