You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ki...@apache.org on 2017/05/09 03:07:37 UTC
[2/2] [math] fix a bug that sometimes Binomial test return
probability greater than 1
fix a bug that sometimes Binomial test return probability greater than 1
Project: http://git-wip-us.apache.org/repos/asf/commons-math/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-math/commit/9df5e941
Tree: http://git-wip-us.apache.org/repos/asf/commons-math/tree/9df5e941
Diff: http://git-wip-us.apache.org/repos/asf/commons-math/diff/9df5e941
Branch: refs/heads/master
Commit: 9df5e9419d83c11b4a2c3421c5ff7ea1f544366b
Parents: 53ec46b
Author: Kexin Xie <ke...@salesforce.com>
Authored: Sun May 7 09:47:14 2017 -0700
Committer: Bruno P. Kinoshita <br...@yahoo.com.br>
Committed: Tue May 9 15:06:52 2017 +1200
----------------------------------------------------------------------
.../math4/stat/inference/BinomialTest.java | 6 ++-
.../math4/stat/inference/BinomialTestTest.java | 48 ++++++++++++++++++++
2 files changed, 53 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/commons-math/blob/9df5e941/src/main/java/org/apache/commons/math4/stat/inference/BinomialTest.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/math4/stat/inference/BinomialTest.java b/src/main/java/org/apache/commons/math4/stat/inference/BinomialTest.java
index 2846c68..4a94130 100644
--- a/src/main/java/org/apache/commons/math4/stat/inference/BinomialTest.java
+++ b/src/main/java/org/apache/commons/math4/stat/inference/BinomialTest.java
@@ -135,7 +135,11 @@ public class BinomialTest {
double pHigh = distribution.probability(criticalValueHigh);
if (pLow == pHigh) {
- pTotal += 2 * pLow;
+ if (criticalValueLow == criticalValueHigh) {
+ pTotal += pLow;
+ } else {
+ pTotal += 2 * pLow;
+ }
criticalValueLow++;
criticalValueHigh--;
} else if (pLow < pHigh) {
http://git-wip-us.apache.org/repos/asf/commons-math/blob/9df5e941/src/test/java/org/apache/commons/math4/stat/inference/BinomialTestTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/commons/math4/stat/inference/BinomialTestTest.java b/src/test/java/org/apache/commons/math4/stat/inference/BinomialTestTest.java
index 365f21d..55e1730 100644
--- a/src/test/java/org/apache/commons/math4/stat/inference/BinomialTestTest.java
+++ b/src/test/java/org/apache/commons/math4/stat/inference/BinomialTestTest.java
@@ -42,6 +42,54 @@ public class BinomialTestTest {
trials, successes, probability, AlternativeHypothesis.GREATER_THAN), 1E-4);
Assert.assertEquals(0.982, testStatistic.binomialTest(
trials, successes, probability, AlternativeHypothesis.LESS_THAN), 1E-4);
+
+ // for special boundary conditions
+ Assert.assertEquals(1, testStatistic.binomialTest(
+ 3, 3, 1, AlternativeHypothesis.TWO_SIDED), 1E-4);
+ Assert.assertEquals(1, testStatistic.binomialTest(
+ 3, 3, 0.9, AlternativeHypothesis.TWO_SIDED), 1E-4);
+ Assert.assertEquals(1, testStatistic.binomialTest(
+ 3, 3, 0.8, AlternativeHypothesis.TWO_SIDED), 1E-4);
+ Assert.assertEquals(0.559, testStatistic.binomialTest(
+ 3, 3, 0.7, AlternativeHypothesis.TWO_SIDED), 1E-4);
+ Assert.assertEquals(0.28, testStatistic.binomialTest(
+ 3, 3, 0.6, AlternativeHypothesis.TWO_SIDED), 1E-4);
+ Assert.assertEquals(0.25, testStatistic.binomialTest(
+ 3, 3, 0.5, AlternativeHypothesis.TWO_SIDED), 1E-4);
+ Assert.assertEquals(0.064, testStatistic.binomialTest(
+ 3, 3, 0.4, AlternativeHypothesis.TWO_SIDED), 1E-4);
+ Assert.assertEquals(0.027, testStatistic.binomialTest(
+ 3, 3, 0.3, AlternativeHypothesis.TWO_SIDED), 1E-4);
+ Assert.assertEquals(0.008, testStatistic.binomialTest(
+ 3, 3, 0.2, AlternativeHypothesis.TWO_SIDED), 1E-4);
+ Assert.assertEquals(0.001, testStatistic.binomialTest(
+ 3, 3, 0.1, AlternativeHypothesis.TWO_SIDED), 1E-4);
+ Assert.assertEquals(0, testStatistic.binomialTest(
+ 3, 3, 0.0, AlternativeHypothesis.TWO_SIDED), 1E-4);
+
+ Assert.assertEquals(0, testStatistic.binomialTest(
+ 3, 0, 1, AlternativeHypothesis.TWO_SIDED), 1E-4);
+ Assert.assertEquals(0.001, testStatistic.binomialTest(
+ 3, 0, 0.9, AlternativeHypothesis.TWO_SIDED), 1E-4);
+ Assert.assertEquals(0.008, testStatistic.binomialTest(
+ 3, 0, 0.8, AlternativeHypothesis.TWO_SIDED), 1E-4);
+ Assert.assertEquals(0.027, testStatistic.binomialTest(
+ 3, 0, 0.7, AlternativeHypothesis.TWO_SIDED), 1E-4);
+ Assert.assertEquals(0.064, testStatistic.binomialTest(
+ 3, 0, 0.6, AlternativeHypothesis.TWO_SIDED), 1E-4);
+ Assert.assertEquals(0.25, testStatistic.binomialTest(
+ 3, 0, 0.5, AlternativeHypothesis.TWO_SIDED), 1E-4);
+ Assert.assertEquals(0.28, testStatistic.binomialTest(
+ 3, 0, 0.4, AlternativeHypothesis.TWO_SIDED), 1E-4);
+ Assert.assertEquals(0.559, testStatistic.binomialTest(
+ 3, 0, 0.3, AlternativeHypothesis.TWO_SIDED), 1E-4);
+ Assert.assertEquals(1, testStatistic.binomialTest(
+ 3, 0, 0.2, AlternativeHypothesis.TWO_SIDED), 1E-4);
+ Assert.assertEquals(1, testStatistic.binomialTest(
+ 3, 0, 0.1, AlternativeHypothesis.TWO_SIDED), 1E-4);
+ Assert.assertEquals(1, testStatistic.binomialTest(
+ 3, 0, 0.0, AlternativeHypothesis.TWO_SIDED), 1E-4);
+
}
@Test