public void SampleFitChiSquaredTest() { Distribution distribution = new ChiSquaredDistribution(4); Sample sample = CreateSample(distribution, 100); // fit to normal should be bad // this is harder than others, because a chi^2 isn't so very different from a normal; to help, increse N or decrease vu FitResult nfit = NormalDistribution.FitToSample(sample); Console.WriteLine("P_n = {0}", nfit.GoodnessOfFit.LeftProbability); Assert.IsTrue(nfit.GoodnessOfFit.LeftProbability > 0.95, String.Format("P_n = {0}", nfit.GoodnessOfFit.LeftProbability)); // fit to exponential should also be bad FitResult efit = ExponentialDistribution.FitToSample(sample); Console.WriteLine("P_e = {0}", efit.GoodnessOfFit.LeftProbability); Assert.IsTrue(efit.GoodnessOfFit.LeftProbability > 0.95, String.Format("P_e = {0}", efit.GoodnessOfFit.LeftProbability)); }
public void FisherTest() { // we will need a RNG Random rng = new Random(314159); int n1 = 1; int n2 = 2; // define chi squared distributions Distribution d1 = new ChiSquaredDistribution(n1); Distribution d2 = new ChiSquaredDistribution(n2); // create a sample of chi-squared variates Sample s = new Sample(); for (int i = 0; i < 250; i++) { double x1 = d1.InverseLeftProbability(rng.NextDouble()); double x2 = d2.InverseLeftProbability(rng.NextDouble()); double x = (x1/n1) / (x2/n2); s.Add(x); } // it should match a Fisher distribution with the appropriate parameters Distribution f0 = new FisherDistribution(n1, n2); TestResult t0 = s.KuiperTest(f0); Console.WriteLine(t0.LeftProbability); Assert.IsTrue(t0.LeftProbability < 0.95); // it should be distinguished from a Fisher distribution with different parameters Distribution f1 = new FisherDistribution(n1 + 1, n2); TestResult t1 = s.KuiperTest(f1); Console.WriteLine(t1.LeftProbability); Assert.IsTrue(t1.LeftProbability > 0.95); }
public void Bug2811() { ChiSquaredDistribution d = new ChiSquaredDistribution(1798); double x = d.InverseLeftProbability(0.975); Console.WriteLine(x); }