distr – Object Orientated Implementation of Distributions
Description
distr provides a conceptual treatment of distributions by means of S4
classes. A mother class Distribution
is introduced with slots for a
parameter and —most important— for the four constitutive methods r
,
d
, p
, and q
for simulation respectively for evaluation of
density / c.d.f.\ and quantile function of the corresponding distribution.
Most distributions of package stats (like normal, Poisson, etc.)
are implemented as subclasses of either AbscontDistribution
or
DiscreteDistribution
, which themselves are again subclasses of
Distribution
.
Up to arguments referring to a parameter of the distribution (like
mean
for the normal distribution), these function slots have the
same arguments as those of package stats, i.e.; for a distribution object
X
we may call these functions as

r(X)(n)

d(X)(x, log = FALSE)

p(X)(q, lower.tail = TRUE, log.p = FALSE)

q(X)(p, lower.tail = TRUE, log.p = FALSE)
For the arguments of these function slots see e.g. rnorm
.
Note that, as usual, slots d
, p
, and q
are vectorized
in their first argument, but are not on the subsequent ones.
Arithmetics and unary mathematical transformations for distributions are
available: For Distribution
objects X
and Y
expressions
like 3*X+sin(exp(Y/4+3))
have their natural interpretation as
corresponding image distributions.
Details
Package:  distr 
Version:  2.6 
Date:  20160423 
Depends:  R(>= 2.14.0), methods, graphics, startupmsg, sfsmisc, SweaveListingUtils 
Suggests:  distrEx, svUnit (>= 0.711) 
Imports:  stats, grDevices, utils, MASS 
LazyLoad:  yes 
License:  LGPL3 
URL:  http://distr.rforge.rproject.org/ 
SVNRevision:  1088 
Classes
Distribution classes have a slot param
the class of which
is is specialized for the particualar distributions. The parameter
classes for the particular distributions have slots with names
according to the corresponding [rdpq]<name> functions of
package base.
From version 1.9 on, AbscontDistribution
and descendants have
a slot gaps
for gaps in the support.
DiscreteDistribution
and descendants have
an additional slot support
, which is again specialized
to be a lattice for class LatticeDistribution
.
For saved objects from earlier versions, we provide the methods
isOldVersion
, and conv2NewVersion
to check whether the object was generated by an older version of
this package and to convert such an object to the new format,
respectively. This applies to objects of subclasses of
AbscontDistribution
lacking a gap
slot as well as to
to objects of subclasses of LatticeDistribution
lacking a
lattice
slot.
To enhance accuracy, from version 1.9 on, we also provide
subclasses AffLinAbscontDistribution
, AffLinDiscreteDistribution
,
and AffLinLatticeDistribution
, as well as the class union
AffLinDistribution
, so that in particular functionals like E
from package distrEx can recur to exact formula more frequently:
These classes have additional slots a
, b
, and X0
to
reflect the fact, that a distribution object of theses classes has the
same distribution as a*X0+b
.
For all particular distributions, as well as for classes
AbscontDistribution
, DiscreteDistribution
,
LatticeDistribution
, UnivarDistrList
and DistrList
generating functions are provided, e.g. X < Norm(mean = 3, sd = 2)
.
The same goes for the space classes.
All slots should be inspected / modified by means of corresponding
accessor /replacement functions; e.g. mean(X) < 3
Again to enhance accuracy, from version 2.0 on, we also provide
subclasses UnivarMixingDistribution
to support mixing distributions,
UnivarLebDecDistribution
, to support Lebesgue decomposed distributions
(with a discrete and an a.c. part) as well as AffLinUnivarLebDecDistribution
,
for corresponding affine linear transformations.
Class UnivarLebDecDistribution
is closed under arithmetical operations
+ /
, *
, ^
for pairs of independent variables
+ +
, 
for pairs of independent variables
+ affine linear transformations
+ truncation, huberization, min/max
which are all now available analytically.
(see Parameter classes).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126  [*]: there is a generating function with the same name
##########################
Distribution classes
##########################
slots: [<name>(<class>)]
img(rSpace), param(OptionalParameter),
r(function), d(OptionalFunction), p(OptionalFunction), q(OptionalFunction),
.withSim(logical), .withArith(logical), .logExact(logical), .lowerExact(logical),
Symmetry(DistributionSymmetry)
"Distribution"
>"UnivariateDistribution"
>>"UnivarMixingDistribution" [*]
>>>"UnivarLebDecDistribution" [*]
>>>>"AffLinUnivarLebDecDistribution"
>>>"CompoundDistribution" [*]
>>"AbscontDistribution" [*]
>>>"AffLinAbscontDistribution"
>>>"Arcsine" [*]
>>>"Beta" [*]
>>>"Cauchy" [*]
>>>"ExpOrGammaOrChisq" (VIRTUAL)
>>>>"Exp" [*]
>>>>"Gammad" [*]
>>>>"Chisq" [*]
>>>"Fd" [*]
>>>"Lnorm" [*]
>>>"Logis" [*]
>>>"Norm" [*]
>>>"Td" [*]
>>>"Unif" [*]
>>>"Weibull" [*]
>>"DiscreteDistribution" [*]
>>>"AffLinDiscreteDistribution"
>>>"LatticeDistribution" [*]
>>>>"AffLinLatticeDistribution"
>>>>"Binom" [*]
>>>>"Dirac" [*]
>>>>"Hyper" [*]
>>>>"NBinom" [*]
>>>>>"Geom" [*]
>>>>"Pois" [*]
"AffLinDistribution" = union ( "AffLinAbscontDistribution",
"AffLinDiscreteDistribution",
"AffLinUnivarLebDecDistribution" )
"DistrList"
>"UnivarDistrList" [*]
"AcDcLc" = union ( "AbscontDistribution",
"DiscreteDistribution",
"UnivarLebDecDistribution" )
##########################
Parameter classes
##########################
"OptionalParameter"
>"Parameter"
>>"BetaParameter"
>>"BinomParameter"
>>"CauchyParameter"
>>"ChisqParameter"
>>"DiracParameter"
>>"ExpParameter"
>>"FParameter"
>>"GammaParameter"
>>"GeomParameter"
>>"HyperParameter"
>>"LnormParameter"
>>"LogisParameter"
>>"NbinomParameter"
>>"NormParameter"
>>"UniNormParameter"
>>>"PoisParameter"
>>"TParameter"
>>"UnifParameter"
>>"WeibullParameter"
##########################
Space classes
##########################
"rSpace"
>"EuclideanSpace"
>>"Reals"
>"Lattice"
>"Naturals"
##########################
Symmetry classes
##########################
slots:
type(character), SymmCenter(ANY)
"Symmetry"
>"NoSymmetry" [*]
>"EllipticalSymmetry" [*]
>>"SphericalSymmetry" [*]
>"DistributionSymmetry"
>"FunctionSymmetry"
>>"NonSymmetric" [*]
>>"EvenSymmetric" [*]
>>"OddSymmetric" [*]
list thereof
"DistrSymmList" [*]
"FunSymmList" [*]
##########################
Matrix classes
##########################
slots:
none
"PosSemDefSymmMatrix" [*] is subclass of class "matrix" of package "base".
>"PosDefSymmMatrix" [*]
##########################
Class unions
##########################
"OptionalNumeric" = union("numeric", "NULL")
"OptionalMatrix" = union("matrix","NULL")

