Provides density, distribution function, quantile function, and random
generation for the Tweedie distribution under the compound Poisson-Gamma
parameterisation with power parameter in (1, 2). The density is evaluated
using the series expansion of Dunn and Smyth (2005)

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.
We provide four stats-like functions:
dtweedie(): probability density function via the series expansion of
Dunn & Smyth (2005).ptweedie(): cumulative distribution function using a truncated
compound Poisson-Gamma summation.qtweedie(): quantile function via Newton-Raphson algorithm, with a
fallback to bisection.rtweedie(): random generation via the exact compound Poisson–Gamma
representation.We also provide a single constructor for a
distributional
object:
dist_tweedie(): create the vectorised object for the Tweedie
distribution. It supports the standard distributional interface:
density(), CDF(), quantile(), generate(), mean(),
variance(), distributional::skewness(),
distributional::kurtosis(), and distributional::support().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")
stats-style interfaceThe 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 interfacedist_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)
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.
![]() Stefano Damato (Maintainer) |
If you encounter a bug, please file a minimal reproducible example on GitHub.
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.