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.