Implementierung von Dirichlet cdf?


8

Ich muss die Dirichlet-CDF berechnen , kann aber nur Implementierungen des PDF finden .

Kennt ihr eine Bibliothek (vorzugsweise in R), die sie implementiert?


1
Nicht direkt bekannt. Aber es kann etwas geben, das getan werden kann. Was brauchst du damit zu tun?
Glen_b -Rate State Monica

2
Ich muss die Ergänzung der CDF nehmen und sie als meinen p-Wert betrachten.
Ricky Robinson

2
Hmm. Also ja, wenn Sie 1-P benötigen (X_1 \ leq x_1, X_2 \ leq x_2, ..., X_k \ leq x_k)1P(X1x1,X2x2,...,Xkxk) , brauchen Sie irgendwie das cdf. Zens Idee der Simulation ist sicherlich eine Möglichkeit, dies zu tun (und je höher die Anzahl der Dimensionen, desto besser sieht es aus), aber wenn Sie dies tun, verwenden Sie eines der Pakete mit integrierten Implementierungen von rdirichlet. Wenn es sich nur um 3-Variate oder möglicherweise 4-Variate handelt (die letzte Komponente ist natürlich redundant), kann es sich lohnen, die numerische Quadratur auszuprobieren.
Glen_b -Rate State Monica

Antworten:


9

Denken Sie daran, dass, wenn unabhängig sind , für , dann G a m m a ( a i , b ) i = 1 , , k ( X 1 , , X k ) = ( Y 1YiGamma(ai,b)i=1,,k

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

Der Beweis ist auf Seite 594 von Luc Devroyes Buch zu finden .

Daher besteht eine Möglichkeit darin, eine Monte-Carlo-Näherung von beginnend mit Gammas. In , versuchen Sie dies:

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
}

Ich habe den Code nicht überprüft. Verwenden Sie es vorsichtig. Wenn Sie Fehler finden, teilen Sie uns dies bitte mit.


3
Es gibt eine vektorisiert rdirichlet Funktion in R bereits - in der Tat einige von ihnen (in gtools, MCMCpackund dirmultzum Beispiel).
Glen_b -Rate State Monica

@Zen Ich habe a <- c(6, 20,2)wie bekomme ich das Drichelt cdf? ist t 2 mal 2 Matrix?
Score324

Ich habe den obigen Code verwendet, aber es wird ein Fehler ausgegeben.
Score324

@ score324 Ein Dirichlet-Vektor hat normalerweise jedes Element in und seine Summe ist , also liegt außerhalb der Unterstützung1 ( 6 , 20 , 2 )[0,1]1(6,20,2)
Henry

2

Irgendeine Bibliothek? Mathematica hat es. Hier ist der Code für ein Beispieldiagramm einer Dirichlet-CDF aus der Dokumentation:

Plot3D[CDF[DirichletDistribution[{1, 3, 2}], {x, y}], {x, 0, 1}, {y, 0, 1}]

1
Wie erhalte ich einen Ausdruck für CDF [DirichletDistribution [{1, 3, 2}]]?
AIB
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.