Methods
The group Math
of unary (see Math) as well as
convolution are made available for distributions, see operatorsmethods;
in particular for convolution powers, we have method convpow.
Besides, there are plot
and print
methods for distributions.
For the space classes, we have liesIn
, for the
DicreteDistribution
class, we have liesInSupport
, as well
as a generating function.
The "history" of distributions
obtained by chaining operations may be shortened using simplifyr
.
Functions
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18  RtoDPQ Default procedure to fill slots d,p,q given r
for a.c. distributions
RtoDPQ.d Default procedure to fill slots d,p,q given r
for discrete distributions
RtoDPQ.LC Default procedure to fill slots d,p,q given r
for Lebesgue decomposed distributions
decomposePM decomposes a distribution into positive and negative
part and, if discrete, into part '0'
simplifyD tries to reduce/simplify mixing distribution using
that certain weights are 0
flat.LCD makes a single UnivarLebDecDistribution out of
a list of UnivarLebDecDistribution with corresp. weights
flat.mix makes a single UnivarLebDecDistribution out of
a list of a UnivarMixingDistribution
distroptions Functions to change the global variables of the
package 'distr'
standardMethods Utility to automatically generate accessor and
replacement functions

Extension Packages in distrXXX family
Please note that there are extension packages of this packages available on CRAN,
 distrDoc
