Author: psteitz
Date: Sun May 16 23:48:07 2010
New Revision: 944939
URL: http://svn.apache.org/viewvc?rev=944939&view=rev
Log:
Fixed loss of significance error in PersonsCorrelation p-value computation
causing p-values smaller than the machine epsilon (~1E-16) to be reported as 0.
JIRA: MATH-371
Reported and patched by Kevin Childs
Modified:
commons/proper/math/trunk/src/main/java/org/apache/commons/math/stat/correlation/PearsonsCorrelation.java
commons/proper/math/trunk/src/site/xdoc/changes.xml
commons/proper/math/trunk/src/test/java/org/apache/commons/math/stat/correlation/PearsonsCorrelationTest.java
Modified:
commons/proper/math/trunk/src/main/java/org/apache/commons/math/stat/correlation/PearsonsCorrelation.java
URL:
http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/stat/correlation/PearsonsCorrelation.java?rev=944939&r1=944938&r2=944939&view=diff
==============================================================================
---
commons/proper/math/trunk/src/main/java/org/apache/commons/math/stat/correlation/PearsonsCorrelation.java
(original)
+++
commons/proper/math/trunk/src/main/java/org/apache/commons/math/stat/correlation/PearsonsCorrelation.java
Sun May 16 23:48:07 2010
@@ -168,7 +168,7 @@ public class PearsonsCorrelation {
} else {
double r = correlationMatrix.getEntry(i, j);
double t = Math.abs(r * Math.sqrt((nObs - 2)/(1 - r * r)));
- out[i][j] = 2 * (1 -
tDistribution.cumulativeProbability(t));
+ out[i][j] = 2 * tDistribution.cumulativeProbability(-t);
}
}
}
Modified: commons/proper/math/trunk/src/site/xdoc/changes.xml
URL:
http://svn.apache.org/viewvc/commons/proper/math/trunk/src/site/xdoc/changes.xml?rev=944939&r1=944938&r2=944939&view=diff
==============================================================================
--- commons/proper/math/trunk/src/site/xdoc/changes.xml (original)
+++ commons/proper/math/trunk/src/site/xdoc/changes.xml Sun May 16 23:48:07 2010
@@ -52,6 +52,10 @@ The <action> type attribute can be add,u
If the output is not quite correct, check for invisible trailing spaces!
-->
<release version="2.2" date="TBD" description="TBD">
+ <action dev="psteitz" type="fix" issue="MATH-371" due-to="Kevin Childs">
+ Fixed loss of significance error in PersonsCorrelation p-value
computation causing p-values
+ smaller than the machine epsilon (~1E-16) to be reported as 0.
+ </action>
<action dev="luc" type="fix" issue="MATH-369" due-to="Sasun Pundev">
Fix NullPointerException in BisectionSolver.solve(f, min, max, initial)
</action>
Modified:
commons/proper/math/trunk/src/test/java/org/apache/commons/math/stat/correlation/PearsonsCorrelationTest.java
URL:
http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/java/org/apache/commons/math/stat/correlation/PearsonsCorrelationTest.java?rev=944939&r1=944938&r2=944939&view=diff
==============================================================================
---
commons/proper/math/trunk/src/test/java/org/apache/commons/math/stat/correlation/PearsonsCorrelationTest.java
(original)
+++
commons/proper/math/trunk/src/test/java/org/apache/commons/math/stat/correlation/PearsonsCorrelationTest.java
Sun May 16 23:48:07 2010
@@ -160,6 +160,27 @@ public class PearsonsCorrelationTest ext
fillUpper(rPMatrix, 0d);
TestUtils.assertEquals("correlation p values", rPMatrix,
corrInstance.getCorrelationPValues(), 10E-15);
}
+
+ /**
+ * Test p-value near 0. JIRA: MATH-371
+ */
+ public void testPValueNearZero() throws Exception {
+ /*
+ * Create a dataset that has r -> 1, p -> 0 as dimension increases.
+ * Prior to the fix for MATH-371, p vanished for dimension >= 14.
+ * Post fix, p-values diminish smoothly, vanishing at dimension = 127.
+ * Tested value is ~1E-303.
+ */
+ int dimension = 120;
+ double[][] data = new double[dimension][2];
+ for (int i = 0; i < dimension; i++) {
+ data[i][0] = i;
+ data[i][1] = i + 1/((double)i + 1);
+ }
+ PearsonsCorrelation corrInstance = new PearsonsCorrelation(data);
+ assertTrue(corrInstance.getCorrelationPValues().getEntry(0, 1) > 0);
+ }
+
/**
* Constant column