Esempio n. 1
0
        public static IEnumerable<float> TestData()
        {
            var g = new Normal(0.0, 1.0);
            var randy = new MersenneTwister();

            g.RandomSource = randy;
            var dbls = new double[100000];
            g.Samples(dbls);
            return dbls.Select(d => (float) d);
        }
        public void NormalityTestAlgorithmTest()
        {
            int sampleSize = 100;
            int numberOfMonteCarloTests = 5;
            double result = 0;
            NormalityTest.NormalityTestFunc normalityTestFunc = NormalityTest.JaqueBeraTest;

            // normal distribution
            Console.WriteLine("normal var");
            for (int i = 0; i < numberOfMonteCarloTests; i++)
            {
                var distribution = new Normal(50, 1);
                distribution.RandomSource = new Random(DateTime.Now.Millisecond * i);
                var normalSamples = distribution.Samples().Take(sampleSize);

                double[] reallIsNormalSamples = normalSamples.ToArray();

                result = normalityTestFunc(reallIsNormalSamples);
                Console.WriteLine("reallIsNormalSamples_" + i + ": " + result);
            }

            Console.WriteLine();

            // random distribution.
            Console.WriteLine("rand var");
            Random rnd = new Random();
            double[] randomArray = new double[sampleSize];
            for (int i = 0; i < numberOfMonteCarloTests; i++)
            {
                for (int j = 0; j < sampleSize; j++)
                {
                    randomArray[j] = rnd.Next(1, 100);
                }

                result = normalityTestFunc(randomArray);
                Console.WriteLine("randomArray_" + i + ": " + result);
            }

            Console.WriteLine();

            // Uniform distribution
            Console.WriteLine("rand var");
            var uniformSamples = new Normal(100, 0).Samples().Take(sampleSize);

            double[] uniformSamplesRandomVar = uniformSamples.ToArray();

            result = normalityTestFunc(uniformSamplesRandomVar);
            Console.WriteLine("uniformSamples: " + result);
        }
Esempio n. 3
0
        private void GenerateUCube(DISTRIBUTION d)
        {
            if (array != null)
            {
                return;
            }
            array = new double[number_of_sims][][];

            var uniform = new MathNet.Numerics.Random.MersenneTwister(seed);
            var normal  = new MathNet.Numerics.Distributions.Normal(0, 1, uniform);

            Func <double[]> rgn = null;

            switch (d)
            {
            case DISTRIBUTION.UNIFORM:
                rgn = () =>
                {
                    return(uniform.NextDoubles((int)number_of_steps));
                };
                break;

            case DISTRIBUTION.NORMAL:
                rgn = () =>
                {
                    double[] r = new double[number_of_steps];
                    normal.Samples(r);
                    return(r);
                };
                break;
            }

            for (UInt64 i = 0; i < number_of_sims; ++i)
            {
                array[i] = new double[number_of_dims][];
                for (UInt64 j = 0; j < number_of_dims; ++j)
                {
                    array[i][j] = rgn();
                }
            }
        }
Esempio n. 4
0
        public void CanEstimateParameters(double mean, double stddev)
        {
            var original = new Normal(mean, stddev, new Random(100));
            var estimated = Normal.Estimate(original.Samples().Take(10000));

            AssertHelpers.AlmostEqualRelative(mean, estimated.Mean, 1);
            AssertHelpers.AlmostEqualRelative(stddev, estimated.StdDev, 1);
        }
