การสุ่มตัวอย่าง CDF ผกผันสำหรับการแจกแจงแบบผสม


9

เวอร์ชันย่อที่ไม่อยู่ในบริบท

ปล่อยให้เป็นตัวแปรสุ่มด้วย CDF y

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

สมมติว่าฉันต้องการจำลองการจับด้วยวิธี inverse CDF เป็นไปได้ไหม ฟังก์ชั่นนี้ไม่ได้มีสิ่งที่ตรงกันข้าม จากนั้นอีกครั้งมีการสุ่มตัวอย่างการแปลงผกผันสำหรับการกระจายการผสมของการแจกแจงปกติสองรายการซึ่งแสดงให้เห็นว่ามีวิธีที่รู้จักในการใช้การสุ่มตัวอย่างการแปลงผกผันที่นี่y

ฉันทราบวิธีสองขั้นตอน แต่ฉันไม่ทราบวิธีนำไปใช้กับสถานการณ์ของฉัน (ดูด้านล่าง)


รุ่นยาวที่มีพื้นหลัง

ฉันติดตั้งโมเดลต่อไปนี้สำหรับการตอบสนองที่มีค่าเวกเตอร์โดยใช้ MCMC (โดยเฉพาะสแตน):yi=(y1,…,yK)i

θki≡logit−1⁡(αkxi),μki≡βkxi−σk22F(⋅)≡{θ y = 0 θ+(1−θ)×CDFlog-normal(⋅;μ,σ) y > 0uk≡F(yk),zk≡Φ−1(uk)z∼N(0,R)×∏kf(yk)(α,β,σ,R)∼priors

ที่จัดทำดัชนีการสังเกต ,คือเมทริกซ์สหสัมพันธ์, และเป็นเวกเตอร์ของตัวทำนาย / ถดถอย / คุณลักษณะiNRx

นั่นคือแบบจำลองของฉันเป็นแบบจำลองการถดถอยซึ่งการแจกแจงแบบมีเงื่อนไขของการตอบสนองนั้นเป็นโคคูล่าแบบเกาส์ซึ่งมีระยะขอบล็อกปกติแบบไม่พอง ฉันเคยโพสต์เกี่ยวกับรุ่นนี้มาก่อน ปรากฎว่า Song, Li และ Yuan (2009, gated ) ได้พัฒนามันขึ้นมาและพวกเขาเรียกมันว่า vector GLM หรือ VGLM ต่อไปนี้เป็นข้อกำหนดของพวกเขาใกล้เคียงกับคำต่อคำที่ฉันได้รับ: ของฉัน

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)
FKสอดคล้องกับ ,ของฉันสอดคล้องกับของพวกเขา, และของฉันสอดคล้องกับของพวกเขา; รายละเอียดอยู่ในหน้า 62 (หน้า 3 ของไฟล์ PDF) แต่อย่างอื่นก็เหมือนกับสิ่งที่ฉันเขียนที่นี่GmzqRΓ

ชิ้นส่วนที่ไม่เป็นศูนย์จะเกะกะตามข้อกำหนดของ Liu and Chan (2010, ungated )

ตอนนี้ฉันต้องการจำลองข้อมูลจากพารามิเตอร์ที่ประมาณไว้ แต่ฉันสับสนเล็กน้อยว่าจะทำอย่างไร แรกฉันคิดว่าฉันสามารถจำลองโดยตรง (ในรหัส 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])
    }
}

ซึ่งไม่ได้ใช้เลย ฉันต้องการลองใช้เมทริกซ์สหสัมพันธ์ที่ฉันประเมินR

ความคิดต่อไปของฉันคือการใช้ดึงของแล้วแปลงพวกเขากลับไปYสิ่งนี้ดูเหมือนว่าจะตรงกับคำตอบในการสร้างตัวอย่างจาก Copula ในการสุ่มตัวอย่างRและBivariate สำหรับการแจกแจงที่แสดงในทฤษฎีบทร่วมของ Sklar? . แต่นี่ห่าอะไรคือที่นี่? การสุ่มตัวอย่างการแปลงผกผันสำหรับการกระจายตัวของการแจกแจงปกติสองครั้งทำให้มันฟังดูเหมือนเป็นไปได้ แต่ฉันไม่รู้ว่าจะทำอย่างไรzyF−1


