Skip to content

Commit 9430db6

Browse files
Om-A-osckgryte
andauthored
refactor: reuse variance implementation for stdev in stats/base/dists
PR-URL: #11370 Co-authored-by: Athan Reines <kgryte@gmail.com> Reviewed-by: Athan Reines <kgryte@gmail.com>
1 parent 314b918 commit 9430db6

File tree

27 files changed

+79
-247
lines changed

27 files changed

+79
-247
lines changed

lib/node_modules/@stdlib/stats/base/dists/bradford/stdev/lib/main.js

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,8 @@
2020

2121
// MODULES //
2222

23-
var isnan = require( '@stdlib/math/base/assert/is-nan' );
24-
var ln = require( '@stdlib/math/base/special/ln' );
2523
var sqrt = require( '@stdlib/math/base/special/sqrt' );
24+
var variance = require( '@stdlib/stats/base/dists/bradford/variance' );
2625

2726

2827
// MAIN //
@@ -58,12 +57,7 @@ var sqrt = require( '@stdlib/math/base/special/sqrt' );
5857
* // returns NaN
5958
*/
6059
function stdev( c ) {
61-
var k;
62-
if ( isnan( c ) || c <= 0.0 ) {
63-
return NaN;
64-
}
65-
k = ln( 1.0 + c );
66-
return sqrt( ( ( ( 2.0+c ) * k ) - ( 2.0*c ) ) / ( 2.0*c*k*k ) );
60+
return sqrt( variance( c ) );
6761
}
6862

6963

lib/node_modules/@stdlib/stats/base/dists/bradford/stdev/manifest.json

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,8 @@
3939
"libpath": [],
4040
"dependencies": [
4141
"@stdlib/math/base/napi/unary",
42-
"@stdlib/math/base/assert/is-nan",
43-
"@stdlib/math/base/special/ln",
44-
"@stdlib/math/base/special/sqrt"
42+
"@stdlib/math/base/special/sqrt",
43+
"@stdlib/stats/base/dists/bradford/variance"
4544
]
4645
},
4746
{
@@ -56,9 +55,8 @@
5655
"libraries": [],
5756
"libpath": [],
5857
"dependencies": [
59-
"@stdlib/math/base/assert/is-nan",
60-
"@stdlib/math/base/special/ln",
6158
"@stdlib/math/base/special/sqrt",
59+
"@stdlib/stats/base/dists/bradford/variance",
6260
"@stdlib/constants/float64/eps"
6361
]
6462
},
@@ -74,9 +72,8 @@
7472
"libraries": [],
7573
"libpath": [],
7674
"dependencies": [
77-
"@stdlib/math/base/assert/is-nan",
78-
"@stdlib/math/base/special/ln",
79-
"@stdlib/math/base/special/sqrt"
75+
"@stdlib/math/base/special/sqrt",
76+
"@stdlib/stats/base/dists/bradford/variance"
8077
]
8178
}
8279
]

lib/node_modules/@stdlib/stats/base/dists/bradford/stdev/src/main.c

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,8 @@
1717
*/
1818

1919
#include "stdlib/stats/base/dists/bradford/stdev.h"
20-
#include "stdlib/math/base/assert/is_nan.h"
21-
#include "stdlib/math/base/special/ln.h"
2220
#include "stdlib/math/base/special/sqrt.h"
21+
#include "stdlib/stats/base/dists/bradford/variance.h"
2322

2423
/**
2524
* Returns the standard deviation of a Bradford distribution.
@@ -32,10 +31,5 @@
3231
* // returns ~0.288
3332
*/
3433
double stdlib_base_dists_bradford_stdev( const double c ) {
35-
double k;
36-
if ( stdlib_base_is_nan( c ) || c <= 0.0 ) {
37-
return 0.0/0.0; // NaN
38-
}
39-
k = stdlib_base_ln( 1.0 + c );
40-
return stdlib_base_sqrt( ( ( ( 2.0+c ) * k ) - ( 2.0*c ) ) / ( 2.0*c*k*k ) );
34+
return stdlib_base_sqrt( stdlib_base_dists_bradford_variance( c ) );
4135
}

