Arithmetics and unary mathematical transformations for distributions
-
signature(e1 = "UnivariateDistribution", e2 = "missing")
unary operator; result again of class "UnivariateDistribution"
; exact
-
signature(e1 = "Norm", e2 = "missing")
unary operator; result again of "Norm"
; exact
+
signature(e1 = "UnivariateDistribution", e2 = "numeric")
result again of class "UnivariateDistribution"
; exact
+
signature(e1 = "AbscontDistribution", e2 = "numeric")
result of
class "AffLinAbscontDistribution"
; exact
+
signature(e1 = "DiscreteDistribution", e2 = "numeric")
result of
class "AffLinDiscreteDistribution"
; exact
+
signature(e1 = "LatticeDistribution", e2 = "numeric")
result of
class "AffLinLatticeDistribution"
; exact
+
signature(e1 = "UnivarLebDecDistribution", e2 = "numeric")
result of
class "AffLinUnivarLebDecDistribution"
; exact
+
signature(e1 = "CompoundDistribution", e2 = "numeric")
result of
class "AffLinUnivarLebDecDistribution"
; exact
+
signature(e1 = "AffLinAbscontDistribution", e2 = "numeric")
result again of
class "AffLinAbscontDistribution"
; exact
+
signature(e1 = "AffLinDiscreteDistribution", e2 = "numeric")
result again of
class "AffLinDiscreteDistribution"
; exact
+
signature(e1 = "AffLinLatticeDistribution", e2 = "numeric")
result again of
class "AffLinLatticeDistribution"
; exact
+
signature(e1 = "AffLinUnivarLebDecDistribution", e2 = "numeric")
result of
class "AffLinUnivarLebDecDistribution"
; exact
+
signature(e1 = "Cauchy", e2 = "numeric")
result again of class "Cauchy"
; exact
+
signature(e1 = "Dirac", e2 = "numeric")
result again of class "Dirac"
; exact
+
signature(e1 = "Norm", e2 = "numeric")
result again of class "Norm"
; exact
+
signature(e1 = "Unif", e2 = "numeric")
result again of class "Unif"
; exact
+
signature(e1 = "Logis", e2 = "numeric")
result again of class "Logis"
; exact
+
signature(e1 = "numeric", e2 = "UnivariateDistribution")
is translated to
signature(e1 = "UnivariateDistribution", e2 = "numeric")
; exact
-
signature(e1 = "UnivariateDistribution", e2= "ANY")
;exact
-
signature(e1 = "UnivariateDistribution", e2 = "numeric")
is translated to
e1 + (-e2)
; exact
-
signature(e1 = "numeric", e2 = "UnivariateDistribution")
is translated to (-e1) + e2
; exact
-
signature(e1 = "numeric", e2 = "Beta")
if ncp(e2)==0
and e1 == 1
,
an exact (central) Beta(shape1 = shape2(e2), shape2 = shape1(e2))
is returned, else
the default method is used; exact
*
signature(e1 = "UnivariateDistribution", e2 = "numeric")
result again of class "UnivariateDistribution"
; exact
*
signature(e1 = "AbscontDistribution", e2 = "numeric")
result of
class "AffLinAbscontDistribution"
; exact
*
signature(e1 = "DiscreteDistribution", e2 = "numeric")
result of
class "AffLinDiscreteDistribution"
; exact
*
signature(e1 = "LatticeDistribution", e2 = "numeric")
result of
class "AffLinLatticeDistribution"
; exact
*
signature(e1 = "UnivarLebDecDistribution", e2 = "numeric")
result of
class "AffLinUnivarLebDecDistribution"
; exact
*
signature(e1 = "CompoundDistribution", e2 = "numeric")
result of
class "AffLinUnivarLebDecDistribution"
; exact
*
signature(e1 = "AffLinAbscontDistribution", e2 = "numeric")
result again of
class "AffLinAbscontDistribution"
; exact
*
signature(e1 = "AffLinDiscreteDistribution", e2 = "numeric")
result again of
class "AffLinDiscreteDistribution"
; exact
*
signature(e1 = "AffLinLatticeDistribution", e2 = "numeric")
result again of
class "AffLinLatticeDistribution"
; exact
*
signature(e1 = "AffLinUnivarLebDecDistribution", e2 = "numeric")
result of
class "AffLinUnivarLebDecDistribution"
; exact
*
signature(e1 = "DExp", e2 = "numeric")
if abs(e2)>0
result again of class "DExp"
; exact
*
signature(e1 = "Exp", e2 = "numeric")
if e2>0
result again of class "Exp"
; exact
*
signature(e1 = "ExpOrGammaOrChisq", e2 = "numeric")
if e1
is a Gamma distribution and e2>0
result of class "Gammad"
; exact
*
signature(e1 = "Weibull", e2 = "numeric")
if e2>0
result of class "Weibull"
; exact
*
signature(e1 = "Cauchy", e2 = "numeric")
if abs(e2)>0
result again of class "Cauchy"
; exact
*
signature(e1 = "Dirac", e2 = "numeric")
result again of class "Dirac"
; exact
*
signature(e1 = "Norm", e2 = "numeric")
if abs(e2)>0
result again of class "Norm"
; exact
*
signature(e1 = "Unif", e2 = "numeric")
if abs(e2)>0
result again of class "Unif"
; exact
*
signature(e1 = "Logis", e2 = "numeric")
if e2>0
result again of class "Logis"
; exact
*
signature(e1 = "Lnorm", e2 = "numeric")
if e2>0
result again of class "Lnorm"
; exact
*
signature(e1 = "numeric", e2 = "UnivariateDistribution")
is translated to
signature(e1 = "UnivariateDistribution", e2 = "numeric")
; exact
/
signature(e1 = "UnivariateDistribution", e2 = "numeric")
is translated to e1 * (1/e2)
; exact
+
signature(e1 = "UnivariateDistribution", e2 = "UnivariateDistribution")
result again of class
"UnivariateDistribution"
; is generated by simulations
-
signature(e1 = "UnivariateDistribution", e2 = "UnivariateDistribution")
is translated to (-e1) + (-e2)
;
result again of class "UnivariateDistribution"
; is generated by simulations
-
signature(e1 = "AcDcLcDistribution", e2 = "AcDcLcDistribution")
: both operands are coerced
to class "UnivarLebDecDistribution"
and the corresponding method is used.
+
signature(e1 = "AbscontDistribution", e2 = "AbscontDistribution")
assumes e1
, e2
independent; result again of class
"AbscontDistribution"
; is generated by FFT
+
signature(e1 = "AbscontDistribution", e2 = "DiscreteDistribution")
assumes e1
, e2
independent; result again of class
"AbscontDistribution"
; is generated by FFT
+
signature(e1 = "DiscreteDistribution", e2 = "AbscontDistribution")
assumes e1
, e2
independent; result again of class
"AbscontDistribution"
; is generated by FFT
+
signature(e1 = "LatticeDistribution", e2 = "LatticeDistribution")
assumes e1
, e2
independent;
if the larger lattice-width is an integer multiple of the smaller(in abs. value) one: result again of class
"LatticeDistribution"
; is generated by D/FFT
+
signature(e1 = "DiscreteDistribution", e2 = "DiscreteDistribution")
assumes e1
, e2
independent; result again of class
"DiscreteDistribution"
; is generated by explicite convolution
+
signature(e1 = "LatticeDistribution", e2 = "DiscreteDistribution")
assumes e1
, e2
independent; result again of class
"DiscreteDistribution"
; is generated by explicite convolution
+
signature(e1 = "UnivarLebDecDistribution", e2 = "UnivarLebDecDistribution")
assumes e1
, e2
independent; result again of class
"UnivarLebDecDistribution"
; is generated by separate explicite convolution of a.c. and discrete parts of e1
and e2
and subsequent flattening with flat.LCD
; if getdistrOption("withSimplify")
is TRUE
, result is piped
through a call to simplifyD
+
signature(e1 = "AcDcLcDistribution", e2 = "AcDcLcDistribution")
: both operands are coerced
to class "UnivarLebDecDistribution"
and the corresponding method is used.
+
signature(e1 = "Binom", e2 = "Binom")
assumes e1
, e2
independent;
if prob(e1)==prob(e2)
, result again of class
"Binom"
; uses the convolution formula for binomial distributions; exact
+
signature(e1 = "Cauchy", e2 = "Cauchy")
assumes e1
, e2
independent; result again of class
"Cauchy"
; uses the convolution formula for Cauchy distributions; exact
+
signature(e1 = "Chisq", e2 = "Chisq")
assumes e1
, e2
independent; result again of class
"Chisq"
; uses the convolution formula for Chisq distributions; exact
+
signature(e1 = "Dirac", e2 = "Dirac")
result again of class "Dirac"
; exact
+
signature(e1 = "ExpOrGammaOrChisq", e2 = "ExpOrGammaOrChisq")
assumes e1
, e2
independent; if
e1
, e2
are Gamma distributions, result is of class
"Gammad"
; uses the convolution formula for Gamma distributions; exact
+
signature(e1 = "Pois", e2 = "Pois")
assumes e1
, e2
independent; result again of class
"Pois"
; uses the convolution formula for Poisson distributions; exact
+
signature(e1 = "Nbinom", e2 = "Nbinom")
assumes e1
, e2
independent; if
prob(e1)==prob(e2)
, result again of class
"Nbinom"
; uses the convolution formula for negative binomial distributions; exact
+
signature(e1 = "Norm", e2 = "Norm")
assumes e1
, e2
independent; result again of class
"Norm"
; uses the convolution formula for normal distributions; exact
+
signature(e1 = "UnivariateDistribution", e2 = "Dirac")
translated to e1 + location(e2)
;
result again of class "Dirac"
; exact
+
signature(e1 = "Dirac", e2 = "UnivariateDistribution")
translated to e2 + location(e1)
;
result again of class "Dirac"
; exact
+
signature(e1 = "Dirac", e2 = "DiscreteDistribution")
translated to e2 + location(e1)
;
result again of class "Dirac"
; exact
-
signature(e1 = "Dirac", e2 = "Dirac")
result again of class "Dirac"
; exact
*
signature(e1 = "Dirac", e2 = "Dirac")
result again of class "Dirac"
; exact
*
signature(e1 = "UnivariateDistribution", e2 = "Dirac")
translated to e1 * location(e2)
;
result again of class "Dirac"
; exact
*
signature(e1 = "Dirac", e2 = "UnivariateDistribution")
translated to e2 * location(e1)
;
result again of class "Dirac"
; exact
*
signature(e1 = "AcDcLcDistribution", e2 = "AcDcLcDistribution")
: by means of decomposePM
e1
and e2
are decomposed into positive and negative parts; of these, convolutions of the
corresponding logarithms are computed separately and finally exp
is applied to them, again separately;
the resulting mixing components are then ``flattened'' to one object of class
UnivarLebDecDistribution
by flat.LCD
which according to getdistrOption(withSimplify)
gets piped through a call to simplifyD
.
/
signature(e1 = "Dirac", e2 = "Dirac")
result again of class "Dirac"
; exact
/
signature(e1 = "numeric", e2 = "Dirac")
result again of class "Dirac"
; exact
/
signature(e1 = "numeric", e2 = "AcDcLcDistribution")
: if d.discrete(e2)(0)*discreteWeight(e2)>0
throws an error (would give division by 0 with positive probability); else by means of decomposePM
e2
is decomposed into positive and negative parts; then, similarly the result obtains as for
"*"(signature(e1 = "AcDcLcDistribution", e2 = "AcDcLcDistribution"))
by the exp-log trick
and is ``flattened'' to one object of class
UnivarLebDecDistribution
by flat.LCD
and
according to getdistrOption(withSimplify)
is piped through
a call to simplifyD
; exact..
/
signature(e1 = "AcDcLcDistribution", e2 = "AcDcLcDistribution")
: translated to e1 * (1/e2)
.
^
signature(e1 = "AcDcLcDistribution", e2 = "Integer")
: if e2=0
returns Dirac(1)
;
if e2=1
returns e1
; if e2<0
translated to (1/e1)^(-e2)
; exact.
^
signature(e1 = "AcDcLcDistribution", e2 = "numeric")
: if e2
is integer uses preceding
item; else if e1< 0
with positive probability, throughs an error; else
the result obtains similarly to
"*"(signature(e1 = "AcDcLcDistribution", e2 = "AcDcLcDistribution"))
by the exp-log trick
and is ``flattened'' to one object of class
UnivarLebDecDistribution
by flat.LCD
and
according to getdistrOption(withSimplify)
is piped through
a call to simplifyD
; exact.
^
signature(e1 = "AcDcLcDistribution", e2 = "AcDcLcDistribution")
:
if e1
is negative with positive probability,
throws an error if e2
is non-integer
with positive probability; if e1
is 0 with positive probability
throws an error if e2
is non-integer with positive probability.
if e2
is integer with probability 1 uses
DiscreteDistribution(supp=e1^(Dirac(x))
for each x
in support(e2)
,
builds up a corresponding mixing distribution; the latter is ``flattened'' to one object of class
UnivarLebDecDistribution
by flat.LCD
and
according to getdistrOption(withSimplify)
is piped through
a call to simplifyD
.
Else the result obtains similarly to "*"(signature(e1 = "AcDcLcDistribution",
e2 = "AcDcLcDistribution"))
by the exp-log trick
and is ``flattened'' to one object of class
UnivarLebDecDistribution
by flat.LCD
and
according to getdistrOption(withSimplify)
is piped through
a call to simplifyD
; exact.
^
signature(e1 = "numeric", e2 = "AcDcLcDistribution")
:
if e1
is negative, throws an error if e2
is non-integer
with positive probability; if e1
is 0 throws an error if
e2
is non-integer with positive probability.
if e2
is integer with probability 1 uses
DiscreteDistribution(supp=e1^support(e2), prob=discrete.d(supp))
else the result obtains similarly to "*"(signature(e1 = "AcDcLcDistribution",
e2 = "AcDcLcDistribution"))
by the exp-log trick
and is ``flattened'' to one object of class
UnivarLebDecDistribution
by flat.LCD
and
according to getdistrOption(withSimplify)
is piped through
a call to simplifyD
; exact.
objects of class "UnivariateDistribution"
(or subclasses) or "numeric"
Arithmetics as well as all functions from group Math
, see Math
are provided for distributions; wherever possible exact expressions are used; else
random variables are generated according to this transformation and subsequently the remaining
slots filled by RtoDPQ
, RtoDPQ.d
Ruckdeschel, P., Kohl, M.(2014): General purpose convolution algorithm for distributions in S4-Classes by means of FFT. J. Statist. Softw. 59(4): 1-25.
UnivariateDistribution-class
AbscontDistribution-class
DiscreteDistribution-class
LatticeDistribution-class
Norm-class
Binom-class
Pois-class
Dirac-class
Cauchy-class
Gammad-class
Logis-class
Lnorm-class
Exp-class
Weibull-class
Nbinom-class
N <- Norm(0,3)
P <- Pois(4)
a <- 3
N + a
N + P
N - a
a * N
a * P
N / a + sin( a * P - N)
N * P
N / N
# \donttest{
## takes a little time
N ^ P
# }
1.2 ^ N
abs(N) ^ 1.3
Run the code above in your browser using DataLab