@ ซีอานมันเป็นตัวเชื่อมเกาส์เซียนสำหรับการประมาณการพึ่งพาระหว่างองค์ประกอบy
— shadowtalker

1
เธรดที่คุณอ้างอิงเกี่ยวกับการสุ่มตัวอย่างจากชุดผสมของ Normals จะนำไปใช้โดยตรงกับปัญหาของคุณโดยไม่มีการแก้ไขที่สำคัญ: แทนที่จะใช้ CDFs ของ Normals แทนการใช้ Inverse CDF ของคอมโพเนนต์ทั้งสองของคุณ CDF ผกผันของอะตอมที่เป็นฟังก์ชั่นอย่างต่อเนื่องเสมอเท่ากับ0y=00
— whuber

@ เมื่อไรฉันก็สับสนว่าจะใช้ Inverse CDFs ของทั้งสององค์ประกอบได้อย่างไร: ฉันจะวาดอะไรฉันจะวาดอะไรจากแล้วฉันจะเสียบแต่ละสิ่งเข้าไปยังอะไร
— shadowtalker

1
@ ซีอานอธิบายเป็นอย่างดีว่าในคำตอบของเขาสำหรับคำถามผสมแบบธรรมดา: คุณใช้ชุดรูปแบบที่หลากหลายเพื่อเลือกส่วนประกอบชุดผสมจากนั้นคุณจะดึงค่าจากองค์ประกอบนั้น (ในแบบที่คุณชอบ) ในกรณีของคุณมันเป็นเรื่องง่ายมากที่จะดึงค่าจากองค์ประกอบแรก: มันคือเสมอ! ในการดึงค่าจากองค์ประกอบที่สองให้ใช้ตัวสร้างตัวเลขแบบสุ่มที่คุณต้องการ ในแต่ละกรณีคุณมีจำนวน: ไม่มี "การเสียบ" เพื่อให้บรรลุ; วัตถุประสงค์ทั้งหมดของการสร้างหมายเลขสุ่มคือการได้รับหมายเลขนั้น 0
— whuber

@ เมื่อไรคำตอบใหม่จะลบทิ้งสำหรับฉัน ขอบคุณทั้งคู่
— shadowtalker

คำตอบ:


5

คำตอบของเวอร์ชั่นยาวที่มีพื้นหลัง:

คำตอบของรุ่นยาวนี้จะแก้ไขปัญหาอื่นและเนื่องจากเราดูเหมือนจะมีปัญหาในการกำหนดรูปแบบและปัญหาฉันเลือกที่จะใช้ถ้อยคำใหม่ที่นี่หวังว่าถูกต้อง

สำหรับเป้าหมายคือเพื่อจำลองเวกเตอร์เช่นนั้นโดยมีเงื่อนไขใน covariate , กับR) ดังนั้นหากต้องการจำลองข้อมูลจากโมเดลนี้เราสามารถดำเนินการดังนี้:1≤i≤Iyi=(y1i,…,yKi)xi

