/** {@inheritDoc} */ public double density(double x) { final double logDensity = logDensity(x); return logDensity == Double.NEGATIVE_INFINITY ? 0 : FastMath.exp(logDensity); }
public double logDensity(double x){ if(x<0) return Double.MIN_VALUE; if(x>1) return Double.MIN_VALUE; return betaDistribution.logDensity(x); }
/** {@inheritDoc} */ public double density(double x) { final double logDensity = logDensity(x); return logDensity == Double.NEGATIVE_INFINITY ? 0 : Math.exp(logDensity); }
/** {@inheritDoc} */ public double density(double x) { final double logDensity = logDensity(x); return logDensity == Double.NEGATIVE_INFINITY ? 0 : FastMath.exp(logDensity); }
@Test public void logProbMatchesKnownLogDensityOfVector() { BetaDistribution betaDistribution = new BetaDistribution(2, 3); double expectedLogDensity = betaDistribution.logDensity(0.25) + betaDistribution.logDensity(0.1); BetaVertex ndBetaVertex = new BetaVertex(2, 3); ProbabilisticDoubleTensorContract.matchesKnownLogDensityOfVector(ndBetaVertex, new double[]{0.25, 0.1}, expectedLogDensity); }
@Test public void logProbMatchesKnownLogDensityOfScalar() { BetaVertex tensorBetaVertex = new BetaVertex(2., 3.); BetaDistribution betaDistribution = new BetaDistribution(2.0, 3.0); double expectedDensity = betaDistribution.logDensity(0.5); ProbabilisticDoubleTensorContract.matchesKnownLogDensityOfScalar(tensorBetaVertex, 0.5, expectedDensity); }
@Test public void logProbGraphMatchesKnownLogDensityOfVector() { DoubleVertex alpha = ConstantVertex.of(2., 2.); DoubleVertex beta = ConstantVertex.of(3., 3.); BetaVertex tensorBetaVertex = new BetaVertex(alpha, beta); LogProbGraph logProbGraph = tensorBetaVertex.logProbGraph(); LogProbGraphValueFeeder.feedValue(logProbGraph, alpha, alpha.getValue()); LogProbGraphValueFeeder.feedValue(logProbGraph, beta, beta.getValue()); LogProbGraphValueFeeder.feedValue(logProbGraph, tensorBetaVertex, DoubleTensor.create(0.25, 0.1)); BetaDistribution betaDistribution = new BetaDistribution(2., 3.); double expectedDensity = betaDistribution.logDensity(0.25) + betaDistribution.logDensity(0.1); LogProbGraphContract.matchesKnownLogDensity(logProbGraph, expectedDensity); }
@Test public void twoDimensionalDirichletLogProbGraphEqualsABeta() { DoubleVertex concentration = ConstantVertex.of(0.4, 1.); DirichletVertex vertex = new DirichletVertex(concentration); BetaDistribution betaDistribution = new BetaDistribution(0.4, 1.); LogProbGraph logProbGraph = vertex.logProbGraph(); LogProbGraphValueFeeder.feedValue(logProbGraph, concentration, concentration.getValue()); LogProbGraphValueFeeder.feedValue(logProbGraph, vertex, DoubleTensor.create(0.5, 0.5)); double expectedDensity = betaDistribution.logDensity(0.5); LogProbGraphContract.matchesKnownLogDensity(logProbGraph, expectedDensity); LogProbGraphValueFeeder.feedValueAndCascade(logProbGraph, vertex, DoubleTensor.create(0.75, 0.25)); expectedDensity = betaDistribution.logDensity(0.75); LogProbGraphContract.matchesKnownLogDensity(logProbGraph, expectedDensity); }
@Test public void logProbGraphMatchesKnownLogDensityOfScalar() { DoubleVertex alpha = ConstantVertex.of(2.); DoubleVertex beta = ConstantVertex.of(3.); BetaVertex tensorBetaVertex = new BetaVertex(alpha, beta); LogProbGraph logProbGraph = tensorBetaVertex.logProbGraph(); LogProbGraphValueFeeder.feedValue(logProbGraph, alpha, alpha.getValue()); LogProbGraphValueFeeder.feedValue(logProbGraph, beta, beta.getValue()); LogProbGraphValueFeeder.feedValue(logProbGraph, tensorBetaVertex, DoubleTensor.scalar(0.5)); BetaDistribution betaDistribution = new BetaDistribution(2., 3.); double expectedDensity = betaDistribution.logDensity(0.5); LogProbGraphContract.matchesKnownLogDensity(logProbGraph, expectedDensity); }