public void StudentTest2() { // make sure Student t is consistent with its definition // we are going to take a sample that we expect to be t-distributed Sample tSample = new Sample(); // begin with an underlying normal distribution Distribution xDistribution = new NormalDistribution(); // compute a bunch of t satistics from the distribution for (int i = 0; i < 100000; i++) { // take a small sample from the underlying distribution // (as the sample gets large, the t distribution becomes normal) Random rng = new Random(314159+i); double p = xDistribution.InverseLeftProbability(rng.NextDouble()); double q = 0.0; for (int j = 0; j < 5; j++) { double x = xDistribution.InverseLeftProbability(rng.NextDouble()); q += x * x; } q = q / 5; double t = p / Math.Sqrt(q); tSample.Add(t); } Distribution tDistribution = new StudentDistribution(5); TestResult result = tSample.KolmogorovSmirnovTest(tDistribution); Console.WriteLine(result.LeftProbability); }
public void CauchyStudentAgreement() { StudentDistribution S = new StudentDistribution(1); CauchyDistribution C = new CauchyDistribution(); // don't compare moments directly, because NaN != NaN foreach (double P in probabilities) { double xS = S.InverseLeftProbability(P); double xC = C.InverseLeftProbability(P); Console.WriteLine("{0} {1} {2}", P, xS, xC); Assert.IsTrue(TestUtilities.IsNearlyEqual(xS, xC)); Assert.IsTrue(TestUtilities.IsNearlyEqual(S.ProbabilityDensity(xS), C.ProbabilityDensity(xC))); } }
public void StudentTest() { // make sure Student t is consistent with its definition // we are going to take a sample that we expect to be t-distributed Sample tSample = new Sample(); // begin with an underlying normal distribution Distribution xDistribution = new NormalDistribution(1.0, 2.0); // compute a bunch of t satistics from the distribution for (int i = 0; i < 200000; i++) { // take a small sample from the underlying distribution // (as the sample gets large, the t distribution becomes normal) Random rng = new Random(i); Sample xSample = new Sample(); for (int j = 0; j < 5; j++) { double x = xDistribution.InverseLeftProbability(rng.NextDouble()); xSample.Add(x); } // compute t for the sample double t = (xSample.Mean - xDistribution.Mean) / (xSample.PopulationStandardDeviation.Value / Math.Sqrt(xSample.Count)); tSample.Add(t); //Console.WriteLine(t); } // t's should be t-distrubuted; use a KS test to check this Distribution tDistribution = new StudentDistribution(4); TestResult result = tSample.KolmogorovSmirnovTest(tDistribution); Console.WriteLine(result.LeftProbability); //Assert.IsTrue(result.LeftProbability < 0.95); // t's should be demonstrably not normally distributed Console.WriteLine(tSample.KolmogorovSmirnovTest(new NormalDistribution()).LeftProbability); //Assert.IsTrue(tSample.KolmogorovSmirnovTest(new NormalDistribution()).LeftProbability > 0.95); }
public void TTestDistribution() { // start with a normally distributed population Distribution xDistribution = new NormalDistribution(2.0, 3.0); Random rng = new Random(1); // draw 100 samples from it and compute the t statistic for each Sample tSample = new Sample(); for (int i = 0; i < 100; i++) { // each sample has 9 values Sample xSample = new Sample(); for (int j = 0; j < 9; j++) { xSample.Add(xDistribution.GetRandomValue(rng)); } //Sample xSample = CreateSample(xDistribution, 10, i); TestResult tResult = xSample.StudentTTest(2.0); double t = tResult.Statistic; Console.WriteLine("t = {0}", t); tSample.Add(t); } // sanity check our sample of t's Assert.IsTrue(tSample.Count == 100); // check that the t statistics are distributed as expected Distribution tDistribution = new StudentDistribution(9); // check on the mean Console.WriteLine("m = {0} vs. {1}", tSample.PopulationMean, tDistribution.Mean); Assert.IsTrue(tSample.PopulationMean.ConfidenceInterval(0.95).ClosedContains(tDistribution.Mean), String.Format("{0} vs. {1}", tSample.PopulationMean, tDistribution.Mean)); // check on the standard deviation Console.WriteLine("s = {0} vs. {1}", tSample.PopulationStandardDeviation, tDistribution.StandardDeviation); Assert.IsTrue(tSample.PopulationStandardDeviation.ConfidenceInterval(0.95).ClosedContains(tDistribution.StandardDeviation)); // do a KS test TestResult ksResult = tSample.KolmogorovSmirnovTest(tDistribution); Assert.IsTrue(ksResult.LeftProbability < 0.95); Console.WriteLine("D = {0}", ksResult.Statistic); // check that we can distinguish the t distribution from a normal distribution? }