dirichlet.Rd
The Dirichlet distribution in likelihood (for p) form, including the generalized Dirichlet distribution due to Connor and Mosimann
dirichlet(powers, alpha)
dirichlet3(powers, lambda=NULL)
GD(alpha, beta, beta0=0)
GD_wong(alpha, beta)
rdirichlet(n,H)
is.dirichlet(H)
rp_unif(n,H)
These functions are really convenience functions.
Function rdirichlet()
returns random samples drawn from a
Dirichlet distribution using the gamma distribution. If second
argument H
is a hyper2
object, it is tested [with
is.dirichlet()
] for being a Dirichlet distribution. If so,
samples from it are returned. If not, (e.g. icons
), an error
is given. If H
is not a hyper2
object, it is
interpreted as a (possibly named) vector of parameters
\(\alpha\) [not a vector of powers].
Function rp_unif()
returns uniformly distributed vectors,
effectively using H*0
; but note that this uses Dirichlet
sampling which is much faster and better than the Metropolis-Hastings
functionality documented at rp.Rd
.
Functions GD()
and GD_wong()
return a likelihood
function corresponding to the Generalized Dirichlet distribution as
presented by Connor and Mosimann, and Wong, respectively. In
GD_wong()
, alpha
and beta
must be named vectors;
the names of alpha
give the names of
\(x_1,\ldots,x_k\) and the last element of beta
gives the name of \(x_{k+1}\).
Function dirichlet3()
returns a hyper3
object with
weights lambda
. If lambda
is length less than that of
powers
, it is padded with 1
s [so default NULL
corresponds to unit weights, that is, a hyper2
object]. A
use-case is given in inst/rock_paper_scissors_monster.Rmd
.
R. J. Connor and J. E. Mosimann 1969. “Concepts of independence for proportions with a generalization of the Dirichlet distribution”. Journal of the American Statistical Association, 64:194–206
T.-T. Wong 1998. “Generalized Dirichlet distribution in Bayesian Analysis”. Applied Mathematics and Computation, 97:165–181
A dirichlet distribution can have a term with zero power. But
this poses problems for hyper2
objects as zero power brackets
are dropped.
Function dirichlet3()
is a replacement for now removed function
pair3()
.
Function rdirichlet()
commits a very mild (but necessary in the
absence of a working dismat
package) violation of disordR
discipline, as the columns of the returned matrix have the same order
as pnames(H)
x1 <- dirichlet(c(a=1,b=2,c=3))
x2 <- dirichlet(c(c=3,d=4))
x1+x2
#> log( a * (a + b + c)^-6 * b^2 * c^6 * (c + d)^-7 * d^4)
H <- dirichlet(c(a=1,b=2,c=3,d=4))
rdirichlet(10,H)
#> a b c d
#> [1,] 0.01653885 0.32962037 0.2204260 0.4334148
#> [2,] 0.34840871 0.11847266 0.3525040 0.1806146
#> [3,] 0.35844373 0.12892938 0.1223021 0.3903248
#> [4,] 0.17345705 0.14856605 0.2933627 0.3846142
#> [5,] 0.28796978 0.18610197 0.2259234 0.3000049
#> [6,] 0.08399798 0.15157662 0.1772073 0.5872181
#> [7,] 0.03631235 0.46480777 0.1904721 0.3084078
#> [8,] 0.15832040 0.03755438 0.5157921 0.2883331
#> [9,] 0.15798996 0.26411078 0.4774408 0.1004585
#> [10,] 0.10441438 0.26695332 0.2901505 0.3384818
colMeans(rdirichlet(1e4,H))
#> a b c d
#> 0.1445195 0.2118687 0.2859401 0.3576717
dirichlet3(c(fish=3,chips=2),lambda=1.8)
#> log( (chips=1)^2 * (chips=1, fish=1.8)^-5 * (fish=1.8)^3)
dirichlet3(c(x=6,y=5,z=2),1:3)
#> log( (x=1)^6 * (x=1, y=2, z=3)^-13 * (y=2)^5 * (z=3)^2)