# Moment-Generating Function

Negative binomial distribution moment-generating function (MGF).

The moment-generating function for a negative binomial random variable is

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

## Usage

var mgf = require( '@stdlib/math/base/dists/negative-binomial/mgf' );


#### mgf( t, r, p )

Evaluates the moment-generating function for a negative binomial distribution with number of successes until experiment is stopped r and success probability p.

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

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


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

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

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


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

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


If provided a r which is not a positive number, the function returns NaN.

var y = mgf( 0.2, 0.0, 0.5 );
// returns NaN

y = mgf( 0.2, -2.0, 0.5 );
// returns NaN


If provided NaN as any argument, the function returns NaN.

var y = mgf( NaN, 20.0, 0.5 );
// returns NaN

y = mgf( 0.0, NaN, 0.5 );
// returns NaN

y = mgf( 0.0, 20.0, NaN );
// returns NaN


If provided a success probability p outside of [0,1], the function returns NaN.

var y = mgf( 0.2, 20, -1.0 );
// returns NaN

y = mgf( 0.2, 20, 1.5 );
// returns NaN


#### mgf.factory( r, p )

Returns a function for evaluating the moment-generating function of a negative binomial distribution with number of successes until experiment is stopped r and success probability p.

var myMGF = mgf.factory( 4.3, 0.4 );
var y = myMGF( 0.2 );
// returns ~4.696

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


## Examples

var randu = require( '@stdlib/random/base/randu' );
var round = require( '@stdlib/math/base/special/round' );
var mgf = require( '@stdlib/math/base/dists/negative-binomial/mgf' );

var p;
var r;
var t;
var y;
var i;

for ( i = 0; i < 10; i++ ) {
t = (randu() * 1.0) - 0.5;
r = randu() * 50;
p = randu();
y = mgf( t, r, p );
console.log( 't: %d, r: %d, p: %d, M_X(t;r,p): %d', t, r.toFixed( 4 ), p.toFixed( 4 ), y.toFixed( 4 ) );
}