Ale*_*lex 29 statistics r 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}
Run Code Online (Sandbox Code Playgroud)
参考:http://en.wikipedia.org/wiki/Weighted_mean#Weighted_sample_variance
目标是基本上加重观察的时间进一步缩短.这很容易实现,但我想尽可能多地使用内置的功能.有谁知道这对应于R?
谢谢
Mat*_*erg 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)
Run Code Online (Sandbox Code Playgroud)
更进一步:
v <- sum(wt * (x - xm)^2)
Run Code Online (Sandbox Code Playgroud)
小智 26
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)
Run Code Online (Sandbox Code Playgroud)
不幸的是,Hmisc包的作者没有包含显式wtd.sd函数.你必须平根wtd.var.
Charles Kangai
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)
Run Code Online (Sandbox Code Playgroud)