Answers:
随机变量的谐波均值定义为
以分数的时刻,是一个混乱的业务,所以不是我宁愿与工作。现在
利用中心极限定理,我们立即得到
如果和是iid,因为我们简单地使用变量算术平均值进行工作。
现在对函数使用delta方法,我们得到
这个结果是渐近的,但是对于简单的应用程序可能就足够了。
更新正如@whuber正确指出的那样,简单的应用程序用词不当。仅当存在时,中心极限定理成立,这是一个限制性假设。
更新2如果有样本,则要计算标准偏差,只需将样本矩插入公式即可。因此,对于样本,谐波均值的估计为
样本矩和分别是:
在这里,代表倒数。
最后,对于标准偏差的近似式是
我对间隔均匀分布的随机变量进行了一些蒙特卡洛模拟。这是代码:
hm <- function(x)1/mean(1/x)
sdhm <- function(x)sqrt((mean(1/x))^(-4)*var(1/x)/length(x))
n<-1000
nn <- c(10,30,50,100,500,1000,5000,10000)
N<-1000
mc<-foreach(n=nn,.combine=rbind) %do% {
rr <- matrix(runif(n*N,min=2,max=3),nrow=N)
c(n,mean(apply(rr,1,sdhm)),sd(apply(rr,1,sdhm)),sd(apply(rr,1,hm)))
}
colnames(mc) <- c("n","DeltaSD","sdDeltaSD","trueSD")
> mc
n DeltaSD sdDeltaSD trueSD
result.1 10 0.089879211 1.528423e-02 0.091677622
result.2 30 0.052870477 4.629262e-03 0.051738941
result.3 50 0.040915607 2.705137e-03 0.040257673
result.4 100 0.029017031 1.407511e-03 0.028284458
result.5 500 0.012959582 2.750145e-04 0.013200580
result.6 1000 0.009139193 1.357630e-04 0.009115592
result.7 5000 0.004094048 2.685633e-05 0.004070593
result.8 10000 0.002894254 1.339128e-05 0.002964259
我模拟N
了n
大小样本的样本。对于每个n
大小的样本,我都计算了标准估计(函数sdhm
)的估计。然后,我将这些估计的均值和标准差与每个样本估计的谐波均值的样本标准差进行比较,假设这应该是谐波均值的真实标准差。
如您所见,即使样本量适中,结果也相当不错。当然,均匀分布是表现良好的一种,因此结果良好并不奇怪。我将留给其他人调查其他发行版的行为,该代码很容易适应。
注意:在此答案的先前版本中,增量方法的结果有误,方差不正确。
我对一个相关问题的回答指出,一组正数据的谐波均值是加权最小二乘(WLS)估计(权重为)。 因此,您可以使用WLS方法计算其标准误差。 这具有一些优点,包括简单性,通用性和可解释性,以及可以由允许在其回归计算中权重的任何统计软件自动生成的优点。 1 / x 我
主要缺点是,对于高度偏斜的基础分布,计算不会产生良好的置信区间。任何通用方法都可能存在问题:谐波均值对数据集中甚至只有一个微小值的存在都很敏感。
为了说明,这里是Gamma(5)分布(适度偏斜)的独立生成的大小为样本的经验分布。蓝色线表示真实的谐波平均值(等于),而红色虚线表示加权的最小二乘估计值。蓝线周围的垂直灰色带约为谐波平均值的两侧95%置信区间。在这种情况下,在所有样本中,CI覆盖了真实的谐波平均值。重复进行此模拟(使用随机种子)表明,即使对于这些小型数据集,覆盖率也接近预期的95%比率。n = 12 4 20
这是R
模拟和图形的代码。
k <- 5 # Gamma parameter
n <- 12 # Sample size
hm <- k-1 # True harmonic mean
set.seed(17)
t.crit <- -qt(0.05/2, n-1)
par(mfrow=c(4, 5))
for(i in 1:20) {
#
# Generate a random sample.
#
x <- rgamma(n, k)
#
# Estimate the harmonic mean.
#
fit <- lm(x ~ 1, weights=1/x)
beta <- coef(summary(fit))[1, ]
message("Harmonic mean estimate is ", signif(beta["Estimate"], 3),
" +/- ", signif(beta["Std. Error"], 3))
#
# Plot the results.
#
covers <- abs(beta["Estimate"] - hm) <= t.crit*beta["Std. Error"]
plot(ecdf(x), main="Empirical CDF", sub=ifelse(covers, "", "***"))
rect(beta["Estimate"] - t.crit*beta["Std. Error"], 0,
beta["Estimate"] + t.crit*beta["Std. Error"], 1.25,
border=NA, col=gray(0.5, alpha=0.10))
abline(v = hm, col="Blue", lwd=2)
abline(v = beta["Estimate"], col="Red", lty=3, lwd=2)
}
这是指数r.v的示例。
数据点的谐波平均值定义为
假设您有 iid指数随机变量样本 。指数变量的总和遵循Gamma分布
其中。我们也知道
因此,的分布为
该rv的方差(和标准偏差)是众所周知的,例如,请参见此处。