Karışık dağıtım için ters CDF örneklemesi


9

Bağlam dışı kısa versiyon

, CDF ile rastgele bir değişken olsuny

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

Diyelim ki ters CDF yöntemini kullanarak çizimlerini simüle etmek istedim . Mümkün mü? Bu fonksiyonun tam tersi yoktur. Daha sonra , iki normal dağılımın karışım dağılımı için ters dönüşüm örneklemesi var, bu da burada ters dönüşüm örneklemesini uygulamanın bilinen bir yolu olduğunu gösteriyor.y

İki adımlı yöntemin farkındayım, ancak bunu durumuma nasıl uygulayacağımı bilmiyorum (aşağıya bakın).


Arka plana sahip uzun versiyon

Bir MCMC (özellikle Stan) kullanarak , vektör değerli bir yanıt için aşağıdaki modeli , :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

burada gözlemini indeksler , bir korelasyon matrisidir ve bir prediktör / regresör / özellik vektörüdür.iNRx

Yani, modelim, yanıtın koşullu dağılımının sıfır şişirilmiş log-normal marjinalleri olan bir Gauss kopula olduğu varsayıldığı bir regresyon modelidir. Bu model hakkında daha önce yayınladım; Song, Li ve Yuan'ın (2009, kapılı ) geliştirdiği ve buna bir vektör GLM veya VGLM dediği ortaya çıktı. Aşağıdakiler, alabildiğim kadar kelimesi kelimesine yakındır: My

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)
FKbunların karşılık gelir , benim onların karşılık gelir , ve benim onların için tekabül ; ayrıntılar 62. sayfada (PDF dosyasının 3. sayfası), ancak aksi takdirde burada yazdıklarımla aynı.GmzqRΓ

Sıfır şişirilmiş kısım kabaca Liu ve Chan şartnamesini izler (2010, söylenmemiş ).

Şimdi tahmin edilen parametrelerden veri simülasyonu yapmak istiyorum, ancak bunun nasıl yapılacağı konusunda biraz kafam karıştı. İlk önce sadece doğrudan simüle (R kodu) düşündüm :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])
    }
}

ki bu hiç kullanmıyor . Tahmin ettiğim korelasyon matrisini gerçekten kullanmaya çalışmak istiyorum.R

Bir sonraki fikrim çizimlerini alıp tekrar dönüştürmekti . Bu aynı zamanda , Sklar'ın kopula teoreminde ifade edilen dağılım için R ve İki Değişkenli örneklemde Kopula'dan örnek oluşturmadaki cevaplarla çakışıyor gibi görünüyor mu? . Ama buradaki ne halt ? İki normal dağılımın karışım dağılımı için ters dönüşüm örneklemesi bunu mümkün kılar, ancak nasıl yapılacağı hakkında hiçbir fikrim yok.zyF1


@ Xi'an, bileşenleri arasındaki bağımlılığı tahmin etmek için bir Gauss kopulası . y
shadowtalker

1
Normals karışımlarından örnekleme hakkında referans verdiğiniz iplik, temel bir değişiklik yapılmaksızın doğrudan sorununuz için geçerlidir: Normallerin ters CDF'lerini kullanmak yerine, iki bileşeninizin ters CDF'lerini kullanın. Atomun 0'daki ters CDF'si , her zaman eşit olan sabit işlevdir . y=00
whuber

@whuber İki bileşenin ters CDF'lerini nasıl kullanacağım konusunda kafam karıştı : ne çizerim, onu ne çizerim ve sonra her şeyi neye bağlarım?
shadowtalker

1
@ Xi'an, normal karışım sorusuna cevabında güzel bir şekilde açıklar: karışım bileşenini seçmek için düzgün bir değişken kullanırsınız ve daha sonra bu bileşenden (istediğiniz herhangi bir şekilde) bir değer çizersiniz. Sizin durumunuzda, ilk bileşenden bir değer çizmek son derece kolaydır: her zaman ! İkinci bileşenden bir değer çizmek için istediğiniz herhangi bir lognormal rasgele sayı üretecini kullanın. Her durumda bir sayı ile sarılırsınız: başaracak bir "takma" yoktur; rastgele sayı üretmenin tüm amacı bu sayıyı elde etmektir. 0
whuber

@whuber yeni cevap benim için temizledi. İkinize de teşekkürler.
shadowtalker

Yanıtlar:


5

Arka plana sahip uzun versiyonun cevabı:

