Mean Tests in C# QuickStart Sample
Illustrates how to use various tests for the mean of one or more sanples using classes in the Numerics.NET.Statistics.Tests namespace in C#.
View this sample in: Visual Basic F# IronPython
using System;
using Numerics.NET;
using Numerics.NET.Statistics;
using Numerics.NET.Statistics.Tests;
namespace Numerics.NET.Quickstart.CSharp
{
/// <summary>
/// Demonstrates how to use hypothesis tests for the mean
/// of one or two distributions.
/// </summary>
class MeanTests
{
static void Main(string[] args)
{
// The license is verified at runtime. We're using
// a 30 day trial key here. For more information, see
// https://numerics.net/trial-key
Numerics.NET.License.Verify("64542-18980-57619-62268");
// This QuickStart Sample uses the scores obtained by the students
// in two groups of students on a national test.
//
// We want to know if the scores for these two groups of students
// are significantly different from the national average, and
// from each other.
// The mean and standard deviation of the complete population:
double nationalMean = 79.3;
double nationalStandardDeviation = 7.3;
Console.WriteLine("Tests for group 1");
// First we create a NumericalVariable that holds the test scores.
var group1Results = Vector.Create(new double[] {
62, 77, 61, 94, 75, 82, 86, 83, 64, 84,
68, 82, 72, 71, 85, 66, 61, 79, 81, 73
});
// We can get the mean and standard deviation of the group right away:
Console.WriteLine($"Mean for the group: {group1Results.Mean():F1}");
Console.WriteLine($"Standard deviation: {group1Results.StandardDeviation():F1}");
//
// One Sample z-test
//
Console.WriteLine("\nUsing z-test:");
// We know the population standard deviation, so we can use the z-test,
// implemented by the OneSampleZTest group. We pass the sample variable
// and the population parameters to the constructor.
OneSampleZTest zTest = new OneSampleZTest(group1Results, nationalMean, nationalStandardDeviation);
// We can obtan the value of the test statistic through the Statistic property,
// and the corresponding P-value through the Probability property:
Console.WriteLine($"Test statistic: {zTest.Statistic:F4}");
Console.WriteLine($"P-value: {zTest.PValue:F4}");
// The significance level is the default value of 0.05:
Console.WriteLine($"Significance level: {zTest.SignificanceLevel:F2}");
// We can now print the test scores:
Console.WriteLine($"Reject null hypothesis? {(zTest.Reject() ? "yes" : "no")}");
// We can get a confidence interval for the current significance level:
Interval meanInterval = zTest.GetConfidenceInterval();
Console.WriteLine("95% Confidence interval for the mean: {0:F1} - {1:F1}",
meanInterval.LowerBound, meanInterval.UpperBound);
// We can get the same scores for the 0.01 significance level by explicitly
// passing the significance level as a parameter to these methods:
Console.WriteLine($"Significance level: {0.01:F2}");
Console.WriteLine($"Reject null hypothesis? {(zTest.Reject(0.01) ? "yes" : "no")}");
// The GetConfidenceInterval method needs the confidence level, which equals
// 1 - the significance level:
meanInterval = zTest.GetConfidenceInterval(0.99);
Console.WriteLine("99% Confidence interval for the mean: {0:F1} - {1:F1}",
meanInterval.LowerBound, meanInterval.UpperBound);
//
// One sample t-test
//
Console.WriteLine("\nUsing t-test:");
// Suppose we only know the mean of the national scores,
// not the standard deviation. In this case, a t-test is
// the appropriate test to use.
OneSampleTTest tTest = new OneSampleTTest(group1Results, nationalMean);
// We can obtan the value of the test statistic through the Statistic property,
// and the corresponding P-value through the Probability property:
Console.WriteLine($"Test statistic: {tTest.Statistic:F4}");
Console.WriteLine($"P-value: {tTest.PValue:F4}");
// The significance level is the default value of 0.05:
Console.WriteLine($"Significance level: {tTest.SignificanceLevel:F2}");
// We can now print the test scores:
Console.WriteLine($"Reject null hypothesis? {(tTest.Reject() ? "yes" : "no")}");
// We can get a confidence interval for the current significance level:
meanInterval = tTest.GetConfidenceInterval();
Console.WriteLine("95% Confidence interval for the mean: {0:F1} - {1:F1}",
meanInterval.LowerBound, meanInterval.UpperBound);
//
// Two sample t-test
//
Console.WriteLine("\nUsing two-sample t-test:");
// We want to compare the scores of the first group to the scores
// of a second group from the same school. Once again, we start
// by creating a NumericalVariable containing the scores:
var group2Results = Vector.Create(new double[] {
61, 80, 98, 90, 94, 65, 79, 75, 74, 86,
76, 85, 78, 72, 76, 79, 65, 92, 76, 80
});
// To compare the means of the two groups, we need the two sample
// t test, implemented by the TwoSampleTTest group:
var tTest2 = new TwoSampleTTest(group1Results, group2Results, SamplePairing.Paired, false);
// We can obtan the value of the test statistic through the Statistic property,
// and the corresponding P-value through the Probability property:
Console.WriteLine($"Test statistic: {tTest2.Statistic:F4}");
Console.WriteLine($"P-value: {tTest2.PValue:F4}");
// The significance level is the default value of 0.05:
Console.WriteLine($"Significance level: {tTest2.SignificanceLevel:F2}");
// We can now print the test scores:
Console.WriteLine($"Reject null hypothesis? {(tTest2.Reject() ? "yes" : "no")}");
Console.Write("Press any key to exit.");
Console.ReadLine();
}
}
}