1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209
|
---
title: "Usage with Rcpp"
output: rmarkdown::html_vignette
vignette: >
%\VignetteIndexEntry{Usage with Rcpp}
%\VignetteEngine{knitr::rmarkdown}
%\VignetteEncoding{UTF-8}
---
```{r, include = FALSE}
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);
```
## Making the functions usable
There are only a few simple steps to follow:
1. Add the `Rcpp` and `PoissonBinomial` packages to the `Imports` and `LinkingTo` fields of the `DESCRIPTION` file.
2. Add `#include <PoissonBinomial.h>` to source (`.cpp`) and/or header (`.h`, `.hpp`) files in which these functions are to be used.
3. Optional: Add `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`
## Important Remarks
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
* the observations in the `obs` vectors are valid,
* the probabilities in the `probs` vector are in $(0, 1)$ and
* for `dpb_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".
|