C#的正常性测试?

时间:2013-09-25 16:59:12

标签: c# statistics normal-distribution

我们的代码库中有一个PRNG,我们认为它的方法有一个错误,就是产生符合给定正态分布的数字。

是否存在正常性测试的C#实现,我可以在单元测试套件中利用它来断言该模块的行为符合预期/预期?

我的偏好是具有如下签名的东西:

bool NormalityTest.IsNormal(IEnumerable<int> samples)

3 个答案:

答案 0 :(得分:1)

Math.Net具有分布函数和随机数采样。它可能是使用最广泛的数学库,非常可靠。

http://numerics.mathdotnet.com/

http://mathnetnumerics.codeplex.com/wikipage?title=Probability%20Distributions&referringTitle=Documentation

答案 1 :(得分:0)

我不知道任何c-implementation测试数据的正常性。我有同样的问题,并建立自己的例程。 This web-page给了我很多帮助。它是为在Excel中执行测试而编写的,但它为您提供了所有必要的系数(Royston)和逻辑。

答案 2 :(得分:0)

您可以尝试以下操作:https://github.com/sysstat/sysstat

向下滚动到示例:

// Let's say we would like to determine whether a set
// of observations come from a normal distribution:
double[] samples =
{
    0.11, 7.87, 4.61, 10.14, 7.95, 3.14, 0.46, 4.43,
    0.21, 4.75, 0.71, 1.52, 3.24, 0.93, 0.42, 4.97,
    9.53, 4.55, 0.47, 6.66
};

// For this, we can use the Shapiro-Wilk test. This test tests the null hypothesis 
// that samples come from a Normal distribution, vs. the alternative hypothesis that 
// the samples do not come from such distribution. In other words, should this test
// come out significant, it means our samples do not come from a Normal distribution.

// Create a new Shapiro-Wilk test:
var sw = new ShapiroWilkTest(samples);

double W = sw.Statistic; // should be 0.90050
double p = sw.PValue;    // should be 0.04209
bool significant = sw.Significant; // should be true

// The test is significant, therefore we should reject the null 
// hypothesis that the samples come from a Normal distribution.