我正在检查数据分布的正常性。这里。我正在运行anderson测试,输出是无限的。如何解释结果以及如何将此类分布转换为正态分布?
check_list= ["norm","logistic"]
for typelike in check_list:
print typelike
x=mydata
print sp.stats.anderson(x, dist=typelike)
我收到以下输出
规范
AndersonResult(statistic=inf,
critical_values=array([ 0.576, 0.656, 0.787, 0.918, 1.092]),
significance_level=array([ 15. , 10. , 5. , 2.5, 1. ]))
物流
AndersonResult(statistic=2504915.1041950081,
critical_values=array([ 0.426, 0.563, 0.66 , 0.769, 0.906, 1.01 ]),
significance_level=array([ 25. , 10. , 5. , 2.5, 1. , 0.5]))
答案 0 :(得分:2)
过去,我遇到过类似的问题。不幸的是,SciPy的内部浮点计算的数值精度是有限的。如果距离正态分布的中心有几个西格玛,则CDF中的某些点会产生精确的1(或0)。然后,Anderson-Darling检验的数学公式中的对数产生无穷大的值。
如果您只有一些您感兴趣的特定分布,可能的解决方案是使用封闭形式或高精度CDF表示以及Python的高精度数学库(例如mpmath)。特别是对于正态分布,使用误差函数(erf / erfc),这应该提供准确的值。然后,Anderson-Darling测试的自定义实现只包含几行代码。
作为替代方案,如果可能的话,可以使用Cramér-von-Mises-Test,它不包含对数。