You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ps...@apache.org on 2009/12/30 02:03:32 UTC

svn commit: r894528 - /commons/proper/math/trunk/src/main/java/org/apache/commons/math/stat/descriptive/moment/Variance.java

Author: psteitz
Date: Wed Dec 30 01:03:32 2009
New Revision: 894528

URL: http://svn.apache.org/viewvc?rev=894528&view=rev
Log:
Changed weighted variance computational formula to use Chan-Golub method (consistent with unweighted version).

Modified:
    commons/proper/math/trunk/src/main/java/org/apache/commons/math/stat/descriptive/moment/Variance.java

Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math/stat/descriptive/moment/Variance.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/stat/descriptive/moment/Variance.java?rev=894528&r1=894527&r2=894528&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math/stat/descriptive/moment/Variance.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math/stat/descriptive/moment/Variance.java Wed Dec 30 01:03:32 2009
@@ -494,9 +494,11 @@
             } else if (length > 1) {
                 double accum = 0.0;
                 double dev = 0.0;
+                double accum2 = 0.0;
                 for (int i = begin; i < begin + length; i++) {
                     dev = values[i] - mean;
                     accum += weights[i] * (dev * dev);
+                    accum2 += weights[i] * dev;
                 }
 
                 double sumWts = 0;
@@ -505,9 +507,9 @@
                 }
 
                 if (isBiasCorrected) {
-                    var = accum / (sumWts - 1);
+                    var = (accum - (accum2 * accum2 / sumWts)) / (sumWts - 1.0);
                 } else {
-                    var = accum / sumWts;
+                    var = (accum - (accum2 * accum2 / sumWts)) / sumWts;
                 }
             }
         }