Anderson-Darling正态性检验是一种用于确定数据集是否服从正态分布(也称为高斯分布或钟形曲线分布)的统计方法。它基于Anderson和Darling于1954年提出的检验统计量。该检验的基本原理和用途如下:
基本原理:
-  零假设(Null Hypothesis):Anderson-Darling检验的零假设是数据集来自于正态分布。这意味着,如果数据确实服从正态分布,则零假设成立。 
-  计算Anderson-Darling统计量:检验首先计算Anderson-Darling统计量,这是一个衡量数据与正态分布拟合的度量。该统计量基于数据的观察值和正态分布的期望值之间的差异。 
-  与临界值比较:接下来,Anderson-Darling统计量与临界值进行比较。临界值是根据所选的显著性水平(通常为5%)和数据集的大小计算得出的。如果Anderson-Darling统计量大于临界值,就意味着数据不太可能来自于正态分布。 
-  做出决策:根据统计量与临界值的比较,可以决定是否拒绝零假设。如果统计量足够大,超过了临界值,通常会拒绝零假设,这意味着数据不服从正态分布。否则,不能拒绝零假设,这表示数据可能服从正态分布。 
用途:
-  数据分布检查:Anderson-Darling检验可用于验证数据是否符合正态分布的假设。这对于许多统计分析和模型建立的前提非常重要,因为许多统计方法都要求数据服从正态分布。 
-  质量控制:在制造业和质量控制中,Anderson-Darling检验可以用来检查生产过程是否产生了正态分布的输出。如果不是,可能需要采取措施来改进过程。 
-  金融分析:在金融领域,正态分布假设经常用于分析资产价格变动。Anderson-Darling检验可以用来验证这种假设的有效性。 
-  生物统计学:在生物统计学中,研究人员可能使用Anderson-Darling检验来确定生物数据是否遵循正态分布,例如基因表达数据或生物测量数据。 
总之,Anderson-Darling正态性检验是一种重要的统计工具,可用于验证数据是否符合正态分布的假设,从而支持各种领域的分析和决策。
from scipy import stats
import numpy as np# 创建一个示例数据集
data = np.random.normal(0, 1, 100)# 执行Anderson-Darling正态性检验
result = stats.anderson(data)# 输出检验结果
print("Anderson-Darling统计量:", result.statistic)
print("临界值:", result.critical_values)
if result.statistic > result.critical_values[2]:print("数据不服从正态分布")
else:print("数据可能服从正态分布")print("--------------------------")
print("-检验的结果包括Anderson-Darling统计量、临界值、显著性水平以及适配结果,用于判断数据是否服从正态分布-")
print(result)
print(type(result))
print("--------------------------")
# Anderson-Darling统量
print("Anderson-Darling统计量:", result.statistic)# 临界值
print("临界值:", result.critical_values)# 显著性水平
print("显著性水平:", result.significance_level)# 适配结果
fit_result = result.fit_result
print("适配结果 params:", fit_result.params)
print("适配结果 success:", fit_result.success)
print("适配结果 message:", fit_result.message)
Anderson-Darling统计量: 0.8746794117758157
 临界值: [0.555 0.632 0.759 0.885 1.053]
 数据不服从正态分布
 --------------------------
 ----检验的结果包括Anderson-Darling统计量、临界值、显著性水平以及适配结果,用于判断数据是否服从正态分布-----
 AndersonResult(statistic=0.8746794117758157, critical_values=array([0.555, 0.632, 0.759, 0.885, 1.053]), significance_level=array([15. , 10. ,  5. ,  2.5,  1. ]), fit_result=  params: FitParams(loc=-0.00916569417046395, scale=1.012016300795819)
  success: True
  message: '`anderson` successfully fit the distribution to the data.')
 <class 'scipy.stats._morestats.AndersonResult'>
 --------------------------
 Anderson-Darling统计量: 0.8746794117758157
 临界值: [0.555 0.632 0.759 0.885 1.053]
 显著性水平: [15.  10.   5.   2.5  1. ]
 适配结果 params: FitParams(loc=-0.00916569417046395, scale=1.012016300795819)
 适配结果 success: True
 适配结果 message: `anderson` successfully fit the distribution to the data.
 [Finished in 5.0s]