Implementación de Dirichlet cdf?

8

Necesito calcular el Dirichlet CDF , pero solo puedo encontrar implementaciones del PDF .

¿Saben ustedes de alguna biblioteca (preferiblemente en R) implementando?

Ricky Robinson
fuente
1
No tengo conocimiento directo de ninguno. Pero puede haber algo que se pueda hacer. ¿Qué necesitas hacer con eso?
Glen_b -Reinstate Monica el
2
Necesito tomar el complemento del CDF y considerarlo como mi valor p.
Ricky Robinson
2
Hmm Así que si necesitas1-PAGS(X1X1,X2X2,...,XkXk), de alguna manera necesitas el cdf. La idea de simulación de Zen es sin duda una forma de hacerlo (y cuanto mayor sea el número de dimensiones, mejor comienza a verse), pero si lo hace, use uno de los paquetes con implementaciones incorporadas rdirichlet. Si solo es de 3 variantes o posiblemente de 4 variantes (el último componente, por supuesto, es redundante), puede valer la pena probar la cuadratura numérica.
Glen_b -Reinstalar a Mónica el

Respuestas:

9

Recuerda eso si Yyo son independientes solunametrometrouna(unayo,si), para yo=1,...,k, entonces

(X1,...,Xk)=(Y1j=1kYj,...,Ykj=1kYj)reyoryoChlmit(una1,...,unak).

La prueba se puede encontrar en la página 594 del libro de Luc Devroye .

Por lo tanto, una posibilidad es calcular una aproximación de Monte Carlo de

FX1,...,Xk(t1,...,tk)=PAGS{X1t1,...,Xktk},
comenzando con gammas. En R, intente esto:
pdirichlet <- function(a, t) {
    N <- 10000
    rdirichlet <- function(a) { y <- rgamma(length(a), a, 1); y / sum(y) }
    x <- replicate(N, rdirichlet(a), simplify = FALSE)
    sum(sapply(x, function(x) prod(x <= t))) / N
}

No revisé el código. Úselo con cuidado. Si encuentra algún error, por favor díganos.

zen
fuente
3
Ya existe una función rdirichlet vectorizada en R, de hecho, varias de ellas (en gtools, MCMCpacky dirmultpor ejemplo).
Glen_b -Reinstalar a Mónica el
@ Zen ¿ a <- c(6, 20,2)Cómo obtener el cd de Drichelt? ¿Es t 2 por 2 matriz?
score324
Usé el código anterior, pero arroja un error.
score324
@ score324 Un vector de Dirichlet generalmente tiene cada elemento en [0 0,1] y su suma siendo 1, entonces (6 6,20,2)está fuera del soporte
Henry
2

Cualquier biblioteca? Mathematica lo tiene. Aquí está el código para un diagrama de ejemplo de un CDF Dirichlet de la documentación:

Plot3D[CDF[DirichletDistribution[{1, 3, 2}], {x, y}], {x, 0, 1}, {y, 0, 1}]
Mike Z.
fuente
1
¿Cómo obtener la expresión para CDF [DirichletDistribution [{1, 3, 2}]]?
AIB