Esempio n. 5
0
 public void CanSampleSequence()
 {
     var n = new Normal();
     var ied = n.Samples();
     GC.KeepAlive(ied.Take(5).ToArray());
 }
        public void StabilityMeanVariance()
        {
            // Test around 10^9, potential stability issues
            var gaussian = new Normal(1e+9, 2, new MersenneTwister(100));

            AssertHelpers.AlmostEqualRelative(1e+9, Statistics.Mean(gaussian.Samples().Take(10000)), 10);
            AssertHelpers.AlmostEqualRelative(4d, Statistics.Variance(gaussian.Samples().Take(10000)), 0);
            AssertHelpers.AlmostEqualRelative(2d, Statistics.StandardDeviation(gaussian.Samples().Take(10000)), 1);
            AssertHelpers.AlmostEqualRelative(1e+9, Statistics.RootMeanSquare(gaussian.Samples().Take(10000)), 10);

            AssertHelpers.AlmostEqualRelative(1e+9, ArrayStatistics.Mean(gaussian.Samples().Take(10000).ToArray()), 10);
            AssertHelpers.AlmostEqualRelative(4d, ArrayStatistics.Variance(gaussian.Samples().Take(10000).ToArray()), 0);
            AssertHelpers.AlmostEqualRelative(2d, ArrayStatistics.StandardDeviation(gaussian.Samples().Take(10000).ToArray()), 1);
            AssertHelpers.AlmostEqualRelative(1e+9, ArrayStatistics.RootMeanSquare(gaussian.Samples().Take(10000).ToArray()), 10);

            AssertHelpers.AlmostEqualRelative(1e+9, StreamingStatistics.Mean(gaussian.Samples().Take(10000)), 10);
            AssertHelpers.AlmostEqualRelative(4d, StreamingStatistics.Variance(gaussian.Samples().Take(10000)), 0);
            AssertHelpers.AlmostEqualRelative(2d, StreamingStatistics.StandardDeviation(gaussian.Samples().Take(10000)), 1);
            AssertHelpers.AlmostEqualRelative(1e+9, StreamingStatistics.RootMeanSquare(gaussian.Samples().Take(10000)), 10);

            AssertHelpers.AlmostEqualRelative(1e+9, new RunningStatistics(gaussian.Samples().Take(10000)).Mean, 10);
            AssertHelpers.AlmostEqualRelative(4d, new RunningStatistics(gaussian.Samples().Take(10000)).Variance, 0);
            AssertHelpers.AlmostEqualRelative(2d, new RunningStatistics(gaussian.Samples().Take(10000)).StandardDeviation, 1);
        }
Esempio n. 7
0
 /// <summary>
 /// Generates a sequence of samples from the log-normal distribution using the <i>Box-Muller</i> algorithm.
 /// </summary>
 /// <param name="rnd">The random number generator to use.</param>
 /// <param name="mu">The log-scale (μ) of the distribution.</param>
 /// <param name="sigma">The shape (σ) of the distribution. Range: σ ≥ 0.</param>
 /// <returns>a sequence of samples from the distribution.</returns>
 public static IEnumerable <double> Samples(System.Random rnd, double mu, double sigma)
 {
     return(Normal.Samples(rnd, mu, sigma).Select(Math.Exp));
 }
Esempio n. 8
0
 /// <summary>
 /// Generates a sequence of samples from the log-normal distribution using the <i>Box-Muller</i> algorithm.
 /// </summary>
 /// <returns>a sequence of samples from the distribution.</returns>
 public IEnumerable <double> Samples()
 {
     return(Normal.Samples(_random, _mu, _sigma).Select(Math.Exp));
 }
Esempio n. 9
0
        private static double[] GenerateNoisePath(int simulationSteps, int mean, double noiseVariance)
        {
            var standardNormal = new Normal(mean, noiseVariance);

            return standardNormal.Samples().Take(simulationSteps).ToArray();
        }
Esempio n. 10
0
 public void CanSampleSequence()
 {
     var n = new Normal();
     var ied = n.Samples();
     var e = ied.Take(5).ToArray();
 }
Esempio n. 11
0
 public static double[] Randn(int n, double mu = 0.0, double sigma = 1.0)
 {
     Normal d = new Normal(mu, sigma);
     double[] ret = d.Samples().Take(n).ToArray();
     return ret;
 }