SEE ALSO
PDL::Stats::Distr -- parameter estimations and probability density functions for distributions.
Parameter estimate is maximum likelihood estimate when there is closed form estimate, otherwise it is method of moments estimate.
use PDL::LiteF;
use PDL::Stats::Distr;
# do a frequency (probability) plot with fitted normal curve
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' );
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 does handle bad values.
It will set the bad-value flag of all output piddles if the flag is set for any of the input piddles.
Signature: (x(); a(); b(); float+ [o]p())
probability density function for beta distribution. x defined on [0,1].
pdf_beta does handle bad values.
It will set the bad-value flag of all output piddles if the flag is set for any of the input piddles.
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 does handle bad values.
It will set the bad-value flag of all output piddles if the flag is set for any of the input piddles.
Signature: (ushort x(); ushort n(); p(); float+ [o]out())
probability mass function for binomial distribution.
pmf_binomial does handle bad values.
It will set the bad-value flag of all output piddles if the flag is set for any of the input piddles.
Signature: (a(n); float+ [o]l())
my $lamda = $data->mle_exp;
exponential distribution. mle same as method of moments estimate.
mle_exp does handle bad values.
It will set the bad-value flag of all output piddles if the flag is set for any of the input piddles.
Signature: (x(); l(); float+ [o]p())
probability density function for exponential distribution.
pdf_exp does handle bad values.
It will set the bad-value flag of all output piddles if the flag is set for any of the input piddles.
Signature: (a(n); float+ [o]shape(); float+ [o]scale())
my ($shape, $scale) = $data->mme_gamma();
two-parameter gamma distribution
mme_gamma does handle bad values.
It will set the bad-value flag of all output piddles if the flag is set for any of the input piddles.
Signature: (x(); a(); t(); float+ [o]p())
probability density function for two-parameter gamma distribution.
pdf_gamma does handle bad values.
It will set the bad-value flag of all output piddles if the flag is set for any of the input piddles.
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 does handle bad values.
It will set the bad-value flag of all output piddles if the flag is set for any of the input piddles.
Signature: (x(); m(); v(); float+ [o]p())
probability density function for gaussian distribution.
pdf_gaussian does handle bad values.
It will set the bad-value flag of all output piddles if the flag is set for any of the input piddles.
Signature: (a(n); float+ [o]p())
geometric distribution. mle same as method of moments estimate.
mle_geo does handle bad values.
It will set the bad-value flag of all output piddles if the flag is set for any of the input piddles.
Signature: (ushort x(); p(); float+ [o]out())
probability mass function for geometric distribution. x >= 0.
pmf_geo does handle bad values.
It will set the bad-value flag of all output piddles if the flag is set for any of the input piddles.
Signature: (a(n); float+ [o]p())
shifted geometric distribution. mle same as method of moments estimate.
mle_geosh does handle bad values.
It will set the bad-value flag of all output piddles if the flag is set for any of the input piddles.
Signature: (ushort x(); p(); float+ [o]out())
probability mass function for shifted geometric distribution. x >= 1.
pmf_geosh does handle bad values.
It will set the bad-value flag of all output piddles if the flag is set for any of the input piddles.
Signature: (a(n); float+ [o]m(); float+ [o]v())
my ($m, $v) = $data->mle_lognormal();
lognormal distribution. maximum likelihood estimation.
mle_lognormal does handle bad values.
It will set the bad-value flag of all output piddles if the flag is set for any of the input piddles.
Signature: (a(n); float+ [o]m(); float+ [o]v())
my ($m, $v) = $data->mme_lognormal();
lognormal distribution. method of moments estimation.
mme_lognormal does handle bad values.
It will set the bad-value flag of all output piddles if the flag is set for any of the input piddles.
Signature: (x(); m(); v(); float+ [o]p())
probability density function for lognormal distribution. x > 0. v > 0.
pdf_lognormal does handle bad values.
It will set the bad-value flag of all output piddles if the flag is set for any of the input piddles.
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 does handle bad values.
It will set the bad-value flag of all output piddles if the flag is set for any of the input piddles.
Signature: (ushort x(); r(); p(); float+ [o]out())
probability mass function for negative binomial distribution.
pmf_nbd does handle bad values.
It will set the bad-value flag of all output piddles if the flag is set for any of the input piddles.
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 does handle bad values.
It will set the bad-value flag of all output piddles if the flag is set for any of the input piddles.
Signature: (x(); k(); xm(); float+ [o]p())
probability density function for pareto distribution. x >= xm > 0.
pdf_pareto does handle bad values.
It will set the bad-value flag of all output piddles if the flag is set for any of the input piddles.
Signature: (a(n); float+ [o]l())
my $lamda = $data->mle_poisson();
poisson distribution. pmf: f(x;l) = e^(-l) * l^x / x!
mle_poisson does handle bad values.
It will set the bad-value flag of all output piddles if the flag is set for any of the input piddles.
Signature: (x(); l(); float+ [o]p())
Probability mass function for poisson distribution. Uses Stirling's formula for x > 85.
pmf_poisson does handle bad values.
It will set the bad-value flag of all output piddles if the flag is set for any of the input piddles.
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 does handle bad values.
It will set the bad-value flag of all output piddles if the flag is set for any of the input piddles.
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.
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);
GSL - GNU Scientific Library
PDL::Graphics::PGPLOT
PDL::GSL::CDF