Example #1
0
        public void RandomSourceTest()
        {
            var hybrid = new HybridMC(new double[] { 0 }, x => _normal.DensityLn(x[0]), 10, 0.1);
            Assert.IsNotNull(hybrid.RandomSource);

            hybrid.RandomSource = new System.Random(0);
            Assert.IsNotNull(hybrid.RandomSource);
        }
Example #2
0
        public void RandomSourceTest()
        {
            var hybrid = new HybridMC(new double[] { 0 }, x => _normal.DensityLn(x[0]), 10, 0.1);

            Assert.IsNotNull(hybrid.RandomSource);

            hybrid.RandomSource = new System.Random(0);
            Assert.IsNotNull(hybrid.RandomSource);
        }
Example #3
0
        public void RandomSourceTest()
        {
            HybridMC Hybrid = new HybridMC(new double[1] {
                0
            }, x => normal.DensityLn(x[0]), 10, 0.1);

            Assert.IsNotNull(Hybrid.RandomSource);

            Hybrid.RandomSource = new System.Random();
            Assert.IsNotNull(Hybrid.RandomSource);
        }
Example #4
0
        public void SampleTest()
        {
            //Variances and Means
            double[] Sdv  = new double[2];
            double[] Mean = new double[2];
            for (int i = 0; i < 2; i++)
            {
                Sdv[i]  = RandomVar();
                Mean[i] = 5 * rnd.NextDouble();
            }

            //Cross Variance
            double rho = 1.0 - RandomVar();

            DensityLn <double[]> pdfLn = new DensityLn <double[]>(x => LogDen(x, Sdv, Mean, rho));


            HybridMC Hybrid = new HybridMC(new double[2] {
                0, 0
            }, pdfLn, 10, 0.1, 1000);

            Hybrid.BurnInterval = 0;

            int SampleSize = 10000;

            double[][] Sample     = Hybrid.Sample(SampleSize);
            double[][] NewSamples = ArrangeSamples(SampleSize, Sample);

            double[] Convergence = new double[2];
            double[] SampleMean  = new double[2];
            double[] SampleSdv   = new double[2];


            for (int i = 0; i < 2; i++)
            {
                Convergence[i] = 1 / Math.Sqrt(MCMCDiagnostics.EffectiveSize(Sample, x => x[i]));
                DescriptiveStatistics Stats = new DescriptiveStatistics(NewSamples[i]);
                SampleMean[i] = Stats.Mean;
                SampleSdv[i]  = Stats.StandardDeviation;
            }
            double SampleRho = Correlation.Pearson(NewSamples[0], NewSamples[1]);

            for (int i = 0; i < 2; i++)
            {
                string index = i.ToString();
                Assert.AreEqual(Mean[i], SampleMean[i], 10 * Convergence[i], index + "Mean");
                Assert.AreEqual(SampleSdv[i] * SampleSdv[i], Sdv[i] * Sdv[i], 10 * Convergence[i], index + "Standard Deviation");
            }

            double ConvergenceRho = 1 / Math.Sqrt(MCMCDiagnostics.EffectiveSize(Sample, x => (x[0] - SampleMean[0]) * (x[1] - SampleMean[1])));

            Assert.AreEqual(SampleRho * SampleSdv[0] * SampleSdv[1], rho * Sdv[0] * Sdv[1], 10 * ConvergenceRho, "Rho");
        }
Example #5
0
        public void SampleTest(double[] sdv, double[] mean, double rho, int seed)
        {
            var pdfLn  = new DensityLn <double[]>(x => LogDen(x, sdv, mean, rho));
            var hybrid = new HybridMC(new double[2] {
                0, 0
            }, pdfLn, 10, 0.1, 1000, new double[] { 1, 1 }, new System.Random(seed))
            {
                BurnInterval = 0
            };

            const int sampleSize = 10000;

            double[][] sample     = hybrid.Sample(sampleSize);
            double[][] newSamples = ArrangeSamples(sampleSize, sample);

            var convergence = new double[2];
            var sampleMean  = new double[2];
            var sampleSdv   = new double[2];

            for (int i = 0; i < 2; i++)
            {
                convergence[i] = 1 / Math.Sqrt(MCMCDiagnostics.EffectiveSize(sample, x => x[i]));
                var stats = new DescriptiveStatistics(newSamples[i]);
                sampleMean[i] = stats.Mean;
                sampleSdv[i]  = stats.StandardDeviation;
            }

            double sampleRho = Correlation.Pearson(newSamples[0], newSamples[1]);

            for (int i = 0; i < 2; i++)
            {
                string index = i.ToString();
                Assert.AreEqual(mean[i], sampleMean[i], 10 * convergence[i], index + "Mean");
                Assert.AreEqual(sampleSdv[i] * sampleSdv[i], sdv[i] * sdv[i], 10 * convergence[i], index + "Standard Deviation");
            }

            double convergenceRho = 1 / Math.Sqrt(MCMCDiagnostics.EffectiveSize(sample, x => (x[0] - sampleMean[0]) * (x[1] - sampleMean[1])));

            Assert.AreEqual(sampleRho * sampleSdv[0] * sampleSdv[1], rho * sdv[0] * sdv[1], 10 * convergenceRho, "Rho");
        }
