public BetaDistributionNearbyRandom(double betaDistributionAlpha, double betaDistributionBeta) { if (betaDistributionAlpha <= 0) { throw new IllegalArgumentException("The betaDistributionAlpha (" + betaDistributionAlpha + ") must be greater than 0."); } if (betaDistributionBeta <= 0) { throw new IllegalArgumentException("The betaDistributionBeta (" + betaDistributionBeta + ") must be greater than 0."); } betaDistribution = new BetaDistribution(betaDistributionAlpha, betaDistributionBeta); }
/** * Generates a random value from the {@link BetaDistribution Beta Distribution}. * * @param alpha first distribution shape parameter * @param beta second distribution shape parameter * @return random value sampled from the beta(alpha, beta) distribution */ public double nextBeta(double alpha, double beta) { return new BetaDistribution(getRandomGenerator(), alpha, beta, BetaDistribution.DEFAULT_INVERSE_ABSOLUTE_ACCURACY).sample(); }
@Description("inverse of Beta cdf given a, b parameters and probability") @ScalarFunction @SqlType(StandardTypes.DOUBLE) public static double inverseBetaCdf( @SqlType(StandardTypes.DOUBLE) double a, @SqlType(StandardTypes.DOUBLE) double b, @SqlType(StandardTypes.DOUBLE) double p) { checkCondition(p >= 0 && p <= 1, INVALID_FUNCTION_ARGUMENT, "p must be 0 >= p >= 1"); checkCondition(a > 0 && b > 0, INVALID_FUNCTION_ARGUMENT, "a, b must be > 0"); BetaDistribution distribution = new BetaDistribution(null, a, b, BetaDistribution.DEFAULT_INVERSE_ABSOLUTE_ACCURACY); return distribution.inverseCumulativeProbability(p); }
@Description("Beta cdf given the a, b parameters and value") @ScalarFunction @SqlType(StandardTypes.DOUBLE) public static double betaCdf( @SqlType(StandardTypes.DOUBLE) double a, @SqlType(StandardTypes.DOUBLE) double b, @SqlType(StandardTypes.DOUBLE) double value) { checkCondition(value >= 0 && value <= 1, INVALID_FUNCTION_ARGUMENT, "value must be 0 >= v >= 1"); checkCondition(a > 0 && b > 0, INVALID_FUNCTION_ARGUMENT, "a, b must be > 0"); BetaDistribution distribution = new BetaDistribution(null, a, b, BetaDistribution.DEFAULT_INVERSE_ABSOLUTE_ACCURACY); return distribution.cumulativeProbability(value); }
public ItemParamPriorBeta(double alpha, double beta){ this.alpha = alpha; this.beta = beta; betaDistribution = new BetaDistribution(alpha, beta); }
public Beta(double alpha, double beta) { // TODO: use Prng. this.beta = new BetaDistribution(alpha, beta); }
@Override public Object doWork(Object first, Object second) throws IOException{ if(null == first){ throw new IOException(String.format(Locale.ROOT,"Invalid expression %s - null found for the first value",toExpression(constructingFactory))); } if(null == second){ throw new IOException(String.format(Locale.ROOT,"Invalid expression %s - null found for the second value",toExpression(constructingFactory))); } Number shape1 = (Number)first; Number shape2 = (Number)second; return new BetaDistribution(shape1.doubleValue(), shape2.doubleValue()); } }
@Override public long calculateWaitingTime() { BetaDistribution betaDist = new BetaDistribution(betaDistParamA, betaDistParamB); double probability = betaDist.cumulativeProbability(Math.random()); return calculateNormedValue(probability); } }
/** * Generates a random value from the {@link BetaDistribution Beta Distribution}. * * @param alpha first distribution shape parameter * @param beta second distribution shape parameter * @return random value sampled from the beta(alpha, beta) distribution */ public double nextBeta(double alpha, double beta) { return new BetaDistribution(getRandomGenerator(), alpha, beta, BetaDistribution.DEFAULT_INVERSE_ABSOLUTE_ACCURACY).sample(); }
/** * Generates a random value from the {@link BetaDistribution Beta Distribution}. * * @param alpha first distribution shape parameter * @param beta second distribution shape parameter * @return random value sampled from the beta(alpha, beta) distribution */ public double nextBeta(double alpha, double beta) { return new BetaDistribution(getRandomGenerator(), alpha, beta, BetaDistribution.DEFAULT_INVERSE_ABSOLUTE_ACCURACY).sample(); }
public RealDistribution getRealDistribution(Context context) { RandomGenerator randomGenerator = RandomUtil.getInstance().getRandomGenerator(); double e1 = getExpressions().get(0).evaluate(context); double e2 = getExpressions().get(1).evaluate(context); return new BetaDistribution(randomGenerator, e1, e2); } };
public double evaluate(Context context) { RandomGenerator randomGenerator = RandomUtil.getInstance().getRandomGenerator(); double e1 = getExpressions().get(0).evaluate(context); double e2 = getExpressions().get(1).evaluate(context); return new BetaDistribution(randomGenerator, e1, e2).sample(); }
@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); }
@Description("Beta cdf given the a, b parameters and value") @ScalarFunction @SqlType(StandardTypes.DOUBLE) public static double betaCdf( @SqlType(StandardTypes.DOUBLE) double a, @SqlType(StandardTypes.DOUBLE) double b, @SqlType(StandardTypes.DOUBLE) double value) { checkCondition(value >= 0 && value <= 1, INVALID_FUNCTION_ARGUMENT, "value must be 0 >= v >= 1"); checkCondition(a > 0 && b > 0, INVALID_FUNCTION_ARGUMENT, "a, b must be > 0"); BetaDistribution distribution = new BetaDistribution(null, a, b, BetaDistribution.DEFAULT_INVERSE_ABSOLUTE_ACCURACY); return distribution.cumulativeProbability(value); }
@Description("inverse of Beta cdf given a, b parameters and probability") @ScalarFunction @SqlType(StandardTypes.DOUBLE) public static double inverseBetaCdf( @SqlType(StandardTypes.DOUBLE) double a, @SqlType(StandardTypes.DOUBLE) double b, @SqlType(StandardTypes.DOUBLE) double p) { checkCondition(p >= 0 && p <= 1, INVALID_FUNCTION_ARGUMENT, "p must be 0 >= p >= 1"); checkCondition(a > 0 && b > 0, INVALID_FUNCTION_ARGUMENT, "a, b must be > 0"); BetaDistribution distribution = new BetaDistribution(null, a, b, BetaDistribution.DEFAULT_INVERSE_ABSOLUTE_ACCURACY); return distribution.inverseCumulativeProbability(p); }
@Description("inverse of Beta cdf given a, b parameters and probability") @ScalarFunction @SqlType(StandardTypes.DOUBLE) public static double inverseBetaCdf( @SqlType(StandardTypes.DOUBLE) double a, @SqlType(StandardTypes.DOUBLE) double b, @SqlType(StandardTypes.DOUBLE) double p) { checkCondition(p >= 0 && p <= 1, INVALID_FUNCTION_ARGUMENT, "p must be 0 >= p >= 1"); checkCondition(a > 0 && b > 0, INVALID_FUNCTION_ARGUMENT, "a, b must be > 0"); BetaDistribution distribution = new BetaDistribution(null, a, b, BetaDistribution.DEFAULT_INVERSE_ABSOLUTE_ACCURACY); return distribution.inverseCumulativeProbability(p); }
@Description("Beta cdf given the a, b parameters and value") @ScalarFunction @SqlType(StandardTypes.DOUBLE) public static double betaCdf( @SqlType(StandardTypes.DOUBLE) double a, @SqlType(StandardTypes.DOUBLE) double b, @SqlType(StandardTypes.DOUBLE) double value) { checkCondition(value >= 0 && value <= 1, INVALID_FUNCTION_ARGUMENT, "value must be 0 >= v >= 1"); checkCondition(a > 0 && b > 0, INVALID_FUNCTION_ARGUMENT, "a, b must be > 0"); BetaDistribution distribution = new BetaDistribution(null, a, b, BetaDistribution.DEFAULT_INVERSE_ABSOLUTE_ACCURACY); return distribution.cumulativeProbability(value); }
@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 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); }
@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); }