การวาดตัวอย่างจากการแจกแจงปกติหลายตัวแปรภายใต้ข้อ จำกัด กำลังสอง


คำตอบ:


12

การแก้ไขปัญหาอย่างเป็นทางการของปัญหานี้ก่อนต้องมีคำนิยามที่เหมาะสมของ

" Nd(μ,Σ)การกระจายขึ้นอยู่กับข้อ จำกัด ที่ ||x||2=1 "

วิธีธรรมชาติคือการกำหนดกระจายของX∼Nd(μ,Σ)เงื่อนไขใน||||X||=ϱและจะใช้เงื่อนไขนี้กับกรณีϱ=1 1 ถ้าเราใช้พิกัดเชิงขั้ว ,

x1=ϱcos⁡(θ1)θ1∈[0,π]x2=ϱsin⁡(θ1)cos⁡(θ2)θ2∈[0,π]⋮xd−1=ϱ(∏i=1d−2sin⁡(θi))cos⁡(θd−1)θd−1∈[0,2π]xd=ϱ∏i=1d−1sin⁡(θi)
Jacobian แห่งการเปลี่ยนแปลงคือ
ϱd−1∏i=1d−2sin⁡(θi)d−1−i
ดังนั้นความหนาแน่นของการกระจายของθ=(θ1,…,θd−1)ได้รับϱคือ
f(θ|ϱ)∝exp⁡−12{(x(θ,ϱ)−μ)TΣ−1(x(θ,ϱ)−μ)}∏i=1d−2sin⁡(θi)d−1−i

สรุป:ความหนาแน่นนี้แตกต่างจากการใช้ความหนาแน่นปกติกับจุดบนหน่วยทรงกลมเนื่องจากยาโคเบียน

ขั้นตอนที่สองคือการพิจารณาความหนาแน่นของเป้าหมาย และการออกแบบห่วงโซ่มาร์คอฟอัลกอริทึม Monte Carlo ในการสำรวจพื้นที่พารามิเตอร์ปี่] ความพยายามครั้งแรกของฉันจะอยู่ที่ตัวอย่างกิ๊บส์เริ่มต้นที่จุดบนทรงกลมใกล้กับนั่นคือและดำเนินการทีละหนึ่งมุมในลักษณะ Metropolis-within-Gibbs:

f(θ|ϱ=1)∝exp⁡−12{(x(θ,1)−μ)TΣ−1(x(θ,1)−μ)}∏i=1d−2sin⁡(θi)d−1−i
[0,π]d−2×[0,2π]μμ/||μ||
  1. สร้าง (โดยที่จะคำนวณจำนวนเงิน modulo ) และยอมรับค่าใหม่นี้ด้วยความน่าจะเป็น elseθ1(t+1)∼U([θ1(t)−δ1,θ1(t)+δ1])π
    f(θ1(t+1),θ2(t),...|ϱ=1)f(θ1(t),θ2(t),...|ϱ=1)∧1
    θ1(t+1)=θ1(t)
  2. สร้าง (ที่ผลรวมคำนวณ modulo ) และยอมรับค่าใหม่นี้ด้วยความน่าจะเป็น elseθ2(t+1)∼U([θ2(t)−δ2,θ2(t)+δ2])π
    f(θ1(t+1),θ2(t+1),θ3(t),...|ϱ=1)f(θ1(t+1),θ2(t),θ3(t),...|ϱ=1)∧1
    θ2(t+1)=θ2(t)
  3. …
  4. สร้าง (โดยที่ผลรวมจะคำนวณแบบโมดูโล ) และยอมรับค่าใหม่นี้ด้วยความน่าจะเป็น อื่นθd−1(t+1)∼U([θd−1(t)−δd−1,θd−1(t)+δd−1])2π
    f(θ1(t+1),θ2(t+1),...,θd−1(t+1)|ϱ=1)f(θ1(t+1),θ2(t+1),...,θd−1(t)|ϱ=1)∧1
    θd−1(t+1)=θd−1(t)

เครื่องชั่ง , , ,สามารถปรับขนาดกับอัตราการยอมรับของขั้นตอนไปสู่เป้าหมายในอุดมคติของ\%δ1δ2…δd−150%

นี่คือรหัส R เพื่อแสดงด้านบนพร้อมค่าเริ่มต้นสำหรับและ :μΣ

library(mvtnorm)
d=4
target=function(the,mu=1:d,sigma=diag(1/(1:d))){
 carte=cos(the[1])
 for (i in 2:(d-1))
  carte=c(carte,prod(sin(the[1:(i-1)]))*cos(the[i]))
 carte=c(carte,prod(sin(the[1:(d-1)])))
 prod(sin(the)^((d-2):0))*dmvnorm(carte,mean=mu,sigma=sigma)}
#Gibbs
T=1e4
#starting point
mu=(1:d)
mup=mu/sqrt(sum(mu^2))
mut=acos(mup[1])
for (i in 2:(d-1))
  mut=c(mut,acos(mup[i]/prod(sin(mut))))
thes=matrix(mut,nrow=T,ncol=d-1,byrow=TRUE)
delta=rep(pi/2,d-1)     #scale
past=target(thes[1,])   #current target
for (t in 2:T){
 thes[t,]=thes[t-1,]
 for (j in 1:(d-1)){
   prop=thes[t,]
   prop[j]=prop[j]+runif(1,-delta[j],delta[j])
   prop[j]=prop[j]%%(2*pi-(j<d-1)*pi)
   prof=target(prop)
   if (runif(1)<prof/past){
     past=prof;thes[t,]=prop}
   }
}

-3

||x||22=1เป็นไปไม่ได้อย่างเคร่งครัดเนื่องจากเป็นตัวแปรสุ่ม (ต่อเนื่อง) หากคุณต้องการให้มันมีความแปรปรวนเท่ากับ 1 นั่นคือ (โดยที่ตัวหนอนหมายความว่าเราประมาณค่าความแปรปรวน) จากนั้นคุณจะต้องกำหนดความแปรปรวนให้เป็นn} อย่างไรก็ตามความต้องการนี้อาจขัดแย้งกับ\นั่นคือเพื่อให้ได้ตัวอย่างที่มีความแปรปรวนนี้คุณต้องมีเส้นทแยงมุมของจะเท่ากับ{n}xE[(x−μ)2]=~1n∑(x−μ)2=1n||x−n||22=1n1nΣΣ1n

ต้องการตัวอย่างแบบฟอร์มการกระจายนี้โดยทั่วไปคุณสามารถสร้าง IID ปกติมาตรฐานและจากนั้นคูณด้วย , รากที่สองของแล้วเพิ่มหมายถึง\Σ0.5Σμ


ขอบคุณสำหรับคำตอบของคุณ วิธีการหนึ่งที่ฉันสามารถคิดที่จะผลิตสิ่งที่ฉันต้องการ ( แต่ไม่ได้มีประสิทธิภาพ) คือการสุ่มตัวอย่างการปฏิเสธ ดังนั้นจึงเป็นไปไม่ได้เลยที่จะทำ แต่ฉันกำลังมองหาวิธีที่มีประสิทธิภาพในการทำมัน
— Sobi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.