Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,7 @@ Evaluates the [moment-generating function][mgf] (MGF).
var nbinomial = new NegativeBinomial( 4.0, 0.2 );

var y = nbinomial.mgf( 0.1 );
// returns ~1.66
// returns ~8.878
```

#### NegativeBinomial.prototype.pmf( x )
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@
> nbinomial.logpmf( 3.0 )
~-2.837
> nbinomial.mgf( 0.2 )
~36.675
~7.405
> nbinomial.pmf( 3.0 )
~0.059
> nbinomial.quantile( 0.8 )
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@
* var y = nbinomial.cdf( 10.0 );
* // returns ~0.013
*
* var v = nbinomial.mode;

Check warning on line 120 in lib/node_modules/@stdlib/stats/base/dists/negative-binomial/ctor/lib/main.js

View workflow job for this annotation

GitHub Actions / Lint Changed Files

Unknown word: "nbinomial"
* // returns 36.0
*/
function NegativeBinomial() {
Expand Down Expand Up @@ -182,7 +182,7 @@
* @example
* var nbinomial = new NegativeBinomial( 12.0, 0.4 );
*
* var v = nbinomial.kurtosis;

Check warning on line 185 in lib/node_modules/@stdlib/stats/base/dists/negative-binomial/ctor/lib/main.js

View workflow job for this annotation

GitHub Actions / Lint Changed Files

Unknown word: "nbinomial"
* // returns ~0.522
*/
setReadOnlyAccessor( NegativeBinomial.prototype, 'kurtosis', function get() {
Expand All @@ -200,7 +200,7 @@
* @example
* var nbinomial = new NegativeBinomial( 12.0, 0.4 );
*
* var v = nbinomial.mean;

Check warning on line 203 in lib/node_modules/@stdlib/stats/base/dists/negative-binomial/ctor/lib/main.js

View workflow job for this annotation

GitHub Actions / Lint Changed Files

Unknown word: "nbinomial"
* // returns ~18.0
*/
setReadOnlyAccessor( NegativeBinomial.prototype, 'mean', function get() {
Expand All @@ -218,7 +218,7 @@
* @example
* var nbinomial = new NegativeBinomial( 12.0, 0.4 );
*
* var v = nbinomial.mode;

Check warning on line 221 in lib/node_modules/@stdlib/stats/base/dists/negative-binomial/ctor/lib/main.js

View workflow job for this annotation

GitHub Actions / Lint Changed Files

Unknown word: "nbinomial"
* // returns 16.0
*/
setReadOnlyAccessor( NegativeBinomial.prototype, 'mode', function get() {
Expand All @@ -236,7 +236,7 @@
* @example
* var nbinomial = new NegativeBinomial( 12.0, 0.4 );
*
* var v = nbinomial.skewness;

Check warning on line 239 in lib/node_modules/@stdlib/stats/base/dists/negative-binomial/ctor/lib/main.js

View workflow job for this annotation

GitHub Actions / Lint Changed Files

Unknown word: "nbinomial"
* // returns ~0.596
*/
setReadOnlyAccessor( NegativeBinomial.prototype, 'skewness', function get() {
Expand All @@ -254,7 +254,7 @@
* @example
* var nbinomial = new NegativeBinomial( 12.0, 0.4 );
*
* var v = nbinomial.stdev;

Check warning on line 257 in lib/node_modules/@stdlib/stats/base/dists/negative-binomial/ctor/lib/main.js

View workflow job for this annotation

GitHub Actions / Lint Changed Files

Unknown word: "nbinomial"
* // returns ~6.708
*/
setReadOnlyAccessor( NegativeBinomial.prototype, 'stdev', function get() {
Expand All @@ -272,7 +272,7 @@
* @example
* var nbinomial = new NegativeBinomial( 12.0, 0.4 );
*
* var v = nbinomial.variance;

Check warning on line 275 in lib/node_modules/@stdlib/stats/base/dists/negative-binomial/ctor/lib/main.js

View workflow job for this annotation

GitHub Actions / Lint Changed Files

Unknown word: "nbinomial"
* // returns ~45.0
*/
setReadOnlyAccessor( NegativeBinomial.prototype, 'variance', function get() {
Expand Down Expand Up @@ -329,7 +329,7 @@
* var nbinomial = new NegativeBinomial( 4.0, 0.2 );
*
* var v = nbinomial.mgf( 0.1 );
* // returns ~1.66
* // returns ~8.878
*/
setReadOnly( NegativeBinomial.prototype, 'mgf', negativeBinomialMGF );

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,20 +28,20 @@ limitations under the License.

The [moment-generating function][mgf] for a [negative binomial][negative-binomial-distribution] random variable is

<!-- <equation class="equation" label="eq:negative_binomial_mgf_function" align="center" raw="M_X(t) := \mathbb{E}\!\left[e^{tX}\right] = \biggl(\frac{\left( 1- p \right) e^t }{1 - p e^t}\biggr)^{\!r} \text{ for }t<-\log p" alt="Moment-generating function (MGF) for a negative binomial distribution."> -->
<!-- <equation class="equation" label="eq:negative_binomial_mgf_function" align="center" raw="M_X(t) := \mathbb{E}\!\left[e^{tX}\right] = \biggl(\frac{p}{1 - \left( 1-p \right) e^t}\biggr)^{\!r} \text{ for }t<-\log(1-p)" alt="Moment-generating function (MGF) for a negative binomial distribution."> -->

```math
M_X(t) := \mathbb{E}\!\left[e^{tX}\right] = \biggl(\frac{\left( 1- p \right) e^t }{1 - p e^t}\biggr)^{\!r} \text{ for }t<-\log p
M_X(t) := \mathbb{E}\!\left[e^{tX}\right] = \biggl(\frac{p}{1 - \left( 1-p \right) e^t}\biggr)^{\!r} \text{ for }t<-\log(1-p)
```

<!-- <div class="equation" align="center" data-raw-text="M_X(t) := \mathbb{E}\!\left[e^{tX}\right] = \biggl(\frac{\left( 1- p \right) e^t }{1 - p e^t}\biggr)^{\!r} \text{ for }t&lt;-\log p" data-equation="eq:negative_binomial_mgf_function">
<!-- <div class="equation" align="center" data-raw-text="M_X(t) := \mathbb{E}\!\left[e^{tX}\right] = \biggl(\frac{p}{1 - \left( 1-p \right) e^t}\biggr)^{\!r} \text{ for }t&lt;-\log(1-p)" data-equation="eq:negative_binomial_mgf_function">
<img src="https://cdn.jsdelivr.net/gh/stdlib-js/stdlib@591cf9d5c3a0cd3c1ceec961e5c49d73a68374cb/lib/node_modules/@stdlib/stats/base/dists/negative-binomial/mgf/docs/img/equation_negative_binomial_mgf_function.svg" alt="Moment-generating function (MGF) for a negative binomial distribution.">
<br>
</div> -->

<!-- </equation> -->

where `r > 0` is the number of failures until the experiment is stopped and `0 <= p <= 1` is the success probability.
where `r > 0` is the number of successes until the experiment is stopped and `0 <= p <= 1` is the success probability.

</section>

Expand All @@ -63,26 +63,26 @@ Evaluates the [moment-generating function][mgf] for a [negative binomial][negati

```javascript
var y = mgf( 0.05, 20.0, 0.8 );
// returns ~267.839
// returns ~1.294

