Skip to content

Latest commit

 

History

History

hypergeometric

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Hypergeometric Random Numbers

Hypergeometric distributed pseudorandom numbers.

Usage

var hypergeometric = require( '@stdlib/random/base/hypergeometric' );

hypergeometric( N, K, n )

Returns a pseudorandom number drawn from a hypergeometric distribution with parameters N (population size), K (subpopulation size), and n (number of draws).

var r = hypergeometric( 20, 10, 7 );
// returns <number>

N, K, and n must all be nonnegative integers; otherwise, the function returns NaN.

var r = hypergeometric( 10.5, 10, 10 );
// returns NaN

r = hypergeometric( 10, 4.4, 2 );
// returns NaN

r = hypergeometric( 10, 5, -1 );
// returns NaN

r = hypergeometric( NaN, NaN, NaN );
// returns NaN

If n > N or K > N, the function returns NaN.

var r = hypergeometric( 7, 5, 12 );
// returns NaN

hypergeometric.factory( [N, K, n, ][options] )

Returns a pseudorandom number generator (PRNG) for generating pseudorandom numbers drawn from a hypergeometric distribution.

var rand = hypergeometric.factory();

var r = rand( 20, 10, 15 );
// returns <number>

If provided N, K, and n, the returned generator returns random variates from the specified distribution.

var rand = hypergeometric.factory( 20, 10, 15 );

var r = rand();
// returns <number>

r = rand();
// returns <number>

If not provided N, K, and n, the returned generator requires that all three parameters be specified at each invocation.

var rand = hypergeometric.factory();

var r = rand( 10, 7, 3 );
// returns <number>

r = rand( 104, 48, 21 );
// returns <number>

The function accepts the following options:

  • seed: pseudorandom number generator seed.

To seed a pseudorandom number generator, set the seed option.

var rand1 = hypergeometric.factory({
    'seed': 12345
});

var r1 = rand1( 10, 8, 5 );
// returns <number>

var rand2 = hypergeometric.factory( 10, 8, 5, {
    'seed': 12345
});

var r2 = rand2();
// returns <number>

var bool = ( r1 === r2 );
// returns true

hypergeometric.NAME

The generator name.

var str = hypergeometric.NAME;
// returns 'hypergeometric'

hypergeometric.PRNG

The underlying pseudorandom number generator.

var prng = hypergeometric.PRNG;
// returns <Function>

hypergeometric.seed

The value used to seed hypergeometric().

var rand;
var r;
var i;

// Generate pseudorandom values...
for ( i = 0; i < 100; i++ ) {
    r = hypergeometric( 20, 10, 15 );
}

// Generate the same pseudorandom values...
rand = hypergeometric.factory( 20, 10, 15, {
    'seed': hypergeometric.seed
});
for ( i = 0; i < 100; i++ ) {
    r = rand();
}

Examples

var hypergeometric = require( '@stdlib/random/base/hypergeometric' );

var seed;
var rand;
var i;

// Generate pseudorandom numbers...
for ( i = 0; i < 100; i++ ) {
    console.log( hypergeometric( 10, 10, 10 ) );
}

// Create a new pseudorandom number generator...
seed = 1234;
rand = hypergeometric.factory( 5, 3, 2, {
    'seed': seed
});
for ( i = 0; i < 100; i++ ) {
    console.log( rand() );
}

// Create another pseudorandom number generator using a previous seed...
rand = hypergeometric.factory( 10, 10, 10, {
    'seed': hypergeometric.seed
});
for ( i = 0; i < 100; i++ ) {
    console.log( rand() );
}

References

  • Kachitvichyanukul, Voratas., and Burce Schmeiser. 1985. "Computer generation of hypergeometric random variates." Journal of Statistical Computation and Simulation 22 (2): 127–45. doi:10.1080/00949658508810839.