commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Phil Steitz (Commented) (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (MATH-691) Statistics.setVarianceImpl makes getStandardDeviation produce NaN
Date Sun, 16 Oct 2011 19:34:11 GMT

    [ https://issues.apache.org/jira/browse/MATH-691?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13128497#comment-13128497
] 

Phil Steitz commented on MATH-691:
----------------------------------

Warren reported that the second workaround above does not work.  He is correct.  That is the
result of yet another problem in this class.
{code}
public double getVariance() {
    if (varianceImpl == variance) {
        return new Variance(secondMoment).getResult();
    } else {
        return varianceImpl.getResult();
    }
}
{code}

In the first case, varianceImpl is not used, so setting its properties has no effect.  The
mean has a similar problem.  The root cause of all of these problems is the reuse of momemts
(i.e., just incrementing the moments instead of both them and the Mean and Variance instances).
 We could either toss this (slight loss in performance, but likely trivial) or expose or allow
moments to be attached to Mean, Variance instances.


                
> Statistics.setVarianceImpl makes getStandardDeviation produce NaN
> -----------------------------------------------------------------
>
>                 Key: MATH-691
>                 URL: https://issues.apache.org/jira/browse/MATH-691
>             Project: Commons Math
>          Issue Type: Bug
>    Affects Versions: 2.2
>         Environment: Windows 7 64-bit, java version 1.6.0_23
>            Reporter: Warren Tang
>            Priority: Minor
>   Original Estimate: 5h
>  Remaining Estimate: 5h
>
> Invoking SummaryStatistics.setVarianceImpl(new Variance(true/false) makes getStandardDeviation
produce NaN. The code to reproduce it:
> {code:java}
> int[] scores = {1, 2, 3, 4};
> SummaryStatistics stats = new SummaryStatistics();
> stats.setVarianceImpl(new Variance(false)); //use "population variance"
> for(int i : scores) {
>   stats.addValue(i);
> }
> double sd = stats.getStandardDeviation();
> System.out.println(sd);
> {code}
> A workaround suggested by Mikkel is:
> {code:java}
>   double sd = FastMath.sqrt(stats.getSecondMoment() / stats.getN());
> {code}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Mime
View raw message