这是上述3种方法的一般描述。
Chi-Squared方法的工作原理是根据分布将仓中的观察数与预计仓中的观察数进行比较。对于离散分布,垃圾箱通常是离散的可能性或它们的组合。对于连续分布,您可以选择切点来创建箱。许多实现此功能的功能会自动创建垃圾箱,但是如果您要在特定区域进行比较,则应该能够创建自己的垃圾箱。此方法的缺点是,将不会检测到仍将值放在同一bin中的理论分布和经验数据之间的差异,例如,如果在理论上应将2到3之间的数字扩展到整个范围,则将进行舍入(我们希望看到类似2.34296的值),
KS检验统计量是被比较的两个累积分布函数之间的最大距离(通常是理论值和经验值)。如果2个概率分布只有1个交点,则1减去最大距离就是2个概率分布之间的重叠区域(这有助于某些人可视化所测量的内容)。考虑在同一个图上绘制理论分布函数和EDF,然后测量两个“曲线”之间的距离,最大的差异是测试统计量,并且当null为真时,将其与值的分布进行比较。这捕获了分布形状或与另一分布相比偏移或拉伸的1个分布的差异。1个ñ。该测试取决于您知道参考分布的参数,而不是根据数据进行估计(您的情况在这里看起来不错)。如果您从相同的数据估计参数,则仍可以通过与您自己的仿真而不是标准参考分布进行比较来获得有效的测试。
Anderson-Darling检验还像KS检验一样使用CDF曲线之间的差异,但不是使用最大差异,而是使用2条曲线之间的总面积的函数(实际上是对差异进行平方,对它们进行加权,以便尾部具有更多的影响力,然后在分布范围内进行整合)。与KS相比,这给异常值提供了更大的权重,并且在存在几个小差异时(与KS强调的1个大差异相比)也赋予了更大的权重。这可能最终使测试无法胜任,以发现您认为不重要的差异(温和的四舍五入等)。像KS测试一样,它假定您没有从数据中估计参数。
这是一个图表,显示了最后2条的总体思路:
基于此R代码:
set.seed(1)
tmp <- rnorm(25)
edf <- approxfun( sort(tmp), (0:24)/25, method='constant',
yleft=0, yright=1, f=1 )
par(mfrow=c(3,1), mar=c(4,4,0,0)+.1)
curve( edf, from=-3, to=3, n=1000, col='green' )
curve( pnorm, from=-3, to=3, col='blue', add=TRUE)
tmp.x <- seq(-3, 3, length=1000)
ediff <- function(x) pnorm(x) - edf(x)
m.x <- tmp.x[ which.max( abs( ediff(tmp.x) ) ) ]
ediff( m.x ) # KS stat
segments( m.x, edf(m.x), m.x, pnorm(m.x), col='red' ) # KS stat
curve( ediff, from=-3, to=3, n=1000 )
abline(h=0, col='lightgrey')
ediff2 <- function(x) (pnorm(x) - edf(x))^2/( pnorm(x)*(1-pnorm(x)) )*dnorm(x)
curve( ediff2, from=-3, to=3, n=1000 )
abline(h=0)
上方的图表显示了来自标准法线的样品的EDF与标准法线的CDF的对比,并用线表示KS统计。中间的图显示了两条曲线之间的差异(您可以看到KS统计数据发生的位置)。然后底部是加权差的平方,AD测试基于该曲线下的面积(假设我正确无误)。
其他测试则查看qqplot中的相关性,查看qqplot中的斜率,根据矩比较均值,var和其他统计量。