Inverse CDF-Abtastung für eine gemischte Verteilung

9

Die nicht kontextbezogene Kurzversion

Sei eine Zufallsvariable mit CDF y

F(){θ y = 0 θ+(1θ)×CDFlog-normal(;μ,σ) y > 0

Angenommen, ich wollte Zeichnungen von mit der inversen CDF-Methode simulieren . Ist das möglich? Diese Funktion hat nicht genau eine Umkehrung. Andererseits gibt es eine inverse Transformationsabtastung für die Mischungsverteilung von zwei Normalverteilungen, was darauf hindeutet, dass es einen bekannten Weg gibt, hier eine inverse Transformationsabtastung anzuwenden.y

Ich kenne die zweistufige Methode, weiß aber nicht, wie ich sie auf meine Situation anwenden soll (siehe unten).


Die lange Version mit Hintergrund

Ich habe das folgende Modell für eine vektorwertige Antwort angepasst, , unter Verwendung von MCMC (speziell Stan):yich=(y1,,yK.)ich

θkichlogit- -1(αkxich),μkichβkxich- -σk22F.(){θ y = 0 θ+(1- -θ)×CDFlog-normal(;;μ,σ) y> 0ukF.(yk),zkΦ- -1(uk)zN.(0,R.)×kf(yk)(α,β,σ,R.)Priors

wobei Beobachtungen indiziert , eine Korrelationsmatrix ist und ein Vektor von Prädiktoren / Regressoren / Merkmalen ist.N R xichN.R.x

Das heißt, mein Modell ist ein Regressionsmodell, bei dem angenommen wird, dass die bedingte Verteilung der Antwort eine Gaußsche Kopula mit null aufgeblasenen logarithmischen Normalrändern ist. Ich habe bereits über dieses Modell geschrieben. es stellt sich heraus, dass Song, Li und Yuan (2009, gated ) es entwickelt haben und sie nennen es einen Vektor GLM oder VGLM. Das Folgende ist ihre Spezifikation, die so wörtlich wie möglich ist: MeinF K G m z q R Γ

f(y;;μ,φ,Γ)=c{G1(y1),,Gm(ym)|Γ}i=1mg(yi;μich,φich)c(u|Γ)=|Γ|- -1/.2exp(12qT.(ichm- -Γ- -1)q)q=(q1,,qm)T.,qich=Φ- -1(uich)
F.K.entspricht ihrem , mein entspricht ihrem und mein entspricht ihrem ; Die Details finden Sie auf Seite 62 (Seite 3 der PDF-Datei), aber ansonsten sind sie identisch mit dem, was ich hier geschrieben habe.GmzqR.Γ

Der null-aufgeblasene Teil folgt in etwa der Spezifikation von Liu und Chan (2010, ungated ).

Jetzt möchte ich Daten aus den geschätzten Parametern simulieren, bin aber etwas verwirrt, wie ich vorgehen soll. Zuerst dachte ich, ich könnte einfach direkt simulieren (im R-Code):y

for (i in 1:N) {
    for (k in 1:K) {
        Y_hat <- rbinom(1, 1, 1 - theta[i, k])
        if (Y_hat == 1)
            Y_hat <- rlnorm(1, mu[i, k], sigma[k])
    }
}

was überhaupt nicht verwendet . Ich möchte versuchen, die von mir geschätzte Korrelationsmatrix tatsächlich zu verwenden.R.

Meine nächste Idee war, Zeichnungen von zu nehmen und sie dann wieder in umzuwandeln . Dies scheint auch mit den Antworten in Generieren von Stichproben aus Copula in R und bivariaten Stichproben für die Verteilung übereinzustimmen, die im Copula-Theorem von Sklar ausgedrückt sind. . Aber was zum Teufel ist mein hier? Inverse Transformations-Sampling für die Mischungsverteilung von zwei Normalverteilungen klingt so, als wäre dies möglich, aber ich habe keine Ahnung, wie es geht.y F - 1zyF.- -1

Shadowtalker
quelle
@ Xi'an ist eine Gaußsche Kopula zur Abschätzung der Abhängigkeit zwischen den Komponenten. y
Shadowtalker
1
Der Thread, auf den Sie sich bei der Probenahme aus Normalenmischungen beziehen, bezieht sich ohne wesentliche Änderung direkt auf Ihr Problem: Verwenden Sie anstelle der inversen CDFs von Normalen die inversen CDFs Ihrer beiden Komponenten. Die inverse CDF des Atoms bei ist die konstante Funktion, immer gleich . y=00
whuber
@whuber Ich bin nur verwirrt darüber, wie man die inversen CDFs der beiden Komponenten verwendet: Was zeichne ich, woraus zeichne ich es und woran stecke ich dann jedes Ding an?
Shadowtalker
1
@ Xi'an erklärt dies in seiner Antwort auf die Frage nach der normalen Mischung: Sie verwenden eine einheitliche Variable, um die Mischungskomponente auszuwählen, und ziehen dann einen Wert aus dieser Komponente (wie Sie möchten). In Ihrem Fall ist es außergewöhnlich einfach, einen Wert aus der ersten Komponente zu ziehen: Es ist immer ! Um einen Wert aus der zweiten Komponente zu ziehen, verwenden Sie einen beliebigen lognormalen Zufallszahlengenerator. In jedem Fall erhalten Sie eine Nummer: Es ist kein "Einstecken" erforderlich. Das gesamte Ziel der Zufallszahlengenerierung besteht darin, diese Zahl zu erhalten. 0
whuber
@whuber die neue Antwort hat es für mich geklärt. Danke euch beiden.
Shadowtalker

Antworten:

5

Die Antwort auf die Langfassung mit Hintergrund:

Diese Antwort auf die lange Version spricht etwas ein anderes Problem an, und da wir anscheinend Schwierigkeiten haben, das Modell und das Problem zu formulieren, entscheide ich mich, es hier hoffentlich richtig zu formulieren.

Für 1ichich , das Ziel zu simulieren Vektoren yich=(y1ich,,yK.ich) , so daß, bedingt auf einem covariate xich ,

ykich={0 mit Wahrscheinlichkeit logit- -1(αkxich)Log(σkzkich+βkxich) mit Wahrscheinlichkeit 1- -logit- -1(αkxich)
mitzich=(z1ich,,zK.ich)N.K.(0,R.). Wenn man also Daten aus diesem Modell simulieren möchte, kann man wie folgt vorgehen:

Für 1ichich ,

  1. Erzeugen Sie zich=(z1ich,,zK.ich)N.K.(0,R.)
  2. Generiere u1ich,,uK.ichiidU.(0,1)
  3. Leiten Sie ykich=ich{ukich>logit- -1(αkxich)}}Log{σkzkich+βkxich}} für1kK.

Wenn man bei der Erzeugung von posterior interessierten wird (α,β,μ,σ,R.) angesichts der yki , dies ist ein schwierigeres Problem, wenn auch möglich , durch Gibbs-Sampling oder ABC.

Xi'an
quelle
1
Ich wusste, dass mir etwas fehlte. "Im Nachhinein ist alles offensichtlich." Meine Absicht: Ich interessiere mich für den Wert von , also ja, ich bin daran interessiert, aus dem gemeinsamen hinteren Teil der Parameter zu zeichnen. Ich möchte, dass die simulierten ys sehen, ob das Modell passt. F(yi|xi)y
Shadowtalker
1
Wie ist das zweite Problem viel schwieriger? Ich habe das Modell bereits geschätzt und ich habe hintere Zeichnungen. Wir können im Chat fortfahren, wenn Sie möchten, um die Kommentare hier nicht zu überladen.
Shadowtalker
1
Oh, im Allgemeinen ja. Zum Glück erledigen Stan und der No-U-Turn-Sampler dort die harte Arbeit für mich.
Shadowtalker
7

Die Antwort auf die nicht kontextbezogene Kurzversion:

Das "Invertieren" eines PDFs, das im mathematischen Sinne nicht invertierbar ist (wie Ihre gemischte Verteilung), ist möglich, wie in den meisten Monte-Carlo-Lehrbüchern beschrieben. (Wie bei uns , siehe Lemma 2.4.) Wenn Sie die verallgemeinerte Inverse definieren dann ist X F  äquivalent zu  X = F - ( U ),  wenn  U U ( 0 , 1 )

F.- -(u)=inf{xR.;; F.(x)u}}
Dies bedeutet, dass, wenn F ( y ) bei y = 0 einen Sprung von θ hat , F - ( u ) = 0 für u θ ist . Mit anderen Worten, wenn Sie ein einheitlichen zeichnen U ( 0 , 1 ) und es endet kleiner als θ , Ihre Generation X ist x = 0 . Sonst, wenn u > θ
X.F. ist äquivalent zu X.=F.- -(U.) wann U.U.(0,1).
F.(y)θy=0F.- -(u)=0uθU.(0,1)θX.x=0u>θAm Ende generieren Sie aus dem kontinuierlichen Teil, nämlich der logarithmischen Normalität in Ihrem Fall. Dies bedeutet, dass eine zweite gleichmäßige Zufallsgenerierung unabhängig von der ersten gleichmäßigen Zeichnung verwendet wird und y = exp ( μ + σ Φ - 1 ( v ) ) eingestellt wird , um eine logarithmische Normalgenerierung zu erhalten.vy=exp(μ+σΦ- -1(v))

Dies ist fast das, was Ihr R-Code ist

Y_hat <- rbinom(1, 1, theta[i, k]) if (Y_hat == 1) Y_hat <- rlnorm(1, mu[i, k], sigma[k])

θkich1θkich

Y_hat <- rbinom(1, 1, theta[i, k])
    if (Y_hat == 0)
        Y_hat <- rlnorm(1, mu[i, k], sigma[k])
Xi'an
quelle
zuk=Φ(zk)yk=0ukθyk=F.log-normal- -1(uk)
0
z
y
F.1,,F.K.G1,,Gm