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)

Arguments

powers

In function dirichlet() a (named) vector of powers

alpha,beta

A vector of parameters for the Dirichlet or generalized Dirichlet distribution

beta0

In function GD(), an arbitrary parameter

H

Object of class hyper2

lambda

Vector of weights in dirichlet3()

n

Number of observations

Details

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 1s [so default NULL corresponds to unit weights, that is, a hyper2 object]. A use-case is given in inst/rock_paper_scissors_monster.Rmd.

References

  • 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

Author

Robin K. S. Hankin

Note

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)

See also

Examples


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)