Pengambilan sampel CDF terbalik untuk distribusi campuran

9

Versi singkat di luar konteks

Mari menjadi variabel acak dengan CDF F ( ) { θ  y = 0  θ + ( 1 - θ ) × CDF log-normal ( ; μ , σ )  y> 0y

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

Katakanlah saya ingin mensimulasikan gambar menggunakan metode CDF terbalik. Apakah itu mungkin? Fungsi ini sebenarnya tidak memiliki invers. Kemudian lagi ada sampling transformasi terbalik untuk distribusi campuran dari dua distribusi normal yang menunjukkan bahwa ada cara yang dikenal untuk menerapkan sampling transformasi terbalik di sini.y

Saya mengetahui metode dua langkah, tetapi saya tidak tahu bagaimana menerapkannya pada situasi saya (lihat di bawah).


Versi panjang dengan latar belakang

Saya memasang model berikut untuk respons bernilai vektor, , menggunakan MCMC (khusus, Stan):yi=(y1,,yK)i

θkilogit1(αkxi),μkiβkxiσk22F(){θ y = 0 θ+(1θ)×CDFlog-normal(;μ,σ) y > 0ukF(yk),zkΦ1(uk)zN(0,R)×kf(yk)(α,β,σ,R)priors

di mana mengindeks pengamatan , adalah matriks korelasi, dan adalah vektor prediktor / regresi / fitur.N R xiNRx

Yaitu, model saya adalah model regresi di mana distribusi kondisional dari respons diasumsikan sebagai kopula Gaussian dengan marginal log-normal yang digelembungkan dengan nol. Saya telah memposting tentang model ini sebelumnya; ternyata Song, Li, dan Yuan (2009, gated ) telah mengembangkannya dan mereka menyebutnya vektor GLM, atau VGLM. Berikut ini adalah spesifikasi mereka yang sedekat mungkin dengan kata demi kata: SayaF K G m z q R Γ

f(y;μ,φ,Γ)=c{G1(y1),,Gm(ym)|Γ}i=1mg(yi;μi,φi)c(u|Γ)=|Γ|1/2exp(12qT(ImΓ1)q)q=(q1,,qm)T,qi=Φ1(ui)
FKsesuai dengan mereka , saya sesuai dengan , dan saya sesuai dengan ; detailnya ada di halaman 62 (halaman 3 file PDF) tetapi mereka identik dengan apa yang saya tulis di sini.GmzqRΓ

Bagian zero-inflated secara kasar mengikuti spesifikasi Liu dan Chan (2010, ungated ).

Sekarang saya ingin mensimulasikan data dari parameter yang diestimasi, tapi saya agak bingung bagaimana cara melakukannya. Pertama saya pikir saya hanya bisa mensimulasikan secara langsung (dalam kode R):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])
    }
}

yang tidak menggunakan sama sekali. Saya ingin mencoba menggunakan matriks korelasi yang saya perkirakan.R

Ide saya berikutnya adalah mengambil gambar dan kemudian mengubahnya kembali menjadi . Ini juga tampaknya bertepatan dengan jawaban dalam Menghasilkan sampel dari Copula dalam sampel R dan Bivariat untuk distribusi yang dinyatakan dalam teorema kopula Sklar? . Tapi apa sih sini? Pengambilan sampel transformasi terbalik untuk distribusi campuran dua distribusi normal membuatnya terdengar seperti ini mungkin, tapi saya tidak tahu bagaimana melakukannya.y F - 1zyF1

