重尾分布有序统计量的渐近正态性

机器算法验证 置信区间 分位数 渐近的 订单统计 重尾
2022-03-03 05:05:13

背景: 我有一个样本,我想用重尾分布对其进行建模。我有一些极端值,因此观察值的分布相对较大。我的想法是用广义的帕累托分布对此进行建模,所以我已经这样做了。现在,我的经验数据(大约 100 个数据点)的 0.975 分位数低于我拟合数据的广义帕累托分布的 0.975 分位数。现在,我想,有没有办法检查这种差异是否值得担心?

我们知道分位数的渐近分布如下:

分位数的渐近正态性

因此,我认为通过尝试绘制广义帕累托分布的 0.975 分位数周围的 95% 置信带来满足我的好奇心是一个好主意,其参数与我从拟合数据中得到的参数相同。

国内生产总值

如您所见,我们在这里使用一些极端值。而且由于传播如此之大,密度函数的值非常小,使得置信带达到±1012使用上述渐近正态性公式的方差:

±1.960.9750.025n(fGPD(q0.975))2

所以,这没有任何意义。我有一个只有正结果的分布,置信区间包括负值。所以这里发生了一些事情。如果我计算 0.5 分位数周围的波段,波段并没有那么大,但仍然很大。

我继续看看这如何与另一个发行版一起使用,即N(1,1)分配。模拟n=100来自 a 的观察N(1,1)分布,并检查分位数是否在置信区间内。我这样做了 10000 次,以查看置信区间内模拟观测值的 0.975/0.5 分位数的比例。

    ################################################
# Test at the 0.975 quantile
################################################

#normal(1,1)

#find 0.975 quantile
q_norm<-qnorm(0.975, mean=1, sd=1)
#find density value at 97.5 quantile:
f_norm<-dnorm(q_norm, mean=1, sd=1)
#confidence bands absolute value:
band=1.96*sqrt((0.975*0.025)/(100*(f_norm)^2))
u=q_norm+band
l=q_norm-band

hit<-1:10000
for(i in 1:10000){
  d<-rnorm(n=100, mean=1, sd=1)
  dq<-quantile(d, probs=0.975)

  if(dq[[1]]>=l & dq[[1]]<=u) {hit[i]=1} else {hit[i]=0} 

}
sum(hit)/10000

#################################################################3
# Test at the 0.5 quantile  
#################################################################
#using lower quantile:

#normal(1,1)

#find 0.7 quantile
q_norm<-qnorm(0.7, mean=1, sd=1)
#find density value at 0.7 quantile:
f_norm<-dnorm(q_norm, mean=1, sd=1)
#confidence bands absolute value:
band=1.96*sqrt((0.7*0.3)/(100*(f_norm)^2))
u=q_norm+band
l=q_norm-band

hit<-1:10000
for(i in 1:10000){
  d<-rnorm(n=100, mean=1, sd=1)
  dq<-quantile(d, probs=0.7)

  if(dq[[1]]>=l & dq[[1]]<=u) {hit[i]=1} else {hit[i]=0} 

} 
sum(hit)/10000

编辑:我修复了代码,两个分位数在n=100σ=1. 如果我将标准偏差提高到σ=2,那么乐队内的热门歌曲很少。所以问题仍然存在。

EDIT2:正如一位乐于助人的绅士在评论中指出的那样,我撤回了我在上面第一个 EDIT 中所声称的内容。实际上,这些 CI 看起来适合正态分布。

如果要检查某个观察到的分位数在给定某个候选分布的情况下是否可能存在,那么顺序统计量的这种渐近正态性是否只是一种非常糟糕的度量?

直观地说,在我看来,分布的方差(人们认为它创建了数据,或者在我的 R 示例中,我们知道创建了数据)和观察次数之间存在关系。如果您有 1000 个观测值和巨大的方差,那么这些波段很糟糕。如果一个人有 1000 个观测值和一个小的方差,那么这些波段可能是有意义的。

有人愿意帮我解决这个问题吗?

1个回答

我假设您的推导来自类似于此页面上的内容。

我有一个只有正结果的分布,置信区间包括负值。

好吧,考虑到正常的近似值是有意义的。没有什么可以阻止正态近似为您提供负值,这就是为什么当样本量较小和/或方差较大时,它对于有界值的近似值不好。如果你增加样本量,那么区间会缩小,因为样本量是区间宽度表达式的分母。方差通过密度进入问题:对于相同的均值,较高的方差将具有不同的密度,在边缘较高,在中心附近较低。较低的密度意味着较宽的置信区间,因为密度在表达式的分母中。

一些谷歌搜索发现了这个页面,除其他外,它使用二项分布的正态近似来构建置信限。基本思想是每个观测值以概率q低于分位数,因此分布是二项式的。当样本量足够大(这很重要)时,二项分布可以很好地近似于具有均值的正态分布nq和方差nq(1q). 所以置信下限会有指数j=nq1.96nq(1q), 置信上限将有指数k=nq1.96nq(1q). 有一种可能k>n或者j<1在边缘附近使用分位数时,我发现的参考文献对此保持沉默。我选择只将最大值或最小值视为相关值。

在您的代码的以下重写中,我构建了经验数据的置信限度并测试了理论分位数是否落在其中。这对我来说更有意义,因为观察到的数据集的分位数是随机变量。n > 1000 的覆盖率约为 0.95。对于 n = 100,0.85 的情况更糟,但对于样本量较小的尾部附近的分位数,这是可以预料的。

#find 0.975 quantile
q <- 0.975
q_norm <- qnorm(q, mean=1, sd=1)

#confidence bands absolute value (note depends on sample size)
n <- 10000
band <- 1.96 * sqrt(n * q * (1 - q))

hit<-1:10000
for(i in 1:10000){
  d<-sort(rnorm(n, mean=1, sd=1))
  dq<-quantile(d, probs=q)
  u <- ceiling(n * q + band)
  l <- ceiling(n * q - band)
  if (u > n) u = n
  if (l < 1) l = 1
  if(q_norm>=d[l] & q_norm<=d[u]) {hit[i]=1} else {hit[i]=0} 

}
sum(hit)/10000

至于确定什么样本量“足够大”,那么越大越好。任何特定样本是否“足够大”在很大程度上取决于手头的问题,以及您对置信限的覆盖范围等问题的挑剔程度。