---
name: "PDL::Stats::Distr"
section: "3pm"
platform: "linux"
package: "libpdl-stats-perl"
version: "0.82-3"
release: "Debian 12 (Bookworm)"
platforms: ["linux"]
url: "https://new.carta.tech/PDL::Stats::Distr"
---

# PDL::Stats::Distr(3pm)

## NAME

PDL::Stats::Distr -- parameter estimations and probability density functions for distributions.

## DESCRIPTION

Parameter estimate is maximum likelihood estimate when there is closed form estimate, otherwise it is method of moments estimate.

## SYNOPSIS

```
    use PDL::LiteF;
    use PDL::Stats::Distr;
    # do a frequency (probability) plot with fitted normal curve
    my $data = grandom(100)->abs;
    my ($xvals, $hist) = $data->hist;
      # turn frequency into probability
    $hist /= $data->nelem;
      # get maximum likelihood estimates of normal curve parameters
    my ($m, $v) = $data->mle_gaussian();
      # fitted normal curve probabilities
    my $p = $xvals->pdf_gaussian($m, $v);
    use PDL::Graphics::PGPLOT::Window;
    my $win = pgwin( Dev=>"/xs" );
    $win->bin( $hist );
    $win->hold;
    $win->line( $p, {COLOR=>2} );
    $win->close;
```

Or, play with different distributions with **plot\_distr** :)

```
    $data->plot_distr( 'gaussian', 'lognormal' );
```

## FUNCTIONS

### mme\_beta

```
  Signature: (a(n); float+ [o]alpha(); float+ [o]beta())
```

```
    my ($a, $b) = $data->mme_beta();
```

beta distribution. pdf: f(x; a,b) = 1/B(a,b) x^(a-1) (1-x)^(b-1)

mme\_beta processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.

### pdf\_beta

```
  Signature: (x(); a(); b(); float+ [o]p())
```

probability density function for beta distribution. x defined on \[0,1\].

pdf\_beta processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.

### mme\_binomial

```
  Signature: (a(n); int [o]n_(); float+ [o]p())
```

```
    my ($n, $p) = $data->mme_binomial;
```

binomial distribution. pmf: f(k; n,p) = (n k) p^k (1-p)^(n-k) for k = 0,1,2..n

mme\_binomial processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.

### pmf\_binomial

```
  Signature: (ushort x(); ushort n(); p(); float+ [o]out())
```

probability mass function for binomial distribution.

pmf\_binomial processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.

### mle\_exp

```
  Signature: (a(n); float+ [o]l())
```

```
    my $lamda = $data->mle_exp;
```

exponential distribution. mle same as method of moments estimate.

mle\_exp processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.

### pdf\_exp

```
  Signature: (x(); l(); float+ [o]p())
```

probability density function for exponential distribution.

pdf\_exp processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.

### mme\_gamma

```
  Signature: (a(n); float+ [o]shape(); float+ [o]scale())
```

```
    my ($shape, $scale) = $data->mme_gamma();
```

two-parameter gamma distribution

mme\_gamma processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.

### pdf\_gamma

```
  Signature: (x(); a(); t(); float+ [o]p())
```

probability density function for two-parameter gamma distribution.

pdf\_gamma processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.

### mle\_gaussian

```
  Signature: (a(n); float+ [o]m(); float+ [o]v())
```

```
    my ($m, $v) = $data->mle_gaussian();
```

gaussian aka normal distribution. same results as `$data`-\>average and `$data`-\>var. mle same as method of moments estimate.

mle\_gaussian processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.

### pdf\_gaussian

```
  Signature: (x(); m(); v(); float+ [o]p())
```

probability density function for gaussian distribution.

pdf\_gaussian processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.

### mle\_geo

```
  Signature: (a(n); float+ [o]p())
```

geometric distribution. mle same as method of moments estimate.

mle\_geo processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.

### pmf\_geo

```
  Signature: (ushort x(); p(); float+ [o]out())
```

probability mass function for geometric distribution. x \>= 0.

pmf\_geo processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.

### mle\_geosh

```
  Signature: (a(n); float+ [o]p())
```

shifted geometric distribution. mle same as method of moments estimate.

mle\_geosh processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.

### pmf\_geosh

```
  Signature: (ushort x(); p(); float+ [o]out())
```

