计算加权平均值和标准差

时间:2012-04-06 21:20:49

标签: r statistics mean weighted

我有一个时间序列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?

由于

5 个答案:

答案 0 :(得分:32)

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)

答案 1 :(得分:23)

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。

Charles Kangai

答案 2 :(得分:4)

使用Hmisc功能时,我也会从wtd.var()收到错误。幸运的是,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)

答案 3 :(得分:0)

答案 4 :(得分:0)

包装Hmisc具有功能wt.var(),正如其他人所指出的。

请注意,您需要了解要频率还是可靠性权重。对于您而言,我相信您对可靠性权重感兴趣,因此需要明确设置normwt=TRUE。在这种情况下,您可以以任何格式(总和等于1,总和等于N,等等)给出权重。如果要使用频率权重,则需要特别注意如何指定权重。

library(Hmisc)

n <- 3
x <- seq_len(n)
w <- c(0.1, 0.2, 0.6)
w2 <- w / min(w)
w3 <- w / sum(w)

## reliability weights?
wtd.var(x = x, weights = w, normwt=TRUE)
#> [1] 0.95
wtd.var(x = x, weights = w2, normwt=TRUE)
#> [1] 0.95
wtd.var(x = x, weights = w3, normwt=TRUE)
#> [1] 0.95

## frequency weights?
wtd.var(x = x, weights = w)
#> Warning in wtd.var(x = x, weights = w): only one effective observation; variance
#> estimate undefined
#> [1] -4.222222
wtd.var(x = x, weights = w2)
#> [1] 0.5277778
wtd.var(x = x, weights = w3)
#> Warning in wtd.var(x = x, weights = w3): only one effective observation;
#> variance estimate undefined
#> [1] Inf

reprex package(v0.3.0)于2020-08-26创建