Example #6
0
        public void SampleTest(double[] sdv, double[] mean, double rho, int seed)
        {
            var pdfLn = new DensityLn<double[]>(x => LogDen(x, sdv, mean, rho));
            var hybrid = new HybridMC(new double[] { 0, 0 }, pdfLn, 10, 0.1, 1000, new double[] { 1, 1 }, new System.Random(seed))
            {
                BurnInterval = 0
            };

            const int sampleSize = 10000;
            double[][] sample = hybrid.Sample(sampleSize);
            double[][] newSamples = ArrangeSamples(sampleSize, sample);

            var convergence = new double[2];
            var sampleMean = new double[2];
            var sampleSdv = new double[2];

            for (int i = 0; i < 2; i++)
            {
            // ReSharper disable once AccessToModifiedClosure
                convergence[i] = 1/Math.Sqrt(MCMCDiagnostics.EffectiveSize(sample, x => x[i]));
                var stats = new DescriptiveStatistics(newSamples[i]);
                sampleMean[i] = stats.Mean;
                sampleSdv[i] = stats.StandardDeviation;

            }

            double sampleRho = Correlation.Pearson(newSamples[0], newSamples[1]);

            for (int i = 0; i < 2; i++)
            {
                string index = i.ToString(CultureInfo.InvariantCulture);
                Assert.AreEqual(mean[i], sampleMean[i], 10*convergence[i], index + "Mean");
                Assert.AreEqual(sampleSdv[i]*sampleSdv[i], sdv[i]*sdv[i], 10*convergence[i], index + "Standard Deviation");
            }

            double convergenceRho = 1/Math.Sqrt(MCMCDiagnostics.EffectiveSize(sample, x => (x[0] - sampleMean[0])*(x[1] - sampleMean[1])));
            Assert.AreEqual(sampleRho*sampleSdv[0]*sampleSdv[1], rho*sdv[0]*sdv[1], 10*convergenceRho, "Rho");
        }
Example #7
0
        public void SampleTest()
        {
            //Variances and Means
            double[] Sdv = new double[2];
            double[] Mean = new double[2];
            for (int i = 0; i < 2; i++)
            {
                Sdv[i] = RandomVar();
                Mean[i] = 5 * rnd.NextDouble();

            }

            //Cross Variance
            double rho = 1.0 - RandomVar();

            DensityLn<double[]> pdfLn = new DensityLn<double[]>(x => LogDen(x, Sdv, Mean, rho));

            HybridMC Hybrid = new HybridMC(new double[2] { 0, 0 }, pdfLn, 10, 0.1, 1000);

            Hybrid.BurnInterval = 0;

            int SampleSize = 10000;
            double[][] Sample = Hybrid.Sample(SampleSize);
            double[][] NewSamples = ArrangeSamples(SampleSize, Sample);

            double[] Convergence = new double[2];
            double[] SampleMean = new double[2];
            double[] SampleSdv = new double[2];

            for (int i = 0; i < 2; i++)
            {
                Convergence[i] = 1 / Math.Sqrt(MCMCDiagnostics.EffectiveSize(Sample,x=>x[i]));
                DescriptiveStatistics Stats = new DescriptiveStatistics(NewSamples[i]);
                SampleMean[i] = Stats.Mean;
                SampleSdv[i] = Stats.StandardDeviation;

            }
            double SampleRho = Correlation.Pearson(NewSamples[0], NewSamples[1]);

            for (int i = 0; i < 2; i++)
            {
                string index = i.ToString();
                Assert.AreEqual(Mean[i], SampleMean[i], 10 * Convergence[i], index + "Mean");
                Assert.AreEqual(SampleSdv[i] * SampleSdv[i], Sdv[i] * Sdv[i], 10 * Convergence[i], index + "Standard Deviation");
            }

            double ConvergenceRho=1/Math.Sqrt(MCMCDiagnostics.EffectiveSize(Sample,x=>(x[0]-SampleMean[0])*(x[1]-SampleMean[1])));

            Assert.AreEqual(SampleRho*SampleSdv[0]*SampleSdv[1], rho*Sdv[0]*Sdv[1], 10 * ConvergenceRho, "Rho");
        }
Example #8
0
        public void RandomSourceTest()
        {
            HybridMC Hybrid = new HybridMC(new double[1] { 0 }, x => normal.DensityLn(x[0]), 10, 0.1);

            Assert.IsNotNull(Hybrid.RandomSource);

            Hybrid.RandomSource = new System.Random();
            Assert.IsNotNull(Hybrid.RandomSource);
        }