Implementação do Dirichlet cdf?

8

Preciso calcular o CDF Dirichlet , mas só consigo encontrar implementações do PDF .

Vocês conhecem alguma biblioteca (de preferência a R) implementando-a?

Ricky Robinson
fonte
1
Não tem conhecimento direto de nenhum. Mas pode haver algo que pode ser feito. O que você precisa fazer com isso?
Glen_b -Reinstala Monica
2
Eu preciso pegar o complementar do CDF e considerá-lo como meu valor de p.
Ricky Robinson
2
Hmm. Então, sim, se você precisa de , você meio que precisa fazer o cdf. A ideia de simulação do Zen é certamente uma maneira de fazê-lo (e quanto maior o número de dimensões, melhor começa a parecer), mas se você fizer isso, use um dos pacotes com implementações internas do . Se tiver apenas 3 ou 4 variáveis ​​(o último componente, é claro, é redundante), pode valer a pena tentar a quadratura numérica. 1-P(X1x1,X2x2,...,Xkxk)rdirichlet
Glen_b

Respostas:

9

Lembre-se de que, se é independente G a m m a ( a i , b ) , para i = 1 , , k , então ( X 1 , , X k ) = ( Y 1YEuGumammuma(umaEu,b)Eu=1,,k

(X1,,Xk)=(Y1j=1kYj,,Ykj=1kYj)DEurEucheuet(uma1,,umak).

A prova pode ser encontrada na página 594 do livro de Luc Devroye .

Portanto, uma possibilidade é calcular uma aproximação de Monte Carlo de começando com gama. Em, tente o seguinte:

FX1,,Xk(t1,,tk)=P{X1t1,,Xktk},
R
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
}

Não verifiquei o código. Use-o com cuidado. Se você encontrar algum erro, informe-nos.

zen
fonte
3
Há uma função rdirichlet vetorizado em R já - na verdade vários deles (em gtools, MCMCpacke dirmultpor exemplo).
Glen_b -Reinstala Monica
@ Zen Eu tenho a <- c(6, 20,2)como obter o cdf Drichelt? é t 2 por 2 matriz?
score324
Eu usei o código acima, mas está lançando um erro.
score324
@ score324 Um vetor Dirichlet geralmente possui cada elemento em [0 0,1]1(6,20,2)
2

Alguma biblioteca? O Mathematica possui. Aqui está o código para um exemplo de plotagem de um CDF Dirichlet da documentação:

Plot3D[CDF[DirichletDistribution[{1, 3, 2}], {x, y}], {x, 0, 1}, {y, 0, 1}]
Mike Z.
fonte
1
Como obter expressão para CDF [DirichletDistribution [{1, 3, 2}]]?
AIB