2013-08-09 4 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