lib/node_modules/@stdlib/stats/base/dists/chisquare/stdev/lib/main.js

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020

2121
// MODULES //
2222

23-
var isnan = require( '@stdlib/math/base/assert/is-nan' );
2423
var sqrt = require( '@stdlib/math/base/special/sqrt' );
24+
var variance = require( '@stdlib/stats/base/dists/chisquare/variance' );
2525

2626

2727
// MAIN //
@@ -49,10 +49,7 @@ var sqrt = require( '@stdlib/math/base/special/sqrt' );
4949
* // returns NaN
5050
*/
5151
function stdev( k ) {
52-
if ( isnan( k ) || k < 0.0 ) {
53-
return NaN;
54-
}
55-
return sqrt( 2.0 * k );
52+
return sqrt( variance( k ) );
5653
}
5754

5855

lib/node_modules/@stdlib/stats/base/dists/chisquare/stdev/manifest.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@
3939
"libpath": [],
4040
"dependencies": [
4141
"@stdlib/math/base/napi/unary",
42-
"@stdlib/math/base/assert/is-nan",
43-
"@stdlib/math/base/special/sqrt"
42+
"@stdlib/math/base/special/sqrt",
43+
"@stdlib/stats/base/dists/chisquare/variance"
4444
]
4545
},
4646
{
@@ -55,8 +55,8 @@
5555
"libraries": [],
5656
"libpath": [],
5757
"dependencies": [
58-
"@stdlib/math/base/assert/is-nan",
5958
"@stdlib/math/base/special/sqrt",
59+
"@stdlib/stats/base/dists/chisquare/variance",
6060
"@stdlib/constants/float64/eps"
6161
]
6262
},
@@ -72,8 +72,8 @@
7272
"libraries": [],
7373
"libpath": [],
7474
"dependencies": [
75-
"@stdlib/math/base/assert/is-nan",
76-
"@stdlib/math/base/special/sqrt"
75+
"@stdlib/math/base/special/sqrt",
76+
"@stdlib/stats/base/dists/chisquare/variance"
7777
]
7878
}
7979
]

lib/node_modules/@stdlib/stats/base/dists/chisquare/stdev/src/main.c

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@
1717
*/
1818

1919
#include "stdlib/stats/base/dists/chisquare/stdev.h"
20-
#include "stdlib/math/base/assert/is_nan.h"
2120
#include "stdlib/math/base/special/sqrt.h"
21+
#include "stdlib/stats/base/dists/chisquare/variance.h"
2222

2323
/**
2424
* Returns the standard deviation of a chi-squared distribution.
@@ -31,8 +31,5 @@
3131
* // returns ~4.243
3232
*/
3333
double stdlib_base_dists_chisquare_stdev( const double k ) {
34-
if ( stdlib_base_is_nan( k ) || k < 0.0 ) {
35-
return 0.0/0.0; //NaN
36-
}
37-
return stdlib_base_sqrt( 2.0 * k );
34+
return stdlib_base_sqrt( stdlib_base_dists_chisquare_variance( k ) );
3835
}

lib/node_modules/@stdlib/stats/base/dists/hypergeometric/stdev/lib/main.js

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,8 @@
2020

2121
// MODULES //
2222

23-
var isNonNegativeInteger = require( '@stdlib/math/base/assert/is-nonnegative-integer' );
2423
var sqrt = require( '@stdlib/math/base/special/sqrt' );
25-
var PINF = require( '@stdlib/constants/float64/pinf' );
24+
var variance = require( '@stdlib/stats/base/dists/hypergeometric/variance' );
2625

2726