shadowtalker
sumber
@ Xi'an itu Gopulsian copula, untuk memperkirakan ketergantungan di antara komponen . y
shadowtalker
1
Thread yang Anda referensi tentang pengambilan sampel dari campuran Normal berlaku langsung ke masalah Anda tanpa modifikasi penting: alih-alih menggunakan CDF terbalik Normals, gunakan CDF terbalik dari dua komponen Anda. CDF terbalik atom pada adalah fungsi konstan, selalu sama dengan . 0y=00
Whuber
@whuber Saya hanya bingung tentang cara menggunakan CDF terbalik dari dua komponen: apa yang saya gambar, dari mana saya menggambar, dan kemudian apa yang saya masukkan ke setiap benda?
shadowtalker
1
@ Xi'an dengan baik menjelaskan bahwa dalam jawabannya untuk pertanyaan campuran-normal: Anda menggunakan variasi seragam untuk memilih komponen campuran dan kemudian Anda menarik nilai dari komponen itu (dengan cara apa pun yang Anda suka). Dalam kasus Anda, sangat mudah untuk menggambar nilai dari komponen pertama: selalu ! Untuk menggambar nilai dari komponen kedua gunakan sembarang generator angka acak lognormal yang Anda suka. Dalam setiap kasus Anda berakhir dengan angka: tidak ada "memasukkan" untuk menyelesaikan; seluruh tujuan pembuatan bilangan acak adalah untuk memperoleh angka itu. 0
Whuber
@whuber jawaban baru menjelaskannya untuk saya. Terima kasih semuanya.
shadowtalker

Jawaban:

5

Jawaban untuk versi panjang dengan latar belakang:

Jawaban untuk versi panjang ini agak membahas masalah lain dan, karena kita tampaknya memiliki kesulitan merumuskan model dan masalahnya, saya memilih untuk mengulanginya di sini, semoga benar.

Untuk 1iI , tujuannya adalah untuk mensimulasikan vektor yi=(y1i,,yKi) sedemikian rupa sehingga, tergantung pada kovariat xi ,

yki={0 with probability logit1(αkxi)log(σkzki+βkxi) with probability 1logit1(αkxi)
denganzi=(z1i,,zKi)NK(0,R). Karenanya, jika seseorang ingin mensimulasikan data dari model ini, seseorang dapat melanjutkan sebagai berikut:

Untuk 1iI ,

  1. Hasilkan zi=(z1i,,zKi)NK(0,R)
  2. Hasilkan u1i,,uKiiidU(0,1)
  3. Turunkan yki=I{uki>logit1(αkxi)}log{σkzki+βkxi} untuk1kK

Jika seseorang tertarik pada generasi dari posterior (α,β,μ,σ,R) diberikan yki , ini adalah masalah yang lebih sulit, meskipun layak dilakukan oleh Gibbs sampling atau ABC.

Xi'an
sumber
1
Saya tahu saya kehilangan sesuatu. "Semuanya jelas di belakang." Maksud saya: Saya tertarik pada nilai , jadi ya, saya tertarik menggambar dari posterior gabungan parameter. Saya ingin simulasi y untuk melihat apakah model cocok. F(yi|xi)y
shadowtalker
1
Bagaimana masalah kedua jauh lebih sulit? Saya sudah memperkirakan model dan saya memiliki gambar posterior. Kami dapat melanjutkan obrolan jika Anda mau, agar tidak mengacaukan komentar di sini.
shadowtalker
1
Oh, secara umum, ya. Untungnya saya memiliki Stan dan No-U-Turn Sampler yang melakukan kerja keras untuk saya di sana.
shadowtalker
7

Jawaban untuk versi singkat di luar konteks:

F(u)=inf{xR; F(x)u}
XF is equivalent to X=F(U) when UU(0,1).
F(y)θy=0F(u)=0uθU(0,1)θXx=0u>θvy=exp(μ+σΦ1(v))

Ini hampir seperti apa kode R Anda

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

θki1θki

Y_hat <- rbinom(1, 1, theta[i, k])
    if (Y_hat == 0)
        Y_hat <- rlnorm(1, mu[i, k], sigma[k])
Xi'an
sumber
zuk=Φ(zk)yk=0ukθyk=Flog-normal1(uk)
0
z
y
F1,,FKG1,,Gm