计算R的连续分布的Anderson-Darling检验统计量

时间:2015-06-30 09:00:22

标签: r comparison distribution

首先,我并不确定这是属于CrossValidated还是StackOverflow。如果我在错误的网站上发布此问题,我很抱歉。

我使用R将几个数据集与观测数据集进行比较。每个数据集都有大约1000万个连续浮点值(每个数据集的数据向量长度不完全相同)。

我通常使用标准ks.test()包中的stats函数来计算 Kolmogorov-Smirnov 统计量,但现在我对极端值非常感兴趣分配。据我所知,KS几乎隐藏了这些。对于 Kullback-Leibler 也是如此(如果我错了,请随时纠正我。)

另一方面, Anderson-Darling 测试的权重是考虑到分布的极端情况。但是,我还没有找到一个简单的AD测试实现,只能将两个向量用作输入(如stats::ks.test()那样只需发出ks.test(obs.data, mod.data),其中两个输入很简单矢量),我都不能理解如何使我的数据适应我尝试过的功能。

我已经看过以下功能:

    来自包cvm.test()
  • dgof,带有选项type="A2":需要分发作为第二个输入,而不是向量
  • 来自包ad.test()
  • truncgof:需要分发作为第二个输入
  • 来自ad.test()包的
  • goftest:如上所述
  • 来自ad.test()包的
  • ADGofTest:如上所述
  • 来自包ad.test()
  • kSamples:在这种情况下,我不清楚输出代表什么,以及我如何将其标准化,因为它似乎严重依赖关于样本数量
  • 来自包ad.test()
  • nortest:仅测试正常性
  • 来自包ADbootstrap.test()
  • homtest:这似乎与标准AD测试完全不同

简而言之,上述所有内容都不能简单地用作标准ks.test()函数或来自包KLdiv的Kullbach-Leibler函数flexmix(它接受矩阵密度值)。

如何使用R?

计算两个分布之间的AD统计量,这两个分布只是作为连续数据的两个向量提供的?

1 个答案:

答案 0 :(得分:3)

我不是统计学方面的专家,而且我正在学习AD测试,并且与你有同样的问题。在阅读了一些文章后,我知道如何通过ad.test() kSamples来解释结果。

原始AD测试用于检查数字样本是否属于某个分布。因此,为了比较两个样本(或更多),我们应该使用以k样本方式进行测试的函数,而不是原始方式。

如果您从ad.test()包中输入两个向量kSamples

library(kSamples)
x <- ad.test(c(1,2,3,4,5), c(11,22,33,44,55))

结果为您提供了一个矩阵:

print(x)

Anderson-Darling k-sample test.

Number of samples:  2
Sample sizes:  5, 5
Number of ties: 0

Mean of  Anderson-Darling  Criterion: 1
Standard deviation of  Anderson-Darling  Criterion: 0.63786

T.AD = ( Anderson-Darling  Criterion - mean)/sigma

Null Hypothesis: All samples come from a common population.

              AD  T.AD  asympt. P-value
version 1: 3.913 4.566          0.00517
version 2: 4.010 4.726          0.00452

,或者

x$ad

               AD   T.AD  asympt. P-value
version 1: 3.9127 4.5664        0.0051703
version 2: 4.0100 4.7260        0.0045199

AD是Anderson-Darling统计量,由相应的方程计算。 (ref article),T.AD由(AD-(k-1))/ sigma计算,其中(k-1)表示在零假设下限制AD统计量的分布是(k-1) - 单样本AD统计量的渐近分布的折叠卷积; sigma是AD统计量的标准差。然后渐近。 P值将是我们正在寻找的“p值”。对于行,版本1表示连续群体中的k样本AD测试,版本2表示具有离散父群体的k样本AD测试。所以我猜,如果你的数据是连续的,你应该取第一行的p值,如果它是离散的,那么第二行。