Implementasi Dirichlet cdf?

8

Saya perlu menghitung CDF Dirichlet , tetapi saya hanya dapat menemukan implementasi dari PDF .

Apakah Anda tahu ada perpustakaan (terutama di R) yang mengimplementasikannya?

Ricky Robinson
sumber
1
Tidak secara langsung mengetahui adanya. Tetapi mungkin ada sesuatu yang bisa dilakukan. Apa yang perlu Anda lakukan dengannya?
Glen_b -Reinstate Monica
2
Saya perlu mengambil pelengkap CDF dan menganggapnya sebagai nilai p saya.
Ricky Robinson
2
Hmm. Jadi ya, jika Anda memerlukan , Anda perlu melakukan cdf. Ide simulasi Zen jelas merupakan cara untuk melakukannya (dan semakin tinggi jumlah dimensi, semakin baik mulai terlihat), tetapi jika Anda melakukannya, gunakan salah satu paket dengan implementasi bawaan dari . Jika hanya 3-variate atau mungkin 4-variate (komponen terakhir, tentu saja, redundan) mungkin ada baiknya mencoba numerik quadrature. 1P(X1x1,X2x2,...,Xkxk)rdirichlet
Glen_b -Reinstate Monica

Jawaban:

9

Ingat itu, jika independen , untuk , maka YiGamma(ai,b)i=1,,k

(X1,,Xk)=(Y1j=1kYj,,Ykj=1kYj)Dirichlet(a1,,ak).

Buktinya dapat ditemukan pada halaman 594 dari Luc Devroye ini buku .

Oleh karena itu, satu kemungkinan adalah untuk menghitung perkiraan Monte Carlo untuk dimulai dengan gammas. Di , coba ini:

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
}

Saya tidak memeriksa kode. Gunakan dengan hati-hati. Jika Anda menemukan bug, beri tahu kami.

Zen
sumber
3
Ada fungsi rdirichlet vektor di R sudah - pada kenyataannya beberapa dari mereka (di gtools, MCMCpackdan dirmultmisalnya).
Glen_b -Reinstate Monica
@ Zen saya punya a <- c(6, 20,2)cara untuk mendapatkan cdf Drichelt? Apakah matriks t 2 x 2?
skor 324
Saya menggunakan kode di atas, tetapi itu melemparkan kesalahan.
skor 324
@ score324 Vektor Dirichlet biasanya memiliki setiap elemen dalam dan jumlahnya adalah , jadi berada di luar dukungan[0,1]1(6,20,2)
Henry
2

Ada perpustakaan? Mathematica memilikinya. Berikut kode untuk contoh plot CDF Dirichlet dari dokumentasi:

Plot3D[CDF[DirichletDistribution[{1, 3, 2}], {x, y}], {x, 0, 1}, {y, 0, 1}]
Mike Z.
sumber
1
Bagaimana cara mendapatkan ekspresi untuk CDF [DirichletDistribution [{1, 3, 2}]]?
AIB