a documentation package providing joint documentation for all packages of the distrXXX family of packages in the form of vignette 'distr'; try
require(distrDoc); vignette("distr")
. distrEx
provides functionals (like
E
,sd
,mad
) operating on distributions, as well as distances between distributions and basic support for multivariate and conditional distributions. distrSim
for the standardized treatment of simulations, also under contaminations.
 distrTEst
with classes and methods for evaluations of statistical procedures on simulations generated by distrSim.
 distrTeach
embodies illustrations for basic stats courses using our distribution classes.
 distrMod
provides classes for parametric models and hence covers, in an object orientated way, estimation in statistical models.
 distrEllipse
provides classes for elliptically symmetric distributions.
Package versions
Note: The first two numbers of package versions do not necessarily reflect packageindividual development, but rather are chosen for the distrXXX family as a whole in order to ease updating "depends" information.
Acknowledgement
We thank Martin Maechler, Josef Leydold, John Chambers, Duncan Murdoch, Gregory Warnes, Paul Gilbert, Kurt Hornik, Uwe Ligges, Torsten Hothorn, and Seth Falcon for their help in preparing this package.
StartupBanner
You may suppress the startup banner/message completely by setting
options("StartupBanner"="off")
somewhere before loading this
package by library
or require
in your Rcode / Rsession.
If option "StartupBanner"
is not defined (default) or setting
options("StartupBanner"=NULL)
or
options("StartupBanner"="complete")
the complete startup banner is
displayed.
For any other value of option "StartupBanner"
(i.e., not in c(NULL,"off","complete")
)
only the version information is displayed.
The same can be achieved by wrapping the library
or require
call into either suppressStartupMessages()
or
onlytypeStartupMessages(.,atypes="version")
.
As for general packageStartupMessage
's, you may also suppress all
the startup banner by wrapping the library
or require
call into suppressPackageStartupMessages()
from
startupmsgversion 0.5 on.
Demos
Demos are available — see demo(package="distr")
Note
Arithmetics on distribution objects are understood as operations on
corresponding (independent) r.v.'s and not on distribution functions
or densities.
See also distrARITH()
.
Some functions of package stats have intentionally been masked,
but completely retain their functionality — see distrMASK()
.
Accuracy of these arithmetics is controlled by global options which may
be inspected / set by distroptions()
and getdistrOption()
,
confer distroptions .
Author(s)
Peter Ruckdeschel peter.ruckdeschel@unioldenburg.de,
Thomas Stabla statho3@web.de,
Florian Camphausen fcampi@gmx.de,
Matthias Kohl Matthias.Kohl@stamats.de
Maintainer: Peter Ruckdeschel peter.ruckdeschel@unioldenburg.de
References
P. Ruckdeschel, M. Kohl, T. Stabla, F. Camphausen (2006): S4 Classes for Distributions, R News, 6(2), 26. http://CRAN.Rproject.org/doc/Rnews/Rnews_20062.pdf
P. Ruckdeschel and M. Kohl (2014): General purpose convolution algorithm for distributions in S4Classes by means of FFT. J. Statist. Softw. 59(4): 125.
a vignette for packages distr, distrSim, distrTEst, and
distrEx is included into the mere documentation package distrDoc
and may be called by
require("distrDoc");vignette("distr")
a homepage to this package is available under
http://distr.rforge.rproject.org/
Examples
1 2 3 4 5 6 