package test.dr.math;
import dr.math.EmpiricalBayesPoissonSmoother;
import dr.math.MathUtils;
import dr.stats.DiscreteStatistics;
/**
* @author Marc A. Suchard
*/
public class EmpiricalBayesPoissonSmootherTest extends MathTestCase {
public void testSmootherMean() {
MathUtils.setSeed(666);
int length = 100;
double[] in = new double[length];
for (int i = 0; i < length; ++i) {
in[i] = MathUtils.nextDouble() * 100.0;
}
doSmoothing(in);
}
public void testUnstableMean() {
double[] in = new double[] {0, 1};
doSmoothing(in);
}
private void doSmoothing(double[] in) {
double meanX = DiscreteStatistics.mean(in);
double varX = DiscreteStatistics.variance(in);
System.err.println("Original mean: " + meanX);
System.err.println("Original var : " + varX + "\n");
double[] out = EmpiricalBayesPoissonSmoother.smooth(in);
double meanY = DiscreteStatistics.mean(out);
double varY = DiscreteStatistics.variance(out);
System.err.println("Smoothed mean: " + meanY);
System.err.println("Smoothed var : " + varY);
System.err.println("");
assertEquals(meanX, meanY, tolerance);
assertTrue(varY <= varX);
}
private static final double tolerance = 10E-6;
}