web-dev-qa-db-ja.com

加重平均と標準偏差の計算

時系列があります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で何に対応するか知っている人はいますか?

ありがとう

32
Alex

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)

もう1つのステップ:

v <- sum(wt * (x - xm)^2)
32

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を平方根にする必要があります。

チャールズカンガイ

23
user3770859

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)
5

Hmiscパッケージはこの機能を提供します:

http://rgm2.lab.nig.ac.jp/RGM2/func.php?rd_id=Hmisc:wtd.stats

0
Alex