Skip to content

Latest commit

 

History

History
260 lines (164 loc) · 6.39 KB

File metadata and controls

260 lines (164 loc) · 6.39 KB

Logarithm of Cumulative Distribution Function

Laplace distribution logarithm of cumulative distribution function.

The cumulative distribution function for a Laplace random variable is

$$F(x;\mu,b) =\tfrac{1}{2} + \tfrac{1}{2} \mathop{\mathrm{sgn}}(x-\mu) \left(1-\exp \left(-\frac{|x-\mu|}{b} \right ) \right )$$

where mu is the location parameter and b > 0 is the scale parameter.

Usage

var logcdf = require( '@stdlib/stats/base/dists/laplace/logcdf' );

logcdf( x, mu, b )

Evaluates the logarithm of the cumulative distribution function (CDF) for a Laplace distribution with parameters mu (location parameter) and b > 0 (scale parameter).

var y = logcdf( 2.0, 0.0, 1.0 );
// returns ~-0.07

y = logcdf( 5.0, 10.0, 3.0 );
// returns ~-2.36

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

var y = logcdf( NaN, 0.0, 1.0 );
// returns NaN

y = logcdf( 0.0, NaN, 1.0 );
// returns NaN

y = logcdf( 0.0, 0.0, NaN );
// returns NaN

If provided b <= 0, the function returns NaN.

var y = logcdf( 2.0, 0.0, -1.0 );
// returns NaN

y = logcdf( 2.0, 0.0, 0.0 );
// returns NaN

logcdf.factory( mu, b )

Returns a function for evaluating the logarithm of the cumulative distribution function of a Laplace distribution with parameters mu (location parameter) and b > 0 (scale parameter).

var mylogcdf = logcdf.factory( 3.0, 1.5 );

var y = mylogcdf( 1.0 );
// returns ~-2.026

y = mylogcdf( 4.0 );
// returns ~-0.297

Notes

  • In virtually all cases, using the logpdf or logcdf functions is preferable to manually computing the logarithm of the pdf or cdf, respectively, since the latter is prone to overflow and underflow.

Examples

var uniform = require( '@stdlib/random/array/uniform' );
var logEachMap = require( '@stdlib/console/log-each-map' );
var logcdf = require( '@stdlib/stats/base/dists/laplace/logcdf' );

var opts = {
    'dtype': 'float64'
};
var x = uniform( 100, 0.0, 10.0, opts );
var mu = uniform( 100, 0.0, 10.0, opts );
var b = uniform( 100, 0.0, 10.0, opts );

logEachMap( 'x: %0.4f, µ: %0.4f, b: %0.4f, ln(F(x;µ,b)): %0.4f', x, mu, b, logcdf );

C APIs

Usage

#include "stdlib/stats/base/dists/laplace/logcdf.h"

stdlib_base_dists_laplace_logcdf( x, mu, b )

Evaluates the logarithm of the cumulative distribution function (CDF) for a Laplace distribution with location parameter mu and scale parameter b at a value x.

double out = stdlib_base_dists_laplace_logcdf( 2.0, 0.0, 1.0 );
// returns ~-0.07

The function accepts the following arguments:

  • x: [in] double input value.
  • mu: [in] double location parameter.
  • b: [in] double rate parameter.
double stdlib_base_dists_laplace_logcdf( const double x, const double mu, const double b );

Examples

#include "stdlib/stats/base/dists/laplace/logcdf.h"
#include <stdlib.h>
#include <stdio.h>

static double random_uniform( const double min, const double max ) {
    double v = (double)rand() / ( (double)RAND_MAX + 1.0 );
    return min + ( v*(max-min) );
}

int main( void ) {
    double mu;
    double b;
    double x;
    double y;
    int i;

    for ( i = 0; i < 25; i++ ) {
        mu = random_uniform( -5.0, 5.0 );
        b = random_uniform( 0.0, 20.0 );
        x = random_uniform( 0.0, 20.0 );
        y = stdlib_base_dists_laplace_logcdf( x, mu, b );
        printf( "x: %lf, µ: %lf, b: %lf, ln(F(x;µ,b)): %lf\n", x, mu, b, y );
    }
}