给定一个浮点数的样本数据集,我们如何确定它的概率分布并证明它?此后还要生成相同分布的随机数。
识别概率分布
简短的回答是你不能。
更长的答案是,您确实需要考虑您要完成的工作以及要回答的问题。
对分布的测试不是为了证明特定的分布,而是为了反驳(它们并不完美,你仍然有 I 类和 II 类错误)。但是,通常建立一个精确的分布不如找到一个合理的近似值重要。使用舍入误差和机器精度,您无法区分数据是来自正态分布还是来自与正态分布略有不同而没有无限量数据的分布(由于四舍五入)。但是将这些数据视为正常数据可能仍然是合理的。CLT 告诉我们,即使数据显然不是来自正态分布,我们通常也可以使用正态分布进行建模(假设我们正在建模样本均值的行为,而不是总体)。
比统计测试和证明更重要的是生成数据的科学知识。特定的分布(以及随之而来的假设)在科学上是否合理?
我更喜欢视觉测试而不是查看分布的精确测试,从假设的分布中生成数据并创建几个图,一个带有原始数据,其余的带有生成的数据,然后看看你是否可以找出不同的( R 的 TeachingDemos 包中的 vis.test 函数就是这样做的)。如果您无法分辨哪个不同,那么假设的分布可能“足够接近”。即使您能分辨出差异,您也可能会认为差异并不那么重要。
如果您想从与现有数据相似的分布中生成新数据,那么您可以采用引导样本,或引导样本加上一些随机噪声(这是从内核密度估计中采样),或者您可以进行对数样条拟合并从该发行版(请参阅 R 的 logspline 包作为此工具的一种工具)。
“证明”数据来自某个分布(没有无限数量的样本)的唯一方法是准确地知道该数据是如何生成的。例如,如果您知道数据来自循环二元正态随机变量的大小,则它具有 Rician 分布。或者,如果数据来自泊松过程中事件之间的时间,那么它具有指数分布。
由于缺乏对生成过程的精确定义,您可以使用许多经验措施来确定潜在分布。首先,看数据本身:是离散的还是连续的?是否支持 (-inf,inf)、[0,inf)、(0,1) 或其他间隔?这些知识可用于缩小可能适合您的数据的单变量参数分布。示例包括高斯分布、Cauchy、指数、Gamma、广义极值、Rician、Wrapped Cauchy、Von Mises、Binomial 和 Beta。确定分布的支持后,使用信息准则(例如 Akaike 信息准则 (AIC) 或贝叶斯信息准则 (BIC))测试潜在的单变量分布。这些平衡了给定分布中的参数数量与数据拟合给定分布的可能性。目视检查得分最高的分布,看看它们是否适合数据。
另一种方法是构建数据的核密度估计。这基本上是创建数据直方图的复杂版本,其中在每个数据点放置一个小的高斯(或其他)分布,并根据这些总和构建估计分布。有关详细信息,请参阅核密度估计。这具有能够拟合数据中的任意分布的优点,但是从该分布中采样具有很大的计算成本,尤其是对于大型数据集。
另一种选择是从数据中构建高斯混合模型 (GMM),其中使用少量高斯分布来近似底层分布。有关详细信息,请参阅混合模型。
适用于您的应用程序的方法取决于应用程序本身。如果您可以从生成过程中确定分布,那太好了,估计参数就完成了!如果没有,次佳方案是找到准确描述数据的单变量参数分布。缺乏这一点,可以使用混合模型、KDE 或其他方法来近似分布。
如果您尝试进行探索性数据分析,则可以使用一些图形技术。
我可以建议NIST 手册中的第 1.3.4 章。特别是,任何概率图都可能具有洞察力(例如概率图相关系数图、分位数-分位数图等)。
对于一些常见的分布,您可以尝试拟合Tukey-Lambda 分布,并从 lambda 形状参数的拟合值中提取分布信息。