2012-04-06 318 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} 

裁判:http://en.wikipedia.org/wiki/Weighted_mean#Weighted_sample_variance

的目標是基本重量是更久遠的時間較少的觀察。這是非常簡單的實現,但我想盡可能多地使用funcitonality內置。有誰知道這在R中對應於什麼?

謝謝

+0

我猜這是一個不完整的規範,你真正想要交付的東西需要更好地說明如何構造w_i以及更詳細的求和限制。 – 2012-04-07 14:19:35

回答

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 2012-04-08 02:26:18

+0

事實證明,Hmisc就是這樣做的。 – Alex 2012-04-08 02:26:30

+0

請注意答案中的最後一行。這是加權的方差。 – 2012-04-08 02:47:00

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。

查爾斯康艾我也得到來自Hmisc錯誤使用wtd.var()功能時

+2

wtd.mean的作品,但在你的例子wtd.var給'INF'。這是爲什麼? – Torvon 2015-07-01 11:12:07

+0

@Torvon這現在已經修復在Hmisc的開發版本中。 https://github.com/harrelfe/Hmisc/issues/69 – 2017-04-19 19:03:03

+0

總和(wt)不一定是1。 – vdesai 2017-12-20 02:06:37

0

。幸運的是,SDMTools具有可比較的功能,甚至可以直接爲您計算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)