yki={0 with probability logit−1⁡(αkxi)log⁡(σkzki+βkxi) with probability 1−logit−1⁡(αkxi)
zi=(z1i,…,zKi)∼NK(0,R)

สำหรับ ,1≤i≤I

  1. สร้างzi=(z1i,…,zKi)∼NK(0,R)
  2. สร้างu1i,…,uKi∼iidU(0,1)
  3. สืบทอดมาสำหรับyki=I{uki>logit−1⁡(αkxi)}log⁡{σkzki+βkxi}1≤k≤K

ถ้าใครสนใจรุ่นหลังจากให้นี่เป็นปัญหาที่ยากกว่าแม้ว่าจะเป็นไปได้ด้วยการสุ่มตัวอย่างของกิ๊บส์หรือ ABC(α,β,μ,σ,R)yki


1
ฉันรู้ว่าฉันพลาดอะไรบางอย่าง "ทุกอย่างชัดเจนในการเข้าใจถึงปัญหาหลังเหตุการณ์" ความตั้งใจของฉัน: ฉันสนใจในค่าดังนั้นใช่ฉันสนใจวาดจากหลังร่วมกันของพารามิเตอร์ ฉันต้องการให้จำลองของเพื่อดูว่าแบบจำลองนั้นพอดีหรือไม่ F(yi|xi)y
— shadowtalker

1
ปัญหาที่สองนั้นยากกว่านี้มากแค่ไหน? ฉันได้ประเมินโมเดลแล้วและมีการดึงหลัง เราสามารถแชทต่อได้หากคุณต้องการหลีกเลี่ยงความคิดเห็นที่ยุ่งเหยิงที่นี่
— shadowtalker

1
โดยทั่วไปแล้วใช่ โชคดีที่ฉันมี Stan และ No-U-Turn Sampler ทำงานหนักสำหรับฉันที่นั่น
— shadowtalker

7

คำตอบของเวอร์ชั่นย่อนอกบริบท:

"Inverting" cdf ที่ไม่สามารถย้อนกลับได้ในแง่คณิตศาสตร์ (เช่นการกระจายแบบผสมของคุณ) เป็นไปได้ตามที่อธิบายไว้ในตำราเรียน Monte Carlo ส่วนใหญ่ (เช่นเดียวกับของเราดูเล็มม่า 2.4) หากคุณกำหนดอินเวอร์สทั่วไป จากนั้น ซึ่งหมายความว่าเมื่อมีการกระโดดของที่ ,สำหรับUกล่าวอีกนัยหนึ่งถ้าคุณวาดเครื่องแบบและมันเล็กกว่าสร้างของคุณ

F−(u)=inf{x∈R; F(x)≥u}
X∼F is equivalent to X=F−(U) when U∼U(0,1).
F(y)θy=0F−(u)=0u≤θU(0,1)θXคือ 0 มิฉะนั้นเมื่อคุณจะสร้างจากส่วนต่อเนื่องนั่นคือบันทึกปกติในกรณีของคุณ นี่หมายถึงการใช้รุ่นที่สองแบบสุ่มเป็นอิสระจากชุดรูปวาดครั้งแรกและการตั้งค่าเพื่อให้ได้รุ่นปกติx=0u>θvy=exp⁡(μ+σΦ−1(v))

นี่คือสิ่งที่รหัส R ของคุณเกือบ

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

กำลังทำ. คุณสร้าง Bernoulli ด้วยความน่าจะเป็นและถ้ามันมีค่าเท่ากับคุณจะเปลี่ยนมันให้เป็นบันทึกปกติ เพราะมันจะมีค่าเท่ากับ 1 มีโอกาสคุณควรแทนที่จะทำให้มันกลายเป็นแบบจำลองของระบบปกติเมื่อมันจะมีค่าเท่ากับศูนย์แทนลงท้ายด้วยรหัส R แก้ไข:θki1θki

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

ดังนั้นเมื่อรวมกันแล้วขั้นตอนการจำลองของฉันคือ: 1) วาด , 2) คำนวณจากนั้น 3) คำนวณถ้าและอย่างอื่น แก้ไข? zuk=Φ(zk)yk=0uk≤θyk=Flog-normal−1(uk)
— shadowtalker

ไม่ถูกต้อง คุณวาดชุดแรกเพื่อตัดสินใจระหว่างถึง log-normal จากนั้นชุดที่สองในกรณีที่คุณได้ตัดสินใจสำหรับ log-normal ดูคำตอบของฉันในเวอร์ชันที่แก้ไข 0
— ซีอาน

แต่นั่นจะไม่สนใจองค์ประกอบดังนั้นคำถามของฉัน ฉันทำการแก้ไขที่ชัดเจนและแก้ไขข้อผิดพลาดในรหัสเทียมของฉันด้วย z
— shadowtalker

คำตอบของฉันสำหรับรุ่นสั้นและรหัส R ที่คุณให้ไว้ ฉันหวังว่ามันจะช่วยสำหรับรุ่นยาว แต่สูตรของคุณสำหรับโมเดลร่วมยังคงไม่ถูกต้อง คุณควรกำหนดโมเดลของโดยไม่ใช้เครื่องแบบ ...y
— ซีอาน

แบบจำลองนั้นไม่ถูกต้องอย่างไร ฉันเพิ่งเสียบของฉันลงในสูตรที่ได้จากกระดาษที่ฉันอ้างถึง (ตรงกับในรูปแบบของพวกเขา) มันไม่ถูกต้องเหรอ? F1,…,FKG1,…,Gm
— shadowtalker
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.