Uzun sürüme verilen bu cevap bir şekilde başka bir sorunu ele alıyor ve modeli ve sorunu formüle etmekte zorlandığımız için, umarım doğru bir şekilde burada tekrar yazmayı seçiyorum.

İçin 1iI, amaç vektörleri simüle etmektir yi=(y1i,,yKi) öyle ki, bir değişkene bağlı xi,

yki={0 with probability logit1(αkxi)log(σkzki+βkxi) with probability 1logit1(αkxi)
ile zi=(z1i,,zKi)NK(0,R). Bu nedenle, eğer bu modelden veri simülasyonu yapmak istiyorsa, aşağıdaki gibi devam edilebilir:

İçin 1iI,

  1. üretmek zi=(z1i,,zKi)NK(0,R)
  2. üretmek u1i,,uKiiidU(0,1)
  3. Derive yki=I{uki>logit1(αkxi)}log{σkzki+βkxi} için 1kK

Birinin arka tarafındaki nesillerle ilgilenmesi durumunda (α,β,μ,σ,R) verilen yki, Gibbs örneklemesi veya ABC tarafından mümkün olsa da, bu daha zor bir sorundur.


1
Bir şeyleri kaçırdığımı biliyordum. "Her şey arkada açık." Amacım: değeriyle ilgileniyorumF(yi|xi), yani evet, parametrelerin ortak arka kısmından çizim yapmak istiyorum. Ben benzetmek istiyorumymodelin uyup uymadığını görmek.
shadowtalker

1
İkinci sorun nasıl daha zor? Modeli zaten tahmin ettim ve arka çekilişlerim var. İsterseniz, burada yorumları karıştırmamak için sohbete devam edebiliriz.
shadowtalker

1
Oh, genel olarak, evet. Neyse ki Stan ve No-U-Turn Sampler'ın benim için zor işleri yapıyorum.
shadowtalker

7

Bağlam dışı kısa versiyonun cevabı:

Monte Carlo ders kitaplarının çoğunda anlatıldığı gibi, matematiksel anlamda (karışık dağıtımınız gibi) ters çevrilemeyen bir cdf'yi "tersine çevirmek" mümkündür. ( Bizimki gibi , Lemma 2.4'e bakın.) Genelleştirilmiş tersi tanımlarsanız

F(u)=inf{xR; F(x)u}
sonra
XF is equivalent to X=F(U) when UU(0,1).
Bu demektir ki, ne zaman F(y) sıçramak θ en y=0, F(u)=0 için uθ. Başka bir deyişle, üniforma çizersenizU(0,1) ve daha küçük θ, senin neslin X dır-dir x=0. Başka, ne zamanu>θ, sürekli parçadan, yani davanızdaki log-normalden üretilir. Bu ikinci bir üniform rasgele nesil kullanmak anlamına gelir,v, ilk düzgün çekme ve ayardan bağımsız y=exp(μ+σΦ1(v)) log-normal bir nesil elde etmek.

Bu neredeyse R kodunuz

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

yapıyor. Olasılıkla bir Bernoulli üretiyorsunuzθki ve eğer eşitse 1, bunu bir günlük normaline dönüştürürsünüz. Olasılıkla 1'e eşit olduğu içinθkibunun yerine, sıfıra eşit olduğunda ve değiştirilen R koduyla biten bir günlük normal simülasyonuna dönüştürmeniz gerekir :

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

Yani hep birlikte, simülasyon prosedürüm şöyle olurdu: 1) çizmek z, 2) hesaplama uk=Φ(zk), sonra 3) hesapla yk=0 Eğer ukθ ve yk=Flog-normal1(uk)aksi takdirde. Doğru?
shadowtalker

Hayır, yanlış. Arasında karar vermek için ilk üniforma çizersin0ve log-normal, sonra bir log-normal için karar vermeniz durumunda ikinci bir üniforma. Cevabımın düzenlenmiş sürümüne bakın.
Xi'an

Ancak bu, zbileşen; dolayısıyla sorum. Açıklayıcı bir düzenleme yaptım ve sahte kodumdaki hatayı da giderdim.
shadowtalker

Cevabım kısa versiyon ve verdiğiniz R kodu içindir. Umarım uzun versiyon için yardımcı olur, ancak ortak model için formülünüz hala yanlıştır. Modeli tanımlamanız gerekir.yüniformaları kullanmadan ...
Xi'an

Bu model nasıl yanlış? Yeni taktımF1,,FK alıntı yaptığım makalenin sağladığı formüle ( G1,,Gmgösterimlerinde). Bu geçersiz mi?
shadowtalker
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.