2012-04-06 65 views
18

私は時系列がx_0 ... x_tです。指数関数的に重み付けされたデータの分散を計算したいと思います。それは次のとおりです。加重平均と標準偏差の計算

V = SUM{w_i*(x_i - x_bar)^2, i=1 to T} where SUM{w_i} = 1 and x_bar=SUM{w_i*x_i} 

REF:http://en.wikipedia.org/wiki/Weighted_mean#Weighted_sample_variance

目標は、基本的に少ない時間で、さらにバックしている観測値を重み付けすることです。これは実装が非常に簡単ですが、できるだけ多くの組み込み関数を使用したいと考えています。誰がこれがRに対応しているか知っていますか?

ありがとうございました

+0

これは不完全な仕様であり、実際に配信したいものは、w_iの構築方法の詳細と集計の制限の詳細が必要になると思います。 –

答えて

24

Rは加重平均を示しています。実際には、weighted.meanショーこの例:?

## GPA from Siegel 1994 
wt <- c(5, 5, 4, 1)/15 
x <- c(3.7,3.3,3.5,2.8) 
xm <- weighted.mean(x, wt) 

一歩:

v <- sum(wt * (x - xm)^2) 
+1

はい、私は重み付き分散を探しています。意味しない – Alex

+0

Hmiscは、判明したとおり、これだけです。 – Alex

+0

答えの最後の行に注意してください。これが加重分散です。 –

16

Hmiscパッケージには、機能が含まれていますあなたが必要です。したがって

x <- c(3.7,3.3,3.5,2.8) 

wt <- c(5, 5, 4, 1)/15 

xm <- wtd.mean(x, wt) 

var <- wtd.var(x, wt) 

sd <- sqrt(var) 

残念ながらHmiscパッケージの作者が明示的wtd.sd機能が含まれていませんでした。ルートwtd.varを平方にする必要があります。

チャールズKangai

+2

wtd.meanは動作しますが、例のwtd.varは 'INF'を返します。何故ですか? – Torvon

+0

@トルボンこれはHmiscの開発版で修正されました。 https://github.com/harrelfe/Hmisc/issues/69 –

+0

合計(重量)は1である必要はありません。 – vdesai

0

wtd.var()機能を使用するとき、私はあまりにもHmiscからエラーが発生します。幸いにも、SDMToolsには同等の機能があり、sqrtの分散を取ることなく、SDを直接計算することさえできます。

library(SDMTools) 

x <- c(3.7,3.3,3.5,2.8) 
wt <- c(5, 5, 4, 1)/15 ## Note: no actual need to normalize weights to sum to 1, this will be done automatically. 

wt.mean(x, wt) 
wt.sd(x,wt) 

wt.var(x, wt)