样本峰度是否存在无可救药的偏差?

机器算法验证 r 无偏估计器 峰度
2022-03-12 11:28:17

我正在查看一个相当偏斜的随机变量的样本峰度,结果似乎不一致。为了简单说明问题,我查看了对数正态 RV 的样本峰度。在 R 中(我正在慢慢学习):

library(moments); 

samp_size = 2048;
n_trial = 4096;

kvals <- rep(NA,1,n_trial); #preallocate
for (iii in 1:n_trial) {
    kvals[iii] <- kurtosis(exp(rnorm(samp_size)));
}
print(summary(kvals));

我得到的总结是

   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  11.87   28.66   39.32   59.17   61.70 1302.00 

根据维基百科,这个对数正态 RV 的峰度应该在 114 左右。显然,样本峰度是有偏差的。

做一些研究,我发现样本峰度偏向于小样本量。我使用了 CRAN 中的包提供的“G2”估计器e1071,并且在这个样本量下得到了非常相似的结果。

问题:以下哪项描述了正在发生的事情:

  1. 对于这个 RV,样本峰度的标准误差非常大(即使标准误差的手波常见估计是阶)。或者,我在这项研究中使用的样本太少(2048 个)。1/n
  2. 样本峰度的这些实现存在数值问题,这些问题可以通过例如 Terriberry 的方法来纠正(与 Welford 的方法比简单的样本方差方法给出更好的结果的方式大致相同)。
  3. 我错误地计算了总体峰度。(哎哟)
  4. 样本峰度本质上是有偏差的,对于如此小的样本量,您永远无法修复它。
2个回答

偏差修正它不是很大。我相信峰度的抽样方差与第八个(!)中心矩成正比,这对于对数正态分布来说可能是巨大的。除非 CV 很小,否则您将需要在模拟中进行数百万次(或更多)试验来检测偏差。(绘制 kval 的直方图以查看它们的偏斜程度。)

正确的峰度确实约为 113.9364。

就 R 风格而言,将模拟封装在一个函数中会很方便,这样您就可以轻松地修改样本大小或试验次数。

[就在 R 风格上 - @whuber 已经回答了 Kurtsosis Q]

这有点太复杂了,无法发表评论。对于像您使用的这样简单的循环,我们可以将@whuber 将模拟封装在函数中的建议与函数结合起来replicate()replicate()为您处理分配和运行循环。下面给出一个例子:

require(moments)
foo <- function(size, trials, meanlog = 0, sdlog = 1) {
    replicate(trials,
              kurtosis(rlnorm(size, meanlog = meanlog, 
                              sdlog = sdlog)))
}

我们像这样使用它:

> set.seed(1)
> out <- foo(2048, 10000)
> summary(out)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  10.93   28.77   39.99   62.53   62.58 1557.00

请注意,我使用该rlnorm()函数来生成对数正态随机变量。它相当于exp(rnorm())在您的循环中,但使用了正确的工具,并且我们允许我们的函数传递用户指定的对数正态分布参数。

> set.seed(123)
> exp(rnorm(1))
[1] 0.5709374
> set.seed(123)
> rlnorm(1)
[1] 0.5709374