
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)
Email
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.
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.