package test.dr.math;
import dr.math.MathUtils;
import dr.math.distributions.NormalKDEDistribution;
import dr.math.matrixAlgebra.Vector;
/**
* @author Marc A. Suchard
*/
public class KDEDistributionTest extends MathTestCase {
public void testNormalKDE() {
int length = 100;
Double[] sample = new Double[length];
for (int i = 0; i < length; i++) {
sample[i] = (double) (i + 1);
}
// final int gridSize = 256;
NormalKDEDistribution kde = new NormalKDEDistribution(sample, null, null, null);
System.out.println("bw = " + kde.getBandWidth());
assertEquals(rBandWidth[0], kde.getBandWidth(), tolerance);
final int gridSize = NormalKDEDistribution.MINIMUM_GRID_SIZE;
double[] testPoints = new double[gridSize];
double x = kde.getFromPoint();
double delta = (kde.getToPoint() - kde.getFromPoint()) / (gridSize - 1);
for (int i = 0; i < gridSize; ++i) {
testPoints[i] = x;
x += delta;
}
System.err.println("Eval @ " + new Vector(testPoints));
double[] testDensity = new double[gridSize];
for (int i = 0; i < gridSize; ++i) {
testDensity[i] = kde.pdf(testPoints[i]);
}
System.err.println("Den " + new Vector(testDensity));
System.err.println("den[0] = " + testDensity[0]);
System.err.println("den[N] = " + testDensity[NormalKDEDistribution.MINIMUM_GRID_SIZE - 1]);
// System.exit(-1);
}
public void testGammaKDE() {
int length = 10000;
double shape = 4;
double scale = 5;
double[] values = new double[length];
for (int i = 0; i < length; i++) {
values[i] = MathUtils.nextGamma(shape, scale);
}
// GammaKDEDistribution kde = new GammaKDEDistribution(values);
// System.err.println("prediction: at 2.02: "+kde.pdf(2.02177)+" at 0.405: "+kde.pdf(0.4046729)+" at 0.15: "+kde.pdf(0.1502078));
// System.err.println("sm: "+kde.sampleMean());
// TODO Need test values
}
private static double[] rBandWidth = { 12.24266 };
private static double tolerance = 1E-4;
}
/*
# R test
sample = seq(1:100)
d = density(sample, bw="nrd")
*/