public static void main(String[] args) {
final double trueGlobalMean = 30d;
final Vector trueBetas =
VectorFactory.getDenseDefault().copyArray(new double[] {0d});
final Random rng = new Random(829351983l);
/*
* Sample test data from a binomial with log odds defined using the above parameters. Also, we
* produce predictor values by generating the randomly.
*/
// final MultivariateGaussian dataGeneratingDist =
// new MultivariateGaussian(VectorFactory.getDenseDefault().copyArray(
// new double[] {100d, -50d, 34d, 0d, 1e-3d}), MatrixFactory.getDenseDefault()
// .createDiagonal(
// VectorFactory.getDenseDefault().copyArray(new double[] {100d, 10d, 500d, 30d, 1d})));
final List<ObservedValue<Vector, Matrix>> observations = Lists.newArrayList();
for (int i = 0; i < 10000; i++) {
// final Vector dataSample = dataGeneratingDist.sample(rng);
final Vector dataSample = VectorFactory.getDenseDefault().copyArray(new
double[] {1d});
final double phi = Math.exp(-trueGlobalMean - dataSample.dotProduct(trueBetas));
final double pi = 1d / (1d + phi);
final Vector y = VectorFactory.getDenseDefault().createVector1D(rng.nextDouble() <= pi ? 1d : 0d);
final Matrix dataDesign = MatrixFactory.getDenseDefault().copyRowVectors(dataSample);
observations.add(ObservedValue.create(i, y, dataDesign));
}
/*
* Instantiate PL filter by first providing prior parameters/distributions.
*/
final Vector betaCovPriorMean = VectorFactory.getDefault().copyArray(
new double[] {200d});
final double betaPriorCovDof = 2 + betaCovPriorMean.getDimensionality();
final ScaledInverseGammaCovDistribution priorBetaCov =
new ScaledInverseGammaCovDistribution(betaCovPriorMean.getDimensionality(),
betaCovPriorMean.scale(betaPriorCovDof - 1d).getElement(0),
betaPriorCovDof);
final MultivariateGaussian priorBeta =
new MultivariateGaussian(VectorFactory.getDenseDefault().copyArray(
new double[] {0d}), priorBetaCov.getMean());