public void KendallNullDistributionTest() { // pick independent distributions for x and y, which needn't be normal and needn't be related Distribution xDistrubtion = new LogisticDistribution(); Distribution yDistribution = new ExponentialDistribution(); Random rng = new Random(314159265); // generate bivariate samples of various sizes //int n = 64; { foreach (int n in TestUtilities.GenerateIntegerValues(4, 64, 8)) { Sample testStatistics = new Sample(); Distribution testDistribution = null; for (int i = 0; i < 128; i++) { BivariateSample sample = new BivariateSample(); for (int j = 0; j < n; j++) { sample.Add(xDistrubtion.GetRandomValue(rng), yDistribution.GetRandomValue(rng)); } TestResult result = sample.KendallTauTest(); testStatistics.Add(result.Statistic); testDistribution = result.Distribution; } //TestResult r2 = testStatistics.KolmogorovSmirnovTest(testDistribution); //Console.WriteLine("n={0} P={1}", n, r2.LeftProbability); //Assert.IsTrue(r2.RightProbability > 0.05); Console.WriteLine("{0} {1}", testStatistics.PopulationVariance, testDistribution.Variance); Assert.IsTrue(testStatistics.PopulationMean.ConfidenceInterval(0.95).ClosedContains(testDistribution.Mean)); Assert.IsTrue(testStatistics.PopulationVariance.ConfidenceInterval(0.95).ClosedContains(testDistribution.Variance)); } }
public void GammaFromExponential() { // test that x_1 + x_2 + ... + x_n ~ Gamma(n) when z ~ Exponential() Random rng = new Random(1); ExponentialDistribution eDistribution = new ExponentialDistribution(); // pick some low values of n so distribution is not simply normal foreach (int n in new int[] { 2, 3, 4, 5 }) { Sample gSample = new Sample(); for (int i = 0; i < 100; i++) { double sum = 0.0; for (int j = 0; j < n; j++) { sum += eDistribution.GetRandomValue(rng); } gSample.Add(sum); } GammaDistribution gDistribution = new GammaDistribution(n); TestResult result = gSample.KolmogorovSmirnovTest(gDistribution); Assert.IsTrue(result.LeftProbability < 0.95); } }
public void SignTestDistribution() { // start with a non-normally distributed population Distribution xDistribution = new ExponentialDistribution(); Random rng = new Random(1); // draw 100 samples from it and compute the t statistic for each Sample wSample = new Sample(); for (int i = 0; i < 100; i++) { // each sample has 8 observations Sample xSample = new Sample(); for (int j = 0; j < 8; j++) { xSample.Add(xDistribution.GetRandomValue(rng)); } //Sample xSample = CreateSample(xDistribution, 8, i); TestResult wResult = xSample.SignTest(xDistribution.Median); double W = wResult.Statistic; //Console.WriteLine("W = {0}", W); wSample.Add(W); } // sanity check our sample of t's Assert.IsTrue(wSample.Count == 100); // check that the t statistics are distributed as expected DiscreteDistribution wDistribution = new BinomialDistribution(0.5, 8); // check on the mean Console.WriteLine("m = {0} vs. {1}", wSample.PopulationMean, wDistribution.Mean); Assert.IsTrue(wSample.PopulationMean.ConfidenceInterval(0.95).ClosedContains(wDistribution.Mean)); // check on the standard deviation Console.WriteLine("s = {0} vs. {1}", wSample.PopulationStandardDeviation, wDistribution.StandardDeviation); Assert.IsTrue(wSample.PopulationStandardDeviation.ConfidenceInterval(0.95).ClosedContains(wDistribution.StandardDeviation)); // check on the skew Console.WriteLine("t = {0} vs. {1}", wSample.PopulationMomentAboutMean(3), wDistribution.MomentAboutMean(3)); Assert.IsTrue(wSample.PopulationMomentAboutMean(3).ConfidenceInterval(0.95).ClosedContains(wDistribution.MomentAboutMean(3))); // check on the kuritosis Console.WriteLine("u = {0} vs. {1}", wSample.PopulationMomentAboutMean(4), wDistribution.MomentAboutMean(4)); Assert.IsTrue(wSample.PopulationMomentAboutMean(4).ConfidenceInterval(0.95).ClosedContains(wDistribution.MomentAboutMean(4))); // KS tests are only for continuous distributions }
public void MultivariateMoments() { // create a random sample MultivariateSample M = new MultivariateSample(3); Distribution d0 = new NormalDistribution(); Distribution d1 = new ExponentialDistribution(); Distribution d2 = new UniformDistribution(); Random rng = new Random(1); int n = 10; for (int i = 0; i < n; i++) { M.Add(d0.GetRandomValue(rng), d1.GetRandomValue(rng), d2.GetRandomValue(rng)); } // test that moments agree for (int i = 0; i < 3; i++) { int[] p = new int[3]; p[i] = 1; Assert.IsTrue(TestUtilities.IsNearlyEqual(M.Column(i).Mean, M.Moment(p))); p[i] = 2; Assert.IsTrue(TestUtilities.IsNearlyEqual(M.Column(i).Variance, M.MomentAboutMean(p))); for (int j = 0; j < i; j++) { int[] q = new int[3]; q[i] = 1; q[j] = 1; Assert.IsTrue(TestUtilities.IsNearlyEqual(M.TwoColumns(i, j).Covariance, M.MomentAboutMean(q))); } } }