commons-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ki...@apache.org
Subject [2/2] [math] fix a bug that sometimes Binomial test return probability greater than 1
Date Tue, 09 May 2017 03:07:37 GMT
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 <kexin.xie@salesforce.com>
Authored: Sun May 7 09:47:14 2017 -0700
Committer: Bruno P. Kinoshita <brunodepaulak@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


Mime
View raw message