具有离散数据的 Kolmogorov-Smirnov:在 R 中正确使用 dgof::ks.test 的方法是什么?

机器算法验证 r 拟合优度 离散数据 kolmogorov-smirnov 测试
2022-01-17 08:03:47

初学者问题:

我想测试两个离散数据集是否来自同一分布。有人建议我进行 Kolmogorov-Smirnov 测试。

Conover ( Practical Nonparametric Statistics , 3d) 似乎说 Kolmogorov-Smirnov 检验可用于此目的,但它的行为对于离散分布是“保守的”,我不确定这意味着什么。

DavidR对另一个问题的评论说:“......您仍然可以根据 KS 统计量进行 α 级测试,但您必须找到其他方法来获得临界值,例如通过模拟。”

dgof R 包(articlecran)中的 ks.test() 版本添加了一些在 stats 包中的默认版本 ks.test() 中不存在的功能。除其他外, dgof::ks.test 包括此参数:

模拟 p 值:一个逻辑指示是否通过蒙特卡罗模拟计算 p 值,仅用于离散拟合优度测试。

模拟.p.value=T 的目的是为了完成 DavidR 的建议吗?

即使是这样,我也不确定我是否真的可以使用 dgof::ks.test 进行两个样本测试。看起来它只为连续分布提供了两个样本测试:

如果 y 是数字,则对 x 和 y 来自同一连续分布的原假设执行两样本检验。

或者,y 可以是一个字符串,命名一个连续(累积)分布函数(或这样的函数),或一个给出离散分布的 ecdf 函数(或类 stepfun 的对象)。在这些情况下,对生成 x 的分布函数是分布 y ....

(背景细节:严格来说,我的基本分布是连续的,但数据往往非常靠近少数几个点。每个点都是模拟的结果,是 -1 和之间 10 或 20 个实数的平均值1. 到模拟结束时,这些数字几乎总是非常接近 0.9 或 -.9。因此,平均值围绕着几个值聚集,我将它们视为离散的。模拟很复杂,我没有有理由认为数据遵循众所周知的分布。)

建议?

1个回答

这是对@jbrucks 扩展的回答(但也回答了原文)。

置换检验是检验 2 个样本是否来自同一总体/分布或是否存在差异的一项一般检验。选择一个感兴趣的统计数据,这可能是 KS 检验统计数据或均值的差异或中位数的差异或方差的比率或......(无论对您的问题最有意义,您可以在可能的条件下进行模拟以查看哪个统计数据给你最好的结果)并计算原始 2 个样本的统计数据。然后随机排列组之间的观察值(将所有数据点分组到一个大池中,然后将它们随机分成与原始样本大小相同的 2 组)并计算置换样本的感兴趣统计量。如此反复多次,样本统计量的分布形成您的零分布,您将原始统计量与该分布进行比较以形成检验。请注意,零假设是分布相同,而不仅仅是均值/中值/等。是平等的。

如果您不想假设分布相同,但想测试均值/中位数/等方面的差异。那么你可以做一个引导程序。

如果您知道数据来自什么分布(或至少愿意假设分布),那么您可以对参数的相等性进行似然比检验(将模型与两组的一组参数与模型进行比较具有单独的参数集)。似然比检验通常使用卡方分布,这在许多情况下都很好(渐近线),但如果您使用小样本量或测试其边界附近的参数(例如方差为 0),则近似值可能不是很好,您可以再次使用置换测试来获得更好的空分布。

这些测试都适用于连续或离散分布。您还应该包括一些功率测量或置信区间来指示不确定性的数量,缺乏显着性可能是由于低功率或统计显着差异仍然可能实际上没有意义。