Подтвердить что ты не робот

Вычисление взвешенного среднего и стандартного отклонения

У меня есть временной ряд 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?

Спасибо

4b9b3361

Ответ 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.

Чарльз Кангай

Ответ 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)