Вычисление взвешенного среднего и стандартного отклонения
У меня есть временной ряд 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?
Спасибо
Ответы
Ответ 1
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)
Ответ 2
Пакет 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.
Чарльз Кангай
Ответ 3
Пакет Hmisc предоставляет следующие функции:
http://rgm2.lab.nig.ac.jp/RGM2/func.php?rd_id=Hmisc:wtd.stats
Ответ 4
Я также получаю ошибки от Hmisc
при использовании функции wtd.var()
. К счастью, SDMTools
имеет сопоставимую функциональность и даже вычисляет SD непосредственно для вас, без необходимости принимать дисперсию sqrt.
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)