Mean Tests in C# QuickStart Sample

Illustrates how to use various tests for the mean of one or more sanples using classes in the Extreme.Statistics.Tests namespace in C#.

View this sample in: Visual Basic F# IronPython

using System;

using Extreme.Mathematics;
using Extreme.Statistics;
using Extreme.Statistics.Tests;

namespace Extreme.Numerics.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 demo license here. For more information, see
            // https://numerics.net/trial-key
            Extreme.License.Verify("Demo license");
            // 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: {0:F1}", group1Results.Mean());
            Console.WriteLine("Standard deviation: {0:F1}", group1Results.StandardDeviation());
            
            //
            // 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: {0:F4}", zTest.Statistic);
            Console.WriteLine("P-value:        {0:F4}", zTest.PValue);

            // The significance level is the default value of 0.05:
            Console.WriteLine("Significance level:     {0:F2}", zTest.SignificanceLevel);
            // We can now print the test scores:
            Console.WriteLine("Reject null hypothesis? {0}", 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:F2}", 0.01);
            Console.WriteLine("Reject null hypothesis? {0}", 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: {0:F4}", tTest.Statistic);
            Console.WriteLine("P-value:        {0:F4}", tTest.PValue);

            // The significance level is the default value of 0.05:
            Console.WriteLine("Significance level:     {0:F2}", tTest.SignificanceLevel);
            // We can now print the test scores:
            Console.WriteLine("Reject null hypothesis? {0}", 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: {0:F4}", tTest2.Statistic);
            Console.WriteLine("P-value:        {0:F4}", tTest2.PValue);

            // The significance level is the default value of 0.05:
            Console.WriteLine("Significance level:     {0:F2}", tTest2.SignificanceLevel);
            // We can now print the test scores:
            Console.WriteLine("Reject null hypothesis? {0}", tTest2.Reject() ? "yes" : "no");

            Console.Write("Press any key to exit.");
            Console.ReadLine();
        }
    }
}