The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]metanet.ch.

tweedieDistr: fast evaluation of the Tweedie distribution

R-CMD-check CRAN status Lifecycle: experimental License: MIT

tweedieDistr provides density, distribution function, quantile function, and random generation for the Tweedie distribution under the compound Poisson-Gamma parameterisation with power parameter \(p \in (1, 2)\). A distributional-compatible constructor is also provided for use in tidy modelling workflows. The Tweedie family naturally combines a point mass at zero with a continuous positive component, making it well suited to intermittent demand data and any setting where exact zeros occur alongside strictly positive observations.

Exported functions

We provide four stats-like functions:

We also provide a single constructor for a distributional object:

Installation

You can install the stable version from CRAN:

install.packages("tweedieDistr")

You can install the development version from GitHub:

# install.packages("devtools")
devtools::install_github("StefanoDamato/tweedieDistr")

Usage

Standard stats-style interface

The four dtweedie / ptweedie / qtweedie / rtweedie functions mirror the conventions of base R distribution functions and support vectorised arguments.

library(tweedieDistr)

# density at a few points
dtweedie(c(0, 1, 2, 3), mean = 1, dispersion = 2, power = 1.2)
#> [1] 0.53526143 0.18138057 0.14514878 0.07404391

# cumulative probabilities
ptweedie(c(0, 1, 2, 3), mean = 1, dispersion = 2, power = 1.2)
#> [1] 0.5352614 0.6168058 0.7952006 0.9014508

# quantiles
qtweedie(c(0.25, 0.5, 0.75, 0.9), mean = 1, dispersion = 2, power = 1.2)
#> [1] 0.000000 0.000000 1.713588 2.980538

# random samples
rtweedie(4, mean = 1, dispersion = 2, power = 1.2)
#> [1] 0.000000 1.775823 0.000000 2.885415

distributional interface

dist_tweedie() creates a fully-featured distributional object, compatible with tidy modelling frameworks such as fable.

library(tweedieDistr)

d <- dist_tweedie(mean = 1, dispersion = 2, power = 1.2)
d
#> <distribution[1]>
#> [1] Tweedie(1, 2, 1.2)

# moments
mean(d)
#> [1] 1
distributional::variance(d)
#> [1] 2
distributional::skewness(d)
#> [1] 1.697056
distributional::kurtosis(d)
#> [1] 3.36

# support
distributional::support(d)
#> <support_region[1]>
#> [1] [0,Inf)

# density and CDF
density(d, at = c(0, 1, 2, 3))
#> [[1]]
#> [1] 0.53526143 0.18138057 0.14514878 0.07404391
distributional::cdf(d, q = c(0, 1, 2, 3))
#> [[1]]
#> [1] 0.5352614 0.6168058 0.7952006 0.9014508

# quantiles
quantile(d, p = c(0.25, 0.5, 0.75, 0.9))
#> [[1]]
#> [1] 0.000000 0.000000 1.713588 2.980538

# random generation
distributional::generate(d, times = 4)
#> [[1]]
#> [1] 1.274467 0.000000 0.000000 0.000000

dist_tweedie() supports vectorised arguments, so a whole column of distribution objects can be constructed at once; this is crucial as it allows to use the distribution in the tidyverts forecasting pipelines, for instance.

library(tweedieDistr)

dist_tweedie(
  mean       = c(1, 2, 0.5),
  dispersion = c(2., 0.5, 1),
  power      = c(1.2, 1.8, 1.5)
)
#> <distribution[3]>
#> [1] Tweedie(1, 2, 1.2)   Tweedie(2, 0.5, 1.8) Tweedie(0.5, 1, 1.5)

Mathematical background

The Tweedie distribution \[Y \sim \mathrm{Tw}(\mu, \phi, \rho)\] with power \(p \in (1, 2)\) is a compound Poisson-Gamma variable: \(Y = \sum_{i=1}^{N} G_i\), where

\[N \sim \mathrm{Poisson}(\lambda), \qquad G_i \sim \mathrm{Gamma}(\alpha, \beta),\]

with

\[\lambda = \frac{\mu^{2-p}}{\phi(2-p)}, \quad \alpha = \frac{2-p}{p-1}, \quad \beta = \frac{1}{\phi(p-1)\mu^{p-1}}.\]

The distribution has mean \(\mu\) and variance \(\phi\mu^p\). When \(N = 0\) the sum is conventionally defined as zero, giving a point mass \(P(X = 0) = e^{-\lambda}\). The density for \(x > 0\) is evaluated via the series expansion of Dunn & Smyth (2005), implemented in C++ through Rcpp and RcppArmadillo.

Contributors

Stefano Damato
Stefano Damato

(Maintainer)
Email

Getting help

If you encounter a bug, please file a minimal reproducible example on GitHub.

References

Dunn, P. K., & Smyth, G. K. (2005). Series evaluation of Tweedie exponential dispersion model densities. Statistics and Computing, 15(4), 267–280. https://doi.org/10.1007/s11222-005-4070-y.

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.