New Empirical() distribution based on a random sample. This is particularly
useful when forecasts are represented by samples rather than by parametric
distributions (#98 and #120 by Reto Stauffer).
New SinhArcsinh() distribution implementing the Sinh-Arcsinh distribution
from Jones and Pewsey (2009, Biometrika)
(#128 by Reto Stauffer).
Fallback methods for all standard distributions3 methods such as cdf(),
pdf(), quantile(), random(), and moments such as mean(), variance(),
skewness(), and kurtosis(). These leverage those methods that are available
but fill the gaps using numerical integration/differentiation (#120 by Reto
Stauffer).
New generic functions score() and hessian() to compute the score (first
derivative of the log-likelihood with respect to the parameters) and Hessian
(corresponding second derivative). There are numeric fallback methods for
general distribution objects and analytic methods for a few distributions.
The hessian() methods should typically have an argument expected which
allows to select whether the observed (expected = FALSE) or expected
(expected = TRUE) Hessian should be computed. Some methods may only support
one or the other specification and throw an error message otherwise
(#124 and #128 by Reto Stauffer and Achim Zeileis).
All distribution constructor functions such as Poisson() and Binomial() now
have default arguments for all distribution parameters. Typically, these new
defaults are empty so that for example Poisson() yields a Poisson distribution
of length zero. Only those distributions which already previously had a default
such as Normal(mu = 0, sigma = 1) yield a distribution of length one (#26
and #129 by Reto Stauffer).
Methods for crps() function from the
scoringRules package for
computing the (continuous) ranked probabiity score of a distribution. This is
a useful proper scoring rule as an alternative to the log-likelihood. A numerical
fallback method is provided as well (#88 and #120 by Reto Stauffer and Achim Zeileis).
Streamline the apply_dpqr() workhorse function to avoid unnecessary computations
more carefully (#123 and #125 by Achim Zeileis).
Reduce the hard dependencies: ggplot2 is now a "Suggests" dependency and the
usage of glue is replaced by base R function sprintf() (#126 and #125 by
Achim Zeileis).
Avoid using rlang::check_dots_used() multiple times when calling a single method.
For generic functions from distributions3, such as cdf() and variance() etc.,
the call to rlang::check_dots_used() is directly in the generic. For generic
functions defined elsewhere, namely quantile() and mean() from base R and
crps() from scoringRules, all methods call rlang::check_dots_used() themselves
(#127 by Reto Stauffer).
Achim Zeileis (@zeileis) takes over maintenance from Alex Hayes (@alexpghayes). All URLs, links, and documentation updated correspondingly.
Fix incorrect moment calculations and documentation (reported by @vincenzocoia in #114, fixed by @zeileis in #115)
ggplot2 (#111)PoissonBinomial() distribution, a generalization of the binomial distribution. The Poisson
binomial is characterized by n independent Bernoulli trials but with potentially different
success probabilities. The d/p/q/r functions employ the efficient implementation from
the PoissonBinomial package, if available.
In case it is not available, fallback computation based on a normal approximation are provided - with
a warning, by default (#100).prodist() methods for various count regression objects now distinguish between computations
for the classic pscl package and the newer
countreg package (currently on Codeberg, soon
to be released to CRAN).simulate() method for distribution objects is now better aligned with simulate.lm()
in base R: It now always returns a data.frame with seed attribute.simulate() default method which leverages prodist() and subsequently uses the
simulate() method for distribution objects.prodist() methods for distribution objects which just returns the unmodified
distribution object itself.format() method - and hence the print() method - for distribution objects has been
simplified. For example, now Normal(mu = 0, sigma = 1) is used instead of
Normal distribution (mu = 0, sigma = 1) in order to yield a more compact output, especially
for vectors of distributions (#101).as.character() method which essentially calls format(..., digits = 15, drop0trailing = TRUE).
This mimics the behavior and precision of base R for real vectors. Note that this enables
using match() for distribution objects.duplicated() method which relies on the corresponding method for the data.frame
of parameters in a distribution.distribution vectors as columns in tibble data objects, see
?vec_proxy.distribution for further details and a practical example.HurdlePoisson() and HurdleNegativeBinomial() (by @dkwhu in #94 and #96).prodist() method for glm objects can now also handle family specifications from
MASS::negative.binomial(theta) with fixed theta (reported by Christian Kleiber).ellipsis dependency by rlang as the former will be
deprecated/archived
(by @olivroy in #105).is_discrete() and is_continous() with methods for all distribution objects
in the package. The is_discrete() methods return TRUE for every distribution that is discrete
on the entire support and FALSE otherwise. Analogously, is_continuous() returns TRUE for
every distribution that is continuous on the entire support and FALSE otherwise. Thus, for
mixed discrete-continuous distributions both methods should yield FALSE (#90).elementwise = NULL in apply_dpqr() and hence inherited in
cdf(), pdf(), log_pdf(), and quantile(). It provides type-safety when
applying one of the functions to a vector of distributions d to a numeric
argument x where both d and x are of length n > 1. By setting elementwise = TRUE
the function is applied element-by-element, also yielding a vector of length n.
By setting elementwise = FALSE the function is applied for all combinations
yielding an n-by-n matrix. The default elementwise = NULL corresponds to FALSE
if d and x are of different lengths and TRUE if the are of the same length
n > 1 (#87).d/p/q/r functions for hnbinom, zinbinom, ztnbinom, and ztpois similar
to the corresponding nbinom and pois functions from base R.HurdleNegativeBinomial(), ZINegativeBinomial(), ZTNegativeBinomial(), and
ZTPoisson() distribution constructors along with the corresponding S3 methods for the
"usual" generics (except skewness() and kurtosis()).prodist() methods for extracting the fitted/predicted probability distributions from
models estimated by hurdle(), zeroinfl(), and zerotrunc() objects from either the
pscl package or the countreg package.prodist(..., sigma = "ML") to the lm method for extracting the
fitted/predicted probability distribution from a linear regression model. In the previous
version the prodist() method always used the least-squares estimate of the error variance
(= residual sum of squares divided by the residual degrees of freedom, n - k), as also
reported by the summary() method. Now the default is to use the maximum-likelihood estimate
instead (divided by the number of observations, n) which is consistent with the logLik()
method. The previous behavior can be obtained by specifying sigma = "OLS" (#91).lm method the glm method prodist(..., dispersion = NULL) now, by
default, uses the dispersion estimate that matches the logLik() output. This is based
on the deviance divided by the number of observations, n. Alternatively,
dispersion = "Chisquared" uses the estimate employed in the summary() method,
based on the Chi-squared statistic divided by the residual degrees of freedom, n - k.support() method
for GEV-based distributions (GEV(), GP(), Gumbel(), Frechet()). Added a
random() method for the Tukey() distribution (using the inversion method).apply_dpqr() helps to apply the standard d/p/q/r functions
available in base R and many packages. The accompanying manual page provides some
worked examples and further guidance.distributions3 to go from basic probability
theory to probabilistic regression models. Illustrated with Poisson GLMs for the
number of goals per team in the 2018 FIFA World Cup explained by the teams' ability
differences. (#74)prodist() to extract fitted (in-sample) or predicted (out-of-sample)
probability distributions from model objects like lm, glm, or arima. (#83)distributions3 for CRANNEWS.md file to track changes to the package.