y = mgf( 0.1, 20.0, 0.1 );
// returns ~9.347
y = mgf( 0.1, 20.0, 0.9 );
// returns ~1.265
```

While `r` can be interpreted as the number of successes until the experiment is stopped, the [negative binomial][negative-binomial-distribution] distribution is also defined for non-integers `r`. In this case, `r` denotes shape parameter of the [gamma mixing distribution][negative-binomial-mixture-representation].

```javascript
var y = mgf( 0.1, 15.5, 0.5 );
// returns ~26.375
// returns ~5.598

y = mgf( 0.5, 7.4, 0.4 );
// returns ~2675.677
y = mgf( 0.5, 7.4, 0.8 );
// returns ~3.704
```

If `t >= -ln( p )`, the function returns `NaN`.
If `t >= -ln( 1-p )`, the function returns `NaN`.

```javascript
var y = mgf( 0.7, 15.5, 0.5 ); // -ln( p ) = ~0.693
var y = mgf( 0.7, 15.5, 0.5 ); // -ln( 1-p ) = ~0.693
// returns NaN
```

Expand Down Expand Up @@ -126,10 +126,10 @@ Returns a function for evaluating the [moment-generating function][mgf] of a [ne
```javascript
var myMGF = mgf.factory( 4.3, 0.4 );
var y = myMGF( 0.2 );
// returns ~4.696
// returns ~5.672

