csharpfftfsharpintegrationinterpolationlinear-algebramathdifferentiationmatrixnumericsrandomregressionstatisticsmathnet
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
212 lines
12 KiB
212 lines
12 KiB
// <copyright file="DescriptiveStatisticsTests.cs" company="Math.NET">
|
|
// Math.NET Numerics, part of the Math.NET Project
|
|
// http://mathnet.opensourcedotnet.info
|
|
//
|
|
// Copyright (c) 2009 Math.NET
|
|
//
|
|
// Permission is hereby granted, free of charge, to any person
|
|
// obtaining a copy of this software and associated documentation
|
|
// files (the "Software"), to deal in the Software without
|
|
// restriction, including without limitation the rights to use,
|
|
// copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
// copies of the Software, and to permit persons to whom the
|
|
// Software is furnished to do so, subject to the following
|
|
// conditions:
|
|
//
|
|
// The above copyright notice and this permission notice shall be
|
|
// included in all copies or substantial portions of the Software.
|
|
//
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
|
// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
|
// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
// OTHER DEALINGS IN THE SOFTWARE.
|
|
// </copyright>
|
|
|
|
namespace MathNet.Numerics.UnitTests.StatisticsTests
|
|
{
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using MathNet.Numerics.Statistics;
|
|
using MbUnit.Framework;
|
|
|
|
[TestFixture]
|
|
public class DescriptiveStatisticsTests
|
|
{
|
|
private readonly IDictionary<string, StatTestData> mData = new Dictionary<string, StatTestData>();
|
|
|
|
public DescriptiveStatisticsTests()
|
|
{
|
|
StatTestData lottery = new StatTestData("./data/NIST/Lottery.dat");
|
|
mData.Add("lottery", lottery);
|
|
StatTestData lew = new StatTestData("./data/NIST/Lew.dat");
|
|
mData.Add("lew", lew);
|
|
StatTestData mavro = new StatTestData("./data/NIST/Mavro.dat");
|
|
mData.Add("mavro", mavro);
|
|
StatTestData michelso = new StatTestData("./data/NIST/Michelso.dat");
|
|
mData.Add("michelso", michelso);
|
|
StatTestData numacc1 = new StatTestData("./data/NIST/NumAcc1.dat");
|
|
mData.Add("numacc1", numacc1);
|
|
StatTestData numacc2 = new StatTestData("./data/NIST/NumAcc2.dat");
|
|
mData.Add("numacc2", numacc2);
|
|
StatTestData numacc3 = new StatTestData("./data/NIST/NumAcc3.dat");
|
|
mData.Add("numacc3", numacc3);
|
|
StatTestData numacc4 = new StatTestData("./data/NIST/NumAcc4.dat");
|
|
mData.Add("numacc4", numacc4);
|
|
}
|
|
|
|
[Test]
|
|
public void Constructor_ThrowArgumentNullException()
|
|
{
|
|
const IEnumerable<double> data = null;
|
|
const IEnumerable<double?> nullableData = null;
|
|
|
|
Assert.Throws<ArgumentNullException>(() => new DescriptiveStatistics(data));
|
|
Assert.Throws<ArgumentNullException>(() => new DescriptiveStatistics(data, true));
|
|
Assert.Throws<ArgumentNullException>(() => new DescriptiveStatistics(nullableData));
|
|
Assert.Throws<ArgumentNullException>(() => new DescriptiveStatistics(nullableData, true));
|
|
}
|
|
|
|
[Test]
|
|
[Row("lottery", 15, -0.09333165310779, -1.19256091074856, 522.5, 4, 999, 218)]
|
|
[Row("lew", 15, -0.050606638756334, -1.49604979214447, -162, -579, 300, 200)]
|
|
[Row("mavro", 12, 0.64492948110824, -0.82052379677456, 2.0018, 2.0013, 2.0027, 50)]
|
|
[Row("michelso", 12, -0.0185388637725746, 0.33968459842539, 299.85, 299.62, 300.07, 100)]
|
|
[Row("numacc1", 15, 0, 0, 10000002, 10000001, 10000003, 3)]
|
|
[Row("numacc2", 13, 0, -2.003003003003, 1.2, 1.1, 1.3, 1001)]
|
|
[Row("numacc3", 9, 0, -2.003003003003, 1000000.2, 1000000.1, 1000000.3, 1001)]
|
|
[Row("numacc4", 8, 0, -2.00300300299913, 10000000.2, 10000000.1, 10000000.3, 1001)]
|
|
public void IEnumerableDouble(string dataSet, int digits, double skewness, double kurtosis, double median, double min, double max, int count)
|
|
{
|
|
StatTestData data = mData[dataSet];
|
|
DescriptiveStatistics stats = new DescriptiveStatistics(data.Data);
|
|
|
|
AssertHelpers.AlmostEqual(data.Mean, stats.Mean, 15);
|
|
AssertHelpers.AlmostEqual(data.StandardDeviation, stats.StandardDeviation, digits);
|
|
AssertHelpers.AlmostEqual(skewness, stats.Skewness, 7);
|
|
AssertHelpers.AlmostEqual(kurtosis, stats.Kurtosis, 7);
|
|
AssertHelpers.AlmostEqual(median, stats.Median, 15);
|
|
Assert.AreEqual(stats.Minimum, min);
|
|
Assert.AreEqual(stats.Maximum, max);
|
|
Assert.AreEqual(stats.Count, count);
|
|
}
|
|
|
|
[Test]
|
|
[Row("lottery", -0.09333165310779, -1.19256091074856, 522.5, 4, 999, 218)]
|
|
[Row("lew", -0.050606638756334, -1.49604979214447, -162, -579, 300, 200)]
|
|
[Row("mavro", 0.64492948110824, -0.82052379677456, 2.0018, 2.0013, 2.0027, 50)]
|
|
[Row("michelso", -0.0185388637725746, 0.33968459842539, 299.85, 299.62, 300.07, 100)]
|
|
[Row("numacc1", 0, 0, 10000002, 10000001, 10000003, 3)]
|
|
[Row("numacc2", 0, -2.003003003003, 1.2, 1.1, 1.3, 1001)]
|
|
[Row("numacc3", 0, -2.003003003003, 1000000.2, 1000000.1, 1000000.3, 1001)]
|
|
[Row("numacc4", 0, -2.00300300299913, 10000000.2, 10000000.1, 10000000.3, 1001)]
|
|
public void IEnumerableDoubleHighAccuracy(string dataSet, double skewness, double kurtosis, double median, double min, double max, int count)
|
|
{
|
|
StatTestData data = mData[dataSet];
|
|
DescriptiveStatistics stats = new DescriptiveStatistics(data.Data, true);
|
|
AssertHelpers.AlmostEqual(data.Mean, stats.Mean, 15);
|
|
AssertHelpers.AlmostEqual(data.StandardDeviation, stats.StandardDeviation, 15);
|
|
AssertHelpers.AlmostEqual(skewness, stats.Skewness, 9);
|
|
AssertHelpers.AlmostEqual(kurtosis, stats.Kurtosis, 9);
|
|
AssertHelpers.AlmostEqual(median, stats.Median, 15);
|
|
Assert.AreEqual(stats.Minimum, min);
|
|
Assert.AreEqual(stats.Maximum, max);
|
|
Assert.AreEqual(stats.Count, count);
|
|
}
|
|
|
|
[Test]
|
|
[Row("lottery", 15, -0.09333165310779, -1.19256091074856, 522.5, 4, 999, 218)]
|
|
[Row("lew", 15, -0.050606638756334, -1.49604979214447, -162, -579, 300, 200)]
|
|
[Row("mavro", 12, 0.64492948110824, -0.82052379677456, 2.0018, 2.0013, 2.0027, 50)]
|
|
[Row("michelso", 12, -0.0185388637725746, 0.33968459842539, 299.85, 299.62, 300.07, 100)]
|
|
[Row("numacc1", 15, 0, 0, 10000002, 10000001, 10000003, 3)]
|
|
[Row("numacc2", 13, 0, -2.003003003003, 1.2, 1.1, 1.3, 1001)]
|
|
[Row("numacc3", 9, 0, -2.003003003003, 1000000.2, 1000000.1, 1000000.3, 1001)]
|
|
[Row("numacc4", 8, 0, -2.00300300299913, 10000000.2, 10000000.1, 10000000.3, 1001)]
|
|
public void IEnumerableDoubleLowAccuracy(string dataSet, int digits, double skewness, double kurtosis, double median, double min, double max, int count)
|
|
{
|
|
StatTestData data = mData[dataSet];
|
|
DescriptiveStatistics stats = new DescriptiveStatistics(data.Data, false);
|
|
AssertHelpers.AlmostEqual(data.Mean, stats.Mean, 15);
|
|
AssertHelpers.AlmostEqual(data.StandardDeviation, stats.StandardDeviation, digits);
|
|
AssertHelpers.AlmostEqual(skewness, stats.Skewness, 7);
|
|
AssertHelpers.AlmostEqual(kurtosis, stats.Kurtosis, 7);
|
|
AssertHelpers.AlmostEqual(median, stats.Median, 15);
|
|
Assert.AreEqual(stats.Minimum, min);
|
|
Assert.AreEqual(stats.Maximum, max);
|
|
Assert.AreEqual(stats.Count, count);
|
|
}
|
|
|
|
[Test]
|
|
[Row("lottery", 15, -0.09333165310779, -1.19256091074856, 522.5, 4, 999, 218)]
|
|
[Row("lew", 15, -0.050606638756334, -1.49604979214447, -162, -579, 300, 200)]
|
|
[Row("mavro", 12, 0.64492948110824, -0.82052379677456, 2.0018, 2.0013, 2.0027, 50)]
|
|
[Row("michelso", 12, -0.0185388637725746, 0.33968459842539, 299.85, 299.62, 300.07, 100)]
|
|
[Row("numacc1", 15, 0, 0, 10000002, 10000001, 10000003, 3)]
|
|
[Row("numacc2", 13, 0, -2.003003003003, 1.2, 1.1, 1.3, 1001)]
|
|
[Row("numacc3", 9, 0, -2.003003003003, 1000000.2, 1000000.1, 1000000.3, 1001)]
|
|
[Row("numacc4", 8, 0, -2.00300300299913, 10000000.2, 10000000.1, 10000000.3, 1001)]
|
|
public void IEnumerableNullableDouble(string dataSet, int digits, double skewness, double kurtosis, double median, double min, double max, int count)
|
|
{
|
|
StatTestData data = mData[dataSet];
|
|
DescriptiveStatistics stats = new DescriptiveStatistics(data.DataWithNulls);
|
|
AssertHelpers.AlmostEqual(data.Mean, stats.Mean, 15);
|
|
AssertHelpers.AlmostEqual(data.StandardDeviation, stats.StandardDeviation, digits);
|
|
AssertHelpers.AlmostEqual(skewness, stats.Skewness, 7);
|
|
AssertHelpers.AlmostEqual(kurtosis, stats.Kurtosis, 7);
|
|
AssertHelpers.AlmostEqual(median, stats.Median, 15);
|
|
Assert.AreEqual(stats.Minimum, min);
|
|
Assert.AreEqual(stats.Maximum, max);
|
|
Assert.AreEqual(stats.Count, count);
|
|
}
|
|
|
|
[Test]
|
|
[Row("lottery", -0.09333165310779, -1.19256091074856, 522.5, 4, 999, 218)]
|
|
[Row("lew", -0.050606638756334, -1.49604979214447, -162, -579, 300, 200)]
|
|
[Row("mavro", 0.64492948110824, -0.82052379677456, 2.0018, 2.0013, 2.0027, 50)]
|
|
[Row("michelso", -0.0185388637725746, 0.33968459842539, 299.85, 299.62, 300.07, 100)]
|
|
[Row("numacc1", 0, 0, 10000002, 10000001, 10000003, 3)]
|
|
[Row("numacc2", 0, -2.003003003003, 1.2, 1.1, 1.3, 1001)]
|
|
[Row("numacc3", 0, -2.003003003003, 1000000.2, 1000000.1, 1000000.3, 1001)]
|
|
[Row("numacc4", 0, -2.00300300299913, 10000000.2, 10000000.1, 10000000.3, 1001)]
|
|
public void IEnumerableNullableDoubleHighAccuracy(string dataSet, double skewness, double kurtosis, double median, double min, double max, int count)
|
|
{
|
|
StatTestData data = mData[dataSet];
|
|
DescriptiveStatistics stats = new DescriptiveStatistics(data.DataWithNulls, true);
|
|
AssertHelpers.AlmostEqual(data.Mean, stats.Mean, 15);
|
|
AssertHelpers.AlmostEqual(data.StandardDeviation, stats.StandardDeviation, 15);
|
|
AssertHelpers.AlmostEqual(skewness, stats.Skewness, 9);
|
|
AssertHelpers.AlmostEqual(kurtosis, stats.Kurtosis, 9);
|
|
AssertHelpers.AlmostEqual(median, stats.Median, 15);
|
|
Assert.AreEqual(stats.Minimum, min);
|
|
Assert.AreEqual(stats.Maximum, max);
|
|
Assert.AreEqual(stats.Count, count);
|
|
}
|
|
|
|
[Test]
|
|
[Row("lottery", 15, -0.09333165310779, -1.19256091074856, 522.5, 4, 999, 218)]
|
|
[Row("lew", 15, -0.050606638756334, -1.49604979214447, -162, -579, 300, 200)]
|
|
[Row("mavro", 12, 0.64492948110824, -0.82052379677456, 2.0018, 2.0013, 2.0027, 50)]
|
|
[Row("michelso", 12, -0.0185388637725746, 0.33968459842539, 299.85, 299.62, 300.07, 100)]
|
|
[Row("numacc1", 15, 0, 0, 10000002, 10000001, 10000003, 3)]
|
|
[Row("numacc2", 13, 0, -2.003003003003, 1.2, 1.1, 1.3, 1001)]
|
|
[Row("numacc3", 9, 0, -2.003003003003, 1000000.2, 1000000.1, 1000000.3, 1001)]
|
|
[Row("numacc4", 8, 0, -2.00300300299913, 10000000.2, 10000000.1, 10000000.3, 1001)]
|
|
public void IEnumerableNullableDoubleLowAccuracy(string dataSet, int digits, double skewness, double kurtosis, double median, double min, double max, int count)
|
|
{
|
|
StatTestData data = mData[dataSet];
|
|
DescriptiveStatistics stats = new DescriptiveStatistics(data.DataWithNulls, false);
|
|
AssertHelpers.AlmostEqual(data.Mean, stats.Mean, 15);
|
|
AssertHelpers.AlmostEqual(data.StandardDeviation, stats.StandardDeviation, digits);
|
|
AssertHelpers.AlmostEqual(skewness, stats.Skewness, 7);
|
|
AssertHelpers.AlmostEqual(kurtosis, stats.Kurtosis, 7);
|
|
AssertHelpers.AlmostEqual(median, stats.Median, 15);
|
|
Assert.AreEqual(stats.Minimum, min);
|
|
Assert.AreEqual(stats.Maximum, max);
|
|
Assert.AreEqual(stats.Count, count);
|
|
}
|
|
}
|
|
}
|