knitr::opts_chunk$set( collapse = TRUE, comment = "#>" )
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".
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.