probability mass function for shifted geometric distribution. x \>= 1.

pmf\_geosh processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.

### mle\_lognormal

```
  Signature: (a(n); float+ [o]m(); float+ [o]v())
```

```
    my ($m, $v) = $data->mle_lognormal();
```

lognormal distribution. maximum likelihood estimation.

mle\_lognormal processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.

### mme\_lognormal

```
  Signature: (a(n); float+ [o]m(); float+ [o]v())
```

```
    my ($m, $v) = $data->mme_lognormal();
```

lognormal distribution. method of moments estimation.

mme\_lognormal processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.

### pdf\_lognormal

```
  Signature: (x(); m(); v(); float+ [o]p())
```

probability density function for lognormal distribution. x \> 0. v \> 0.

pdf\_lognormal processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.

### mme\_nbd

```
  Signature: (a(n); float+ [o]r(); float+ [o]p())
```

```
    my ($r, $p) = $data->mme_nbd();
```

negative binomial distribution. pmf: f(x; r,p) = (x+r-1  r-1) p^r (1-p)^x for x=0,1,2...

mme\_nbd processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.

### pmf\_nbd

```
  Signature: (ushort x(); r(); p(); float+ [o]out())
```

probability mass function for negative binomial distribution.

pmf\_nbd processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.

### mme\_pareto

```
  Signature: (a(n); float+ [o]k(); float+ [o]xm())
```

```
    my ($k, $xm) = $data->mme_pareto();
```

pareto distribution. pdf: f(x; k,xm) = k xm^k / x^(k+1) for x \>= xm \> 0.

mme\_pareto processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.

### pdf\_pareto

```
  Signature: (x(); k(); xm(); float+ [o]p())
```

probability density function for pareto distribution. x \>= xm \> 0.

pdf\_pareto processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.

### mle\_poisson

```
  Signature: (a(n); float+ [o]l())
```

```
    my $lamda = $data->mle_poisson();
```

poisson distribution. pmf: f(x;l) = e^(-l) \* l^x / x!

mle\_poisson processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.

### pmf\_poisson

```
  Signature: (x(); l(); float+ [o]p())
```

Probability mass function for poisson distribution. Uses Stirling's formula for x \> 85.

pmf\_poisson processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.

### pmf\_poisson\_stirling

```
  Signature: (x(); l(); [o]p())
```

Probability mass function for poisson distribution. Uses Stirling's formula for all values of the input. See http://en.wikipedia.org/wiki/Stirling's\_approximation for more info.

pmf\_poisson\_stirling processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.

### pmf\_poisson\_factorial

```
  Signature: ushort x(); l(); float+ [o]p()
```

Probability mass function for poisson distribution. Input is limited to x \< 170 to avoid **gsl\_sf\_fact()** overflow.

### plot\_distr

Plots data distribution. When given specific distribution(s) to fit, returns % ref to sum log likelihood and parameter values under fitted distribution(s). See FUNCTIONS above for available distributions.

Default options (case insensitive):

```
    MAXBN => 20,
      # see PDL::Graphics::PGPLOT::Window for next options
    WIN   => undef,   # pgwin object. not closed here if passed
                      # allows comparing multiple distr in same plot
                      # set env before passing WIN
    DEV   => '/xs' ,  # open and close dev for plotting if no WIN
                      # defaults to '/png' in Windows
    COLOR => 1,       # color for data distr
```

Usage:

```
      # yes it threads :)
    my $data = grandom( 500, 3 )->abs;
      # ll on plot is sum across 3 data curves
    my ($ll, $pars)
      = $data->plot_distr( 'gaussian', 'lognormal', {DEV=>'/png'} );
      # pars are from normalized data (ie data / bin_size)
    print "$_\t@{$pars->{$_}}\n" for (sort keys %$pars);
    print "$_\t$ll->{$_}\n" for (sort keys %$ll);
```

## DEPENDENCIES

GSL - GNU Scientific Library

## SEE ALSO

PDL::Graphics::PGPLOT

PDL::GSL::CDF

## AUTHOR

Copyright (C) 2009 Maggie J. Xiong \<maggiexyz users.sourceforge.net\>, David Mertens

All rights reserved. There is no warranty. You are allowed to redistribute this software / documentation as described in the file COPYING in the PDL distribution.
