stdlib-js / stdlib

✨ Standard library for JavaScript and Node.js. ✨
https://stdlib.io
Apache License 2.0
4.37k stars 447 forks source link

Incremental skewness and other higher moments when provided equal values do not yield expected results #287

Open kgryte opened 4 years ago

kgryte commented 4 years ago

Checklist

Please ensure the following tasks are completed before filing a bug report.

Description

Description of the issue.

Encountered a potential bug when using the incremental accumulators for skewness and kurtosis. Notably, when providing all equal values, the accumulators return NaN. However, for uniformly distributed values, the skewness is 0.

Related Issues

Does this issue have any related issues?

No related issues in this repository. However, Pandas seems to have encountered a similar issue: https://github.com/pandas-dev/pandas/issues/18044.

Questions

Any questions for reviewers?

No.

Other

Any other information relevant to this issue? This may include screenshots, references, stack traces, sample output, and/or implementation notes.

No.

Demo

If relevant, provide a link to a live demo.

N/A

Reproduction

What steps are required to reproduce the unexpected output?

In order to reproduce this bug, do the following:

var incrskewness = require( '@stdlib/stats/incr/skewness' );

var acc = incrskewnesss();

for ( var i = 0; i < 100; i++ ) {
    acc( 10.0 );
}
console.log( acc() );
// => NaN 

Expected Results

What are the expected results?

The following results are expected:

0

Actual Results

What are the actual results?

The following are the actual results:

NaN

Environments

What environments are affected (e.g., Node v0.4.x, Chrome, IE 11)? If Node.js, include the npm version, operating system, and any other potentially relevant platform information.

All environments are affected.

kgryte commented 4 years ago

The fix may be as simple as checking whether M2 is 0.0, before performing division. See here.