2827
// MAIN //
@@ -72,18 +71,7 @@ var PINF = require( '@stdlib/constants/float64/pinf' );
7271
* // returns NaN
7372
*/
7473
function stdev( N, K, n ) {
75-
if (
76-
!isNonNegativeInteger( N ) ||
77-
!isNonNegativeInteger( K ) ||
78-
!isNonNegativeInteger( n ) ||
79-
N === PINF ||
80-
K === PINF ||
81-
K > N ||
82-
n > N
83-
) {
84-
return NaN;
85-
}
86-
return sqrt( n * ( K/N ) * ( (N-K)/N ) * ( (N-n)/(N-1) ) );
74+
return sqrt( variance( N, K, n ) );
8775
}
8876

8977

lib/node_modules/@stdlib/stats/base/dists/hypergeometric/stdev/manifest.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@
3939
"libpath": [],
4040
"dependencies": [
4141
"@stdlib/math/base/napi/ternary",
42-
"@stdlib/math/base/special/sqrt"
42+
"@stdlib/math/base/special/sqrt",
43+
"@stdlib/stats/base/dists/hypergeometric/variance"
4344
]
4445
},
4546
{
@@ -55,6 +56,7 @@
5556
"libpath": [],
5657
"dependencies": [
5758
"@stdlib/math/base/special/sqrt",
59+
"@stdlib/stats/base/dists/hypergeometric/variance",
5860
"@stdlib/math/base/special/ceil"
5961
]
6062
},
@@ -71,6 +73,7 @@
7173
"libpath": [],
7274
"dependencies": [
7375
"@stdlib/math/base/special/sqrt",
76+
"@stdlib/stats/base/dists/hypergeometric/variance",
7477
"@stdlib/math/base/special/ceil"
7578
]
7679
}

lib/node_modules/@stdlib/stats/base/dists/hypergeometric/stdev/src/main.c

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
#include "stdlib/stats/base/dists/hypergeometric/stdev.h"
2020
#include "stdlib/math/base/special/sqrt.h"
21+
#include "stdlib/stats/base/dists/hypergeometric/variance.h"
2122
#include <stdint.h>
2223

2324
/**
@@ -33,13 +34,5 @@
3334
* // returns ~0.829
3435
*/
3536
double stdlib_base_dists_hypergeometric_stdev( const int32_t N, const int32_t K, const int32_t n ) {
36-
double variance;
37-
double p;
38-
39-
if ( N < 0 || K < 0 || n < 0 || K > N || n > N ) {
40-
return 0.0/0.0; // NaN
41-
}
42-
p = (double)K / (double)N;
43-
variance = n * p * ( 1.0-p ) * ( (double)(N-n)/(double)(N-1) );
44-
return stdlib_base_sqrt( variance );
37+
return stdlib_base_sqrt( stdlib_base_dists_hypergeometric_variance( N, K, n ) );
4538
}

lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/stdev/lib/main.js

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,8 @@
2020

2121
// MODULES //
2222

23-
var isnan = require( '@stdlib/math/base/assert/is-nan' );
24-
var beta = require( '@stdlib/math/base/special/beta' );
2523
var sqrt = require( '@stdlib/math/base/special/sqrt' );
24+
var variance = require( '@stdlib/stats/base/dists/kumaraswamy/variance' );
2625

2726

2827
// MAIN //
@@ -63,19 +62,7 @@ var sqrt = require( '@stdlib/math/base/special/sqrt' );
6362
* // returns NaN
6463
*/
6564
function stdev( a, b ) {
66-
var m1;
67-
var m2;
68-
if (
69-
isnan( a ) ||
70-
a <= 0.0 ||
71-
isnan( b ) ||
72-
b <= 0.0
73-
) {
74-
return NaN;
75-
}
76-
m1 = b * beta( 1.0 + ( 1.0/a ), b );
77-
m2 = b * beta( 1.0 + ( 2.0/a ), b );
78-
return sqrt( m2 - ( m1*m1 ) );
65+
return sqrt( variance( a, b ) );
7966
}
8067

8168

0 commit comments

Comments
 (0)