Index: trunk/tests_python/amiseOptimalBw_test.py =================================================================== --- trunk/tests_python/amiseOptimalBw_test.py (revision 807) +++ trunk/tests_python/amiseOptimalBw_test.py (revision 808) @@ -1,29 +1,46 @@ import npstat as ns import unittest def densityScan(npoints): xmin = 0.0 xmax = 5.0 h = (xmax - xmin)/npoints distro = ns.TruncatedDistribution1D(ns.Exponential1D(0.0, 1.0), xmin, xmax) x, y = ns.scanDensity1D(distro, xmin+h/2, xmax-h/2, npoints) return y, h class TestOptimalBw(unittest.TestCase): def test_amiseOptimalBwGauss(self): scanPoints = 10000 sampleSize = 500 scan, h = densityScan(scanPoints) bw, amise = ns.amiseOptimalBwGauss(0, sampleSize, scan, h) print("\nOptimal Gauss bw is", bw, "expected AMISE", amise) def test_amiseOptimalBwSymbeta(self): scanPoints = 10000 sampleSize = 500 symbetaPower = 4 scan, h = densityScan(scanPoints) bw, amise = ns.amiseOptimalBwSymbeta(symbetaPower, 0, sampleSize, scan, h) print("\nOptimal symbeta bw is", bw, "expected AMISE", amise) + def test_amiseOptimalBwMixture(self): + scanPoints = 10000 + sampleSize = 1000000 + filterDeg = 2 + component1 = ns.GaussianMixtureEntry(3.0, -1.0, 0.5) + component2 = ns.GaussianMixtureEntry(7.0, 1.0, 0.5) + mixture = ns.GaussianMixture1D(0.0, 1.0, (component1, component2)) + xmin = -4.0 + xmax = 4.0 + h = (xmax - xmin)/scanPoints + x, scan = ns.scanDensity1D(mixture, xmin+h/2, xmax-h/2, scanPoints) + bw, amise = ns.amiseOptimalBwGauss(filterDeg, sampleSize, scan, h) + bestBw = mixture.miseOptimalBw(filterDeg, sampleSize) + bestMise = mixture.gaussianMISE(filterDeg, bestBw, sampleSize) + print("\nMixture asymptotic bw is", bw, "AMISE", amise) + print("Mixture exact bw is", bestBw, "expected MISE", bestMise) + suite = unittest.TestLoader().loadTestsFromTestCase(TestOptimalBw) unittest.TextTestRunner(verbosity=2).run(suite)