来自可能有长尾分布的测量的平均值误差

机器算法验证 分布 置信区间
2022-04-15 22:14:37

我正在使用朗之万动力学模拟来测量粒子在参数空间中离开某个区域的第一次撞击时间。我想测量平均首次击球时间(而不是例如中位数),因为在做了一些简化假设后,我可以明确计算首次击球时间的平均值(但不是整个分布),并希望将其与数据来测试那些简化的假设是否让我进入了正确的球场。

我的问题是,从我的模拟中测量的平均首次击球时间似乎随着我运行的时间而增加(更多的时间意味着更多的轨迹/样本用于计算这个平均值)。在长度为的游程和长度为的游程之间,平均值增加了 3 个以上的标准误差。之间存在类似的增加T1.2T0.8TT. 所以经验分布的尾部似乎会影响均值,并且似乎系统地低估了均值和标准误差,这让我对长尾分布感到疑惑。然而理论上,一组非零的轨迹测量不可能永远留在该区域内,因此平均退出时间必须是有限的。

我当前样本的直方图如下所示,平均值约为 1.4: 在此处输入图像描述

我的计算能力有限,我可以运行我的模拟多长时间。我希望如果我继续运行我的模拟,平均值最终会渐近地达到某个值,但是这在我当前的样本中尚不可见。鉴于我拥有的数据,有没有办法在我当前的平均值上生成置信区间,以确保这个渐近值包含在区间中?

关于模拟/系统的更多细节:粒子逃离的区域是不均匀的并且有其他居住者,所以理论上它是一个黑匣子,除了我试图测试的几个简化假设之外,理论上没有什么可以做的. 多个粒子同时逃逸,但它们之间的相互作用极小,并且它们在该区域内的密度很低,因此遇到另一个粒子的机会很低。因此,两个粒子的退出时间并不是完全独立的,而是两个粒子的时间之间的任何相关性都将非常微弱。该系统也处于稳定状态,因此平均而言,该区域内始终存在相同数量的粒子。

4个回答

当添加更多样本时,平均值不断增加的行为通常意味着平均时间是无限的。例如,您可能面临一个带有的帕累托分布α1

您可能不会遇到这种精确的分布,但它是具有无限均值的相当简单分布的最标准示例,因此值得一看;并且它将具有与您所描述的相同的行为:它只采用有限值(大部分为 1 或略高于),因此任何有限样本的平均值都是有限的,但它会随着样本数量的增加而增长。

为了加强我的论点,我将解释为什么你的“我希望如果我继续运行我的模拟,平均值最终会渐近地达到某个值”一定是错误的。假设前次模拟后的平均值为,前次模拟后的平均值为然后,模拟的平均值为,这意味着我们有但是,由于您的模拟是独立的,,因此如果平均值是有限且定义明确的,您将无法始终找到这种行为。nμ12nμ2<μ1n+1,,2nμ3=2μ2μ1<μ2μ3<μ2<μ1E[μ3]=E[μ1]

两组样本的经验均值之差很可能大于均值的标准误。渐近地,标准误差将置信区间定义为 0.67 左右的水平。如果分布有长尾且样本均值不稳定,则样本标准差应该很大。只要基础分布具有明确定义的均值和方差,事情就应该或多或少地解决。最后,如果样本均值不稳定,那么估计和报告更稳健的位置度量(例如中位数)可能更有意义。

我认为您的问题的答案可能与您的研究领域(例如分子动力学)比统计数据更相关。统计学处理随机变量的概率分布,对于应用中心极限定理,对于总体(大样本)进行推断,您的分布是什么并不重要。但是,由于您已经提到这种模拟不适用于您的情况,每次均值随机变化,因此“在该区域花费的时间”很可能是一个随机变量,根本没有有限均值(例如,随机正态分布假设,即使变量是随机的,变量也会趋向于中心值,即均值,其他已知的标准分布也是如此,它们模拟了一些自然现象)。但如果“花费的时间” 变量是完全随机的,其值受模型中其他变量的影响,无论您在模拟中花费多少时间,都不能期望“任何平均值”。例如,股票价格在一个时间间隔内的变动本质上是完全随机的,它不能在任何已知的概率分布下建模,也不能有任何与之相关的均值。

但是,如果您的理论表明所花费的时间应该是有限的平均值(我直觉分子运动不太可能)并且如果您确定这一点,那么您应该努力找出分布函数及其矩生成函数等., 达到平均函数。

注意:如果有限均值在理论上是肯定的,那么估计均值的另一种统计上合理的方法是 MLE 估计方法(尤其是在数据科学范式中)。但是,估计总体参数的 MLE 方法强制要求对总体分布的性质及其密度函数进行假设(这对于基于 CLT 的对样本进行推断的推论统计不需要)。但是数据科学范式中可能还有其他可用的技术,可以估计人口参数,但它们可能依赖于定量和计算密集型算法。

编辑:

如果当您添加更多数据时均值发生显着变化,那么您可能没有有限均值或不是单峰的。hist(c(rnorm(100, 0, 1) + rnorm(100, 3, 1)))`。但我猜您已经制作了数据的直方图或者已经能够将其可视化。所以这就是我要做的。1.) 随着数据样本数量的增加计算平均值。你可以做得越多越好,但只做可行的事。2.) 查看均值是否遵循某种收敛的无限级数。也许是几何级数、p 系列或类似的东西。如果您发现平均值遵循某种模式,例如将是一个简单的模式。即使你的意思是上下移动并且它似乎没有遵循你可能有的模式const.nn+11i在序列或类似的东西。

我希望这更接近你正在寻找的东西。

当您说模拟时,我假设您正在运行蒙特卡罗模拟或构建引导样本。无论哪种方式,这都是您想要做的。1. 运行 b 次模拟 2. 在每个第 b 次模拟期间抽取一个随机样本,该样本是具有替换的数据集的大小。3. 计算抽取样本的平均值。4. 模拟已完成,所以现在您有了一个包含 b 个样本均值的数组。取那个数组的平均值,这就是你的平均值。您还可以创建可信区域(当您运行模拟时,置信区间不再适用,因为您的区域是经验性的)。

B <- 1000
n <- dim(data)[1]
ind <- seq_len(n)
means_vector <- double(B)
for ( b in seq_len(B)) {
    rand_samp <- sample(ind, n, replace = TRUE)
means_vector[B] <- mean(data[rand_samp])
}
mean(means_vector)
quantile(means_vector, c(0.25, 0.975))

这是引导方法。这很简单,并且有一个 R 函数“boot()”可以让事情变得疯狂。