Perform computation/allocation only if needed.

Thanks to Dave Brosius.
This commit is contained in:
Gilles 2016-05-31 02:38:16 +02:00
parent 362ab2bc41
commit fc9d93db68
1 changed files with 6 additions and 7 deletions

View File

@ -35,19 +35,18 @@ public class ClopperPearsonInterval implements BinomialConfidenceInterval {
IntervalUtils.checkParameters(numberOfTrials, numberOfSuccesses, confidenceLevel); IntervalUtils.checkParameters(numberOfTrials, numberOfSuccesses, confidenceLevel);
double lowerBound = 0; double lowerBound = 0;
double upperBound = 0; double upperBound = 0;
final double alpha = (1.0 - confidenceLevel) / 2.0;
final FDistribution distributionLowerBound = new FDistribution(2 * (numberOfTrials - numberOfSuccesses + 1),
2 * numberOfSuccesses);
if (numberOfSuccesses > 0) { if (numberOfSuccesses > 0) {
final double alpha = 0.5 * (1 - confidenceLevel);
final FDistribution distributionLowerBound = new FDistribution(2 * (numberOfTrials - numberOfSuccesses + 1),
2 * numberOfSuccesses);
final double fValueLowerBound = distributionLowerBound.inverseCumulativeProbability(1 - alpha); final double fValueLowerBound = distributionLowerBound.inverseCumulativeProbability(1 - alpha);
lowerBound = numberOfSuccesses / lowerBound = numberOfSuccesses /
(numberOfSuccesses + (numberOfTrials - numberOfSuccesses + 1) * fValueLowerBound); (numberOfSuccesses + (numberOfTrials - numberOfSuccesses + 1) * fValueLowerBound);
}
final FDistribution distributionUpperBound = new FDistribution(2 * (numberOfSuccesses + 1), final FDistribution distributionUpperBound = new FDistribution(2 * (numberOfSuccesses + 1),
2 * (numberOfTrials - numberOfSuccesses)); 2 * (numberOfTrials - numberOfSuccesses));
if (numberOfSuccesses > 0) {
final double fValueUpperBound = distributionUpperBound.inverseCumulativeProbability(1 - alpha); final double fValueUpperBound = distributionUpperBound.inverseCumulativeProbability(1 - alpha);
upperBound = (numberOfSuccesses + 1) * fValueUpperBound / upperBound = (numberOfSuccesses + 1) * fValueUpperBound /
(numberOfTrials - numberOfSuccesses + (numberOfSuccesses + 1) * fValueUpperBound); (numberOfTrials - numberOfSuccesses + (numberOfSuccesses + 1) * fValueUpperBound);