Anderson Darling 检验

本文详细介绍了一种用于检验数据是否符合正态分布的统计方法——Anderson-Darling (AD) 检验。提供了完整的AD检验算法实现代码,并解释了如何通过计算得到检验的P值来判断数据是否服从正态分布。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 http://en.wikipedia.org/wiki/Anderson-Darling_test

/// <summary>
/// AD检验
/// </summary>
/// <param name="stats"></param>
/// <returns>P值</returns>
public static double ad_test(double[] stats)
{
//check IsNaN

int n = stats.Length;
List<double> x = new List<double>(stats);
x.Sort();
var normal = new NormalDistribution();
normal.EstimateDistributionParameters(stats);
double sum = 0;

for (int index =0; index < x.Count; index++)
{
double stat = x[index];
double stat1 = x[n -1- index];
var sz = (((2*(index+1.0)) - 1)/n)*
(Math.Log(normal.CumulativeDistribution(stat)) +
Math.Log(1 - normal.CumulativeDistribution(stat1)));

sum +=sz ;
}

double AD2 = -n - sum;

double AD2a = AD2*(1 + 0.75/n + 2.25/(n*n)); //correction factor for small sample sizes: case normal
double P = 0;

if (AD2a >= 0.00 && AD2a < 0.200)
{
P = 1 - Math.Exp(-13.436 + 101.14*AD2a - 223.73*AD2a*AD2a);
}
else if (AD2a >= 0.200 && AD2a < 0.340)
{
P = 1 - Math.Exp(-8.318 + 42.796*AD2a - 59.938*AD2a*AD2a);
}
else if (AD2a >= 0.340 && AD2a < 0.600)
{
P = Math.Exp(0.9177 - 4.279*AD2a - 1.38*AD2a*AD2a);
}
else
{
P = Math.Exp(1.2937 - 5.709*AD2a + 0.0186*AD2a*AD2a);
}



return P;
}

转载于:https://www.cnblogs.com/yuzukwok/archive/2013/06/06/3121477.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值