// Verify that distributions have the correct mean and variance. // Note that sample mean and sample variance will not exactly match the expected mean and variance. static void TestDistributions() { const int numSamples = 100000; double mean, variance, stdev, shape, scale, degreesOfFreedom; RunningStat rs = new RunningStat(); // Exponential distribution rs.Clear(); mean = 2; for (int i = 0; i < numSamples; ++i) rs.Push(SimpleRNG.GetExponential(mean)); PrintResults("exponential", mean, 5, rs.Mean(), rs.Variance()); // Gamma distribution rs.Clear(); shape = 10; scale = 2; for (int i = 0; i < numSamples; ++i) rs.Push(SimpleRNG.GetGamma(shape, scale)); PrintResults("gamma", shape*scale, shape*scale*scale, rs.Mean(), rs.Variance()); // Normal distribution rs.Clear(); mean = 2; stdev = 5; for (int i = 0; i < numSamples; ++i) rs.Push(SimpleRNG.GetNormal(2, 5)); PrintResults("normal", mean, stdev*stdev, rs.Mean(), rs.Variance()); // Student t distribution rs.Clear(); degreesOfFreedom = 6; for (int i = 0; i < numSamples; ++i) rs.Push(SimpleRNG.GetStudentT(6)); PrintResults("Student t", 0, degreesOfFreedom / (degreesOfFreedom - 2.0), rs.Mean(), rs.Variance()); // Weibull distribution rs.Clear(); shape = 2; scale = 3; mean = 3*Math.Sqrt(Math.PI)/2; variance = 9*(1 - Math.PI/4); for (int i = 0; i < numSamples; ++i) rs.Push(SimpleRNG.GetWeibull(shape, scale)); PrintResults("Weibull", mean, variance, rs.Mean(), rs.Variance()); // Beta distribution rs.Clear(); double a = 7, b = 2; mean = a / (a + b); variance = mean*(1 - mean) / (a + b + 1); for (int i = 0; i < numSamples; ++i) rs.Push(SimpleRNG.GetBeta(a, b)); PrintResults("Beta", mean, variance, rs.Mean(), rs.Variance());
// Verify that distributions have the correct mean and variance. // Note that sample mean and sample variance will not exactly match the expected mean and variance. static void TestDistributions() { const int numSamples = 100000; double mean, variance, stdev, shape, scale, degreesOfFreedom; RunningStat rs = new RunningStat(); // Exponential distribution rs.Clear(); mean = 2; for (int i = 0; i < numSamples; ++i) { rs.Push(SimpleRNG.GetExponential(mean)); } PrintResults("exponential", mean, 5, rs.Mean(), rs.Variance()); // Gamma distribution rs.Clear(); shape = 10; scale = 2; for (int i = 0; i < numSamples; ++i) { rs.Push(SimpleRNG.GetGamma(shape, scale)); } PrintResults("gamma", shape * scale, shape * scale * scale, rs.Mean(), rs.Variance()); // Normal distribution rs.Clear(); mean = 2; stdev = 5; for (int i = 0; i < numSamples; ++i) { rs.Push(SimpleRNG.GetNormal(2, 5)); } PrintResults("normal", mean, stdev * stdev, rs.Mean(), rs.Variance()); // Student t distribution rs.Clear(); degreesOfFreedom = 6; for (int i = 0; i < numSamples; ++i) { rs.Push(SimpleRNG.GetStudentT(6)); } PrintResults("Student t", 0, degreesOfFreedom / (degreesOfFreedom - 2.0), rs.Mean(), rs.Variance()); // Weibull distribution rs.Clear(); shape = 2; scale = 3; mean = 3 * Math.Sqrt(Math.PI) / 2; variance = 9 * (1 - Math.PI / 4); for (int i = 0; i < numSamples; ++i) { rs.Push(SimpleRNG.GetWeibull(shape, scale)); } PrintResults("Weibull", mean, variance, rs.Mean(), rs.Variance()); // Beta distribution rs.Clear(); double a = 7, b = 2; mean = a / (a + b); variance = mean * (1 - mean) / (a + b + 1); for (int i = 0; i < numSamples; ++i) { rs.Push(SimpleRNG.GetBeta(a, b)); } PrintResults("Beta", mean, variance, rs.Mean(), rs.Variance()); }