Changed weighted variance computational formula to use Chan-Golub method (consistent with unweighted version).

git-svn-id: https://svn.apache.org/repos/asf/commons/proper/math/trunk@894528 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Phil Steitz 2009-12-30 01:03:32 +00:00
parent e193fc40fd
commit 0920122ae6
1 changed files with 4 additions and 2 deletions

View File

@ -494,9 +494,11 @@ public class Variance extends AbstractStorelessUnivariateStatistic implements Se
} else if (length > 1) { } else if (length > 1) {
double accum = 0.0; double accum = 0.0;
double dev = 0.0; double dev = 0.0;
double accum2 = 0.0;
for (int i = begin; i < begin + length; i++) { for (int i = begin; i < begin + length; i++) {
dev = values[i] - mean; dev = values[i] - mean;
accum += weights[i] * (dev * dev); accum += weights[i] * (dev * dev);
accum2 += weights[i] * dev;
} }
double sumWts = 0; double sumWts = 0;
@ -505,9 +507,9 @@ public class Variance extends AbstractStorelessUnivariateStatistic implements Se
} }
if (isBiasCorrected) { if (isBiasCorrected) {
var = accum / (sumWts - 1); var = (accum - (accum2 * accum2 / sumWts)) / (sumWts - 1.0);
} else { } else {
var = accum / sumWts; var = (accum - (accum2 * accum2 / sumWts)) / sumWts;
} }
} }
} }