Each procedure’s probability mass function (PMF) and cumulative
distribution function (CDF) was implemented in C++ using the
Rcpp
package. By means of Rcpp::interface
,
these functions are exported to both the package’s R namespace
and C++ headers. That way, the following functions can then be
used by other packages that use Rcpp
:
/*** Ordinary Poisson Binomial Distribution ***/
/*** Exact Procedures ***/
// Direct Convolution (DC)
// PMF
NumericVector dpb_conv(const IntegerVector obs,
const NumericVector probs);
// CDF
NumericVector ppb_conv(const IntegerVector obs,
const NumericVector probs,
const bool lower_tail);
// Divide & Conquer FFT Tree Convolution (DC-FFT)
// PMF
NumericVector dpb_dc(const IntegerVector obs,
const NumericVector probs);
// CDF
NumericVector ppb_dc(const IntegerVector obs,
const NumericVector probs,
const bool lower_tail);
// Discrete Fourier Transformation of the Characteristic Function (DFT-CF)
// PMF
NumericVector dpb_dftcf(const IntegerVector obs,
const NumericVector probs);
// CDF
NumericVector ppb_dftcf(const IntegerVector obs, const NumericVector probs,
const bool lower_tail);
// Recursive Formula (RF)
// PMF
NumericVector dpb_rf(const IntegerVector obs,
const NumericVector probs);
// CDF
NumericVector ppb_rf(const IntegerVector obs,
const NumericVector probs,
const bool lower_tail);
/*** Approximations ***/
// Arithmetic Mean Binomial Approximation (AMBA)
// PMF
NumericVector dpb_mean(const IntegerVector obs,
const NumericVector probs);
// CDF
NumericVector ppb_mean(const IntegerVector obs,
const NumericVector probs,
const bool lower_tail);
// Geometric Mean Binomial Approximations (GMBA)
// PMF
NumericVector dpb_gmba(const IntegerVector obs,
const NumericVector const probs,
const bool anti);
// CDF
NumericVector ppb_gmba(const IntegerVector obs,
const NumericVector probs,
const bool anti,
const bool lower_tail);
// Poisson Approximation (PA)
// PMF
NumericVector dpb_pa(const IntegerVector obs,
const NumericVector probs);
// CDF
NumericVector ppb_pa(const IntegerVector obs,
const NumericVector probs,
const bool lower_tail);
// Normal Approximations (NA, RNA)
// PMF
NumericVector dpb_na(const IntegerVector obs,
const NumericVector probs,
const bool refined);
// CDF
NumericVector ppb_na(const IntegerVector obs,
const NumericVector probs,
const bool refined,
const bool lower_tail);
/*** Generalized Poisson Binomial Distribution ***/
/*** Exact Procedures ***/
// Generalized Direct Convolution (G-DC)
// PMF
NumericVector dgpb_conv(const IntegerVector obs,
const NumericVector probs,
const NumericVector val_p,
const NumericVector val_q);
// CDF
NumericVector pgpb_conv(const IntegerVector obs,
const NumericVector probs,
const NumericVector val_p,
const NumericVector val_q,
const bool lower_tail);
// Generalized Discrete Fourier Transformation of the Characteristic Function (G-DFT-CF)
// PMF
NumericVector dgpb_dftcf(const IntegerVector obs,
const NumericVector probs,
const NumericVector val_p,
const NumericVector val_q);
// CDF
NumericVector pgpb_dftcf(const IntegerVector obs,
const NumericVector probs,
const NumericVector val_p,
const NumericVector val_q,
const bool lower_tail);
/*** Approximations ***/
// Generalized Normal Approximations (G-NA, G-RNA)
// PMF
NumericVector dgpb_na(const IntegerVector obs,
const NumericVector probs,
const NumericVector val_p,
const NumericVector val_q,
const bool refined,
const bool lower_tail);
// CDF
NumericVector pgpb_na(const IntegerVector obs,
const NumericVector probs,
const NumericVector val_p,
const NumericVector val_q,
const bool refined,
const bool lower_tail);
There are only a few simple steps to follow:
Rcpp
and PoissonBinomial
packages
to the Imports
and LinkingTo
fields of the
DESCRIPTION
file.#include <PoissonBinomial.h>
to source
(.cpp
) and/or header (.h
, .hpp
)
files in which these functions are to be used.using namespace PoissonBinomial;
. Without
it, the use of functions of this package must be fully qualified with
PoissonBinomial::
,
e.g. PoissonBinomial::dpb_dc
instead of
dpb_dc
For better performance, the PMFs and CDFs do not check any of their parameters for plausibility! This must be done by the user by means of R or C/C++ functions. It must be made sure that
obs
vectors are valid,probs
vector are in \((0, 1)\) anddpb_gmba
, ppb_gmba
,
dpb_na
, ppb_na
, dgpb_na
and
pgpb_na
: the probabilities in the probs
vector
must not contain zeros or ones.Furthermore, the CDFs only compute non-logarithmic probabilities. If logarithms are needed, they must be computed “manually”.