y = myMGF( 0.4 );
// returns ~30.83
// returns ~315.814
```

</section>
Expand Down Expand Up @@ -203,7 +203,7 @@ Evaluates the [moment-generating function][mgf] for a [negative binomial][negati

```c
double out = stdlib_base_dists_negative_binomial_mgf( 0.05, 20.0, 0.8 );
// returns ~267.839
// returns ~1.294
```

The function accepts the following arguments:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ bench( pkg, function benchmark( b ) {
p = new Float64Array( len );
for ( i = 0; i < len; i++ ) {
p[ i ] = uniform( EPS, 1.0 );
t[ i ] = uniform( 0.0, -ln( p[ i ] ) );
t[ i ] = uniform( 0.0, -ln( 1.0 - p[ i ] ) );
r[ i ] = discreteUniform( 1, 100 );
}

Expand Down Expand Up @@ -82,7 +82,7 @@ bench( format( '%s::factory', pkg ), function benchmark( b ) {
len = 100;
t = new Float64Array( len );
for ( i = 0; i < len; i++ ) {
t[ i ] = uniform( 0.0, -ln( p ) );
t[ i ] = uniform( 0.0, -ln( 1.0 - p ) );
}

b.tic();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ bench( format( '%s::native', pkg ), opts, function benchmark( b ) {
p = new Float64Array( len );
for ( i = 0; i < len; i++ ) {
p[ i ] = uniform( EPS, 1.0 );
t[ i ] = uniform( 0.0, -ln( p[ i ] ) );
t[ i ] = uniform( 0.0, -ln( 1.0 - p[ i ] ) );
r[ i ] = discreteUniform( 1, 100 );
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,11 @@
Examples
--------
> var y = {{alias}}( 0.05, 20.0, 0.8 )
~267.839
> y = {{alias}}( 0.1, 20.0, 0.1 )
~9.347
> y = {{alias}}( 0.5, 10.0, 0.4 )
~42822.023
~1.294
> y = {{alias}}( 0.1, 20.0, 0.9 )
~1.265
> y = {{alias}}( 0.5, 10.0, 0.8 )
~5.868

> y = {{alias}}( 0.1, 0.0, 0.5 )
NaN
Expand Down Expand Up @@ -77,9 +77,9 @@
--------
> var myMGF = {{alias}}.factory( 4.3, 0.4 );
> var y = myMGF( 0.2 )
~4.696
~5.672
> y = myMGF( 0.4 )
~30.83
~315.814

See Also
--------
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,15 +45,15 @@ interface MGF {
*
* @example
* var y = mgf( 0.05, 20.0, 0.8 );
* // returns ~267.839
* // returns ~1.294
*
* @example
* var y = mgf( 0.1, 20.0, 0.1 );
* // returns ~9.347
* var y = mgf( 0.1, 20.0, 0.9 );
* // returns ~1.265
*
* @example
* var y = mgf( 0.5, 10.0, 0.4 );
* // returns ~42822.023
* var y = mgf( 0.5, 10.0, 0.8 );
* // returns ~5.868
*
* @example
* var y = mgf( 0.1, 0.0, 0.5 );
Expand Down Expand Up @@ -95,7 +95,7 @@ interface MGF {
* @example
* var myMGF = mgf.factory( 4.3, 0.4 );
* var y = myMGF( 0.2 );
* // returns ~4.696
* // returns ~5.672
*/
factory( r: number, p: number ): Unary;
}
Expand All @@ -110,20 +110,20 @@ interface MGF {
*
* @example
* var y = mgf( 0.05, 20.0, 0.8 );
* // returns ~267.839
* // returns ~1.294
*
* y = mgf( 0.1, 20.0, 0.1 );
* // returns ~9.347
* y = mgf( 0.1, 20.0, 0.9 );
* // returns ~1.265
*
* y = mgf( 0.5, 10.0, 0.4 );
* // returns ~42822.023
* y = mgf( 0.5, 10.0, 0.8 );
* // returns ~5.868
*
* var myMGF = mgf.factory( 4.3, 0.4 );
* y = myMGF( 0.2 );
* // returns ~4.696
* // returns ~5.672
*
* y = myMGF( 0.4 );
* // returns ~30.83
* // returns ~315.814
*/
declare var mgf: MGF;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@

var constantFunction = require( '@stdlib/utils/constant-function' );
var isnan = require( '@stdlib/math/base/assert/is-nan' );
var exp = require( '@stdlib/math/base/special/exp' );
var expm1 = require( '@stdlib/math/base/special/expm1' );
var pow = require( '@stdlib/math/base/special/pow' );
var ln = require( '@stdlib/math/base/special/ln' );
var log1p = require( '@stdlib/math/base/special/log1p' );


// MAIN //
Expand All @@ -39,7 +39,7 @@ var ln = require( '@stdlib/math/base/special/ln' );
* @example
* var mgf = factory( 4.3, 0.4 );
* var y = mgf( 0.2 );
* // returns ~4.696
* // returns ~5.672
*/
function factory( r, p ) {
if (
Expand All @@ -65,10 +65,10 @@ function factory( r, p ) {
* // returns <number>
*/
function mgf( t ) {
if ( isnan( t ) || t >= -ln( p ) ) {
if ( isnan( t ) || t >= -log1p( -p ) ) {
return NaN;
}
return pow( ( (1.0 - p) * exp( t ) ) / ( 1.0 - (p * exp( t )) ), r );
return pow( p / ( p - ((1.0 - p) * expm1( t )) ), r );
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,20 +27,20 @@
* var mgf = require( '@stdlib/stats/base/dists/negative-binomial/mgf' );
*
* var y = mgf( 0.05, 20.0, 0.8 );
* // returns ~267.839
* // returns ~1.294
*
* y = mgf( 0.1, 20.0, 0.1 );
* // returns ~9.347
* y = mgf( 0.1, 20.0, 0.9 );
* // returns ~1.265
*
* y = mgf( 0.5, 10.0, 0.4 );
* // returns ~42822.023
* y = mgf( 0.5, 10.0, 0.8 );
* // returns ~5.868
*
* var myMGF = mgf.factory( 4.3, 0.4 );
* y = myMGF( 0.2 );
* // returns ~4.696
* // returns ~5.672
*
* y = myMGF( 0.4 );
* // returns ~30.83
* // returns ~315.814
*/

// MODULES //
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@
// MODULES //

var isnan = require( '@stdlib/math/base/assert/is-nan' );
var exp = require( '@stdlib/math/base/special/exp' );
var expm1 = require( '@stdlib/math/base/special/expm1' );
var pow = require( '@stdlib/math/base/special/pow' );
var ln = require( '@stdlib/math/base/special/ln' );
var log1p = require( '@stdlib/math/base/special/log1p' );


// MAIN //
Expand All @@ -38,15 +38,15 @@ var ln = require( '@stdlib/math/base/special/ln' );
*
* @example
* var y = mgf( 0.05, 20.0, 0.8 );
* // returns ~267.839
* // returns ~1.294
*
* @example
* var y = mgf( 0.1, 20.0, 0.1 );
* // returns ~9.347
* var y = mgf( 0.1, 20.0, 0.9 );
* // returns ~1.265
*
* @example
* var y = mgf( 0.5, 10.0, 0.4 );
* // returns ~42822.023
* var y = mgf( 0.5, 10.0, 0.8 );
* // returns ~5.868
*
* @example
* var y = mgf( 0.1, 0.0, 0.5 );
Expand Down Expand Up @@ -84,11 +84,11 @@ function mgf( t, r, p ) {
r <= 0.0 ||
p < 0.0 ||
p > 1.0 ||
t >= -ln( p )
t >= -log1p( -p )
) {
return NaN;
}
return pow( ( (1.0 - p) * exp( t ) ) / ( 1.0 - (p * exp( t )) ), r );
return pow( p / ( p - ((1.0 - p) * expm1( t )) ), r );
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,15 +36,15 @@ var addon = require( './../src/addon.node' );
*
* @example
* var y = mgf( 0.05, 20.0, 0.8 );
* // returns ~267.839
* // returns ~1.294
*
* @example
* var y = mgf( 0.1, 20.0, 0.1 );
* // returns ~9.347
* var y = mgf( 0.1, 20.0, 0.9 );
* // returns ~1.265
*
* @example
* var y = mgf( 0.5, 10.0, 0.4 );
* // returns ~42822.023
* var y = mgf( 0.5, 10.0, 0.8 );
* // returns ~5.868
*
* @example
* var y = mgf( 0.1, 0.0, 0.5 );
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,9 @@
"dependencies": [
"@stdlib/math/base/napi/ternary",
"@stdlib/math/base/assert/is-nan",
"@stdlib/math/base/special/exp",
"@stdlib/math/base/special/expm1",
"@stdlib/math/base/special/pow",
"@stdlib/math/base/special/ln"
"@stdlib/math/base/special/log1p"
]
},
{
Expand All @@ -58,9 +58,9 @@
"libpath": [],
"dependencies": [
"@stdlib/math/base/assert/is-nan",
"@stdlib/math/base/special/exp",
"@stdlib/math/base/special/expm1",
"@stdlib/math/base/special/pow",
"@stdlib/math/base/special/ln"
"@stdlib/math/base/special/log1p"
]
},
{
Expand All @@ -76,9 +76,9 @@
"libpath": [],
"dependencies": [
"@stdlib/math/base/assert/is-nan",
"@stdlib/math/base/special/exp",
"@stdlib/math/base/special/expm1",
"@stdlib/math/base/special/pow",
"@stdlib/math/base/special/ln"
"@stdlib/math/base/special/log1p"
]
}
]
Expand Down
Loading
Loading