计算 R 中连续分布的 Anderson-Darling 检验统计量
Computing Anderson-Darling test statistics for continuous distributions in R
首先我不确定这是属于 CrossValidated 还是属于 Whosebug。如果我在错误的站点上发布了这个问题,我很抱歉。
我正在使用 R 将几个数据集与观察数据集进行比较。每个数据集都有大约 1000 万个连续浮点值(每个数据集的数据向量的长度并不完全相同)。
我通常使用标准 stats
包中的 ks.test()
函数计算 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 测试完全不同
None 简而言之,可以像标准 ks.test()
函数或包 flexmix
中的 Kullbach-Leibler 函数 KLdiv
一样简单地使用(它接受密度值矩阵)。
如何使用 R 计算两个分布之间的 AD 统计量,简单地作为连续数据的两个向量提供?
我不是统计学专家,我最近正在学习AD测试自己,和你有同样的问题。在阅读了一些文章后,我知道如何通过 kSamples
解释 ad.test()
的结果。
原来的AD测试是为了检查一个数字样本是否属于某个分布。所以为了比较两个样本(或更多),我们应该使用以 k-sample 方式进行测试的函数,而不是原来的方式。
如果您从 kSamples
包中将两个向量输入到 ad.test()
中:
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-value"。至于行,版本 1 表示连续种群中的 k 样本 AD 测试,版本 2 表示离散父种群。所以我猜,如果你的数据是连续的,你应该取第一行的 p 值,如果它是离散的,那么第二行。
首先我不确定这是属于 CrossValidated 还是属于 Whosebug。如果我在错误的站点上发布了这个问题,我很抱歉。
我正在使用 R 将几个数据集与观察数据集进行比较。每个数据集都有大约 1000 万个连续浮点值(每个数据集的数据向量的长度并不完全相同)。
我通常使用标准 stats
包中的 ks.test()
函数计算 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 测试完全不同
None 简而言之,可以像标准 ks.test()
函数或包 flexmix
中的 Kullbach-Leibler 函数 KLdiv
一样简单地使用(它接受密度值矩阵)。
如何使用 R 计算两个分布之间的 AD 统计量,简单地作为连续数据的两个向量提供?
我不是统计学专家,我最近正在学习AD测试自己,和你有同样的问题。在阅读了一些文章后,我知道如何通过 kSamples
解释 ad.test()
的结果。
原来的AD测试是为了检查一个数字样本是否属于某个分布。所以为了比较两个样本(或更多),我们应该使用以 k-sample 方式进行测试的函数,而不是原来的方式。
如果您从 kSamples
包中将两个向量输入到 ad.test()
中:
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-value"。至于行,版本 1 表示连续种群中的 k 样本 AD 测试,版本 2 表示离散父种群。所以我猜,如果你的数据是连续的,你应该取第一行的 p 值,如果它是离散的,那么第二行。