我有一个时间序列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
其目标是基本上对时间更早的观察结果进行加权。这是非常简单的实现,但我想使用尽可能多的内置功能。有人知道这在R中对应的是什么吗?
谢谢
发布于 2012-04-07 10:23:28
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)
发布于 2014-06-24 18:59:42
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的平方根。
查尔斯·坎盖
发布于 2017-08-19 02:22:29
在使用wtd.var()
函数时,我也会收到来自Hmisc
的错误。幸运的是,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)
https://stackoverflow.com/questions/10049402
复制相似问题