I have a time series x_0 ... x_t
. I would like to compute the exponentially weighted variance of the data. That is:
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
The goal is to basically weight observations that are further back in time less. This is very simple to implement but I would like to use as much built in funcitonality as possible. Does anyone know what this corresponds to in R?
Thanks
The standard deviation is an indicator of how widely values in a group differ from the mean (see StDev (Standard Deviation of a Sample)). It is useful for comparing different sets of values with a similar mean.
Typically, weighting is applied when calculating a mean, but it can also be used in a calculation of standard deviation.
The Weighted mean is calculated by multiplying the weight with the quantitative outcome associated with it and then adding all the products together. If all the weights are equal, then the weighted mean and arithmetic mean will be the same.
R provides weighted mean. In fact, ?weighted.mean shows this example:
## 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)
One more step:
v <- sum(wt * (x - xm)^2)
The Hmisc package contains the functions you need.
Thus:
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)
Unfortunately the author of the Hmisc package did not include an explicit wtd.sd
function. You have to square root wtd.var.
Charles Kangai
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With