การกระจายที่ถูกตัดทอนหมายความว่าอย่างไร


14

ในบทความวิจัยเกี่ยวกับการวิเคราะห์ความอ่อนไหวของตัวแบบสมการเชิงอนุพันธ์สามัญของระบบไดนามิกผู้เขียนให้การแจกแจงของพารามิเตอร์แบบจำลองเป็นการแจกแจงแบบปกติ (Mean = 1e-4, std = 3e-5) ถูกตัดให้อยู่ในช่วง [0.5e -4 1.5e-4] จากนั้นเขาใช้ตัวอย่างจากการแจกแจงแบบตัดปลายนี้เพื่อจำลองสถานการณ์ของแบบจำลอง การกระจายแบบตัดปลายและตัวอย่างจากการกระจายแบบตัดปลายหมายความว่าอย่างไร

ฉันสามารถสร้างวิธีนี้ได้สองวิธี:

  • ตัวอย่างจากการแจกแจงแบบปกติ แต่ไม่ต้องสนใจค่าสุ่มทั้งหมดที่อยู่นอกช่วงที่ระบุก่อนการจำลอง
  • ได้รับการกระจาย "ปกติที่ถูกตัดทอน" เป็นพิเศษและรับตัวอย่างจากมัน

แนวทางที่ถูกต้องและเท่าเทียมกันเหล่านี้หรือไม่

ผมเชื่อว่าในกรณีแรกหากมีการพล็อตทดลอง CDF / pdf ของกลุ่มตัวอย่างก็จะดูไม่เหมือนการกระจายปกติเพราะโค้งไม่ขยายไปถึง±

คำตอบ:


16

เมื่อต้องการตัดทอนการกระจายคือการ จำกัด ค่าของช่วงเวลาและทำให้ความหนาแน่นกลับมาเป็นปกติอีกครั้งเพื่อให้อินทิกรัลในช่วงนั้นคือ 1

ดังนั้นการตัดการแจกแจงไปยังช่วงเวลา( a , b )จะเป็นการสร้างตัวแปรสุ่มที่มีความหนาแน่นN(μ,σ2)(a,b)

pa,b(x)=ϕμ,σ2(x)abϕμ,σ2(y)dyI{x(a,b)}

เมื่อคือความหนาแน่นN ( μ , σ 2 ) คุณสามารถสุ่มตัวอย่างจากความหนาแน่นนี้ได้หลายวิธี วิธีหนึ่ง (วิธีที่ง่ายที่สุดที่ฉันคิดได้) ในการทำเช่นนี้คือการสร้างค่าN ( μ , σ 2 )และโยนสิ่งที่ตกนอก( a , b )ϕμ,σ2(x)N(μ,σ2)N(μ,σ2)(a,b)ช่วงเวลาตามที่คุณกล่าวถึง ดังนั้นใช่ทั้งสองหัวข้อย่อยที่คุณระบุไว้จะบรรลุเป้าหมายเดียวกัน นอกจากนี้คุณยังมีสิทธิที่ความหนาแน่นเชิงประจักษ์ (หรือ histogram) ของตัวแปรจากการกระจายนี้จะไม่ขยายไปถึง มันจะถูก จำกัด ให้( , )ของหลักสูตร±(a,b)


17

จำลองจากปกติการจัดจำหน่ายจนกว่าผลที่อยู่ในช่วงเวลา( , )เป็นดีเมื่อความน่าจะเป็น ρ = ไวμ , σ 2 ( x )N(μ,σ2)(a,b) ใหญ่พอ ถ้ามันมีขนาดเล็กเกินไปขั้นตอนนี้เป็นค่าใช้จ่ายมากเกินไปเนื่องจากค่าเฉลี่ยของจำนวนเสมอสำหรับหนึ่งได้รับการยอมรับเป็น 1 / ρ

ϱ=abφμ,σ2(x)dx
1/ϱ

ตามที่อธิบายไว้ในมอนติคาร์โลวิธีการทางสถิติ (บทที่ 2 ตัวอย่าง 2.2) เช่นเดียวกับในกระดาษ arXiv ของฉันเป็นวิธีที่มีประสิทธิภาพมากขึ้นเพื่อจำลองนี้ถูกตัดทอนปกติคือการใช้วิธีการที่ยอมรับปฏิเสธขึ้นอยู่กับการชี้แจงการจัดจำหน่ายE(α)

พิจารณาโดยไม่สูญเสียของทั่วไปกรณีที่และσ = 1 เมื่อb = + การกระจายเครื่องมือที่มีศักยภาพคือการแจกแจงแบบเอ็กซ์โพเนนเชียล, E ( α , a ) , ด้วยความหนาแน่น g α ( z ) = α e - α ( z - a )μ=0σ=1b=+E(α,a) อัตราส่วน P , ( Z ) / กรัมα ( Z ) α อี- α ( Z - ) E - Z 2 / 2 เป็นที่สิ้นสุดแล้วโดย ประสบการณ์( α 2 / 2 - α ) ถ้า α >และประสบการณ์( - 2 / 2 ) มิฉะนั้น ขอบเขต (บน) ที่สอดคล้องกันคือ

gα(z)=αeα(za)Iza.
pa,(z)/gα(z)eα(za)ez2/2
exp(α2/2αa)α>aexp(a2/2) การแสดงออกครั้งแรกจะลดลงโดย α=1
{1/αexp(α2/2αa)if α>a,1/αexp(a2/2)otherwise.
ในขณะที่ ˜ α = aลดขอบเขตที่สองให้เหลือน้อยที่สุด ตัวเลือกที่ดีที่สุดของ αคือ (1)
α=12a+12a2+4,(1)
α~=aα

2
UUnif(Φ(a),Φ(b))X=Φ1(U)

2
a0

1
ซีอานถูกต้อง @bnaul การวิ่งqnormในลูป R ไม่ใช่ความคิดที่ดี
Stéphane Laurent

@ ซีอาน: จริง แต่ฟังก์ชั่นดังกล่าวสามารถออกแบบให้มีความแม่นยำโดยพลการ
Neil G

9

ตัวอย่างจากการแจกแจงแบบปกติ แต่ไม่ต้องสนใจค่าสุ่มทั้งหมดที่อยู่นอกช่วงที่ระบุก่อนการจำลอง

วิธีนี้ถูกต้อง แต่ตามที่ @ Xi'an กล่าวถึงในคำตอบของเขามันจะใช้เวลานานเมื่อช่วงมีขนาดเล็ก (แม่นยำยิ่งขึ้นเมื่อวัดมีขนาดเล็กภายใต้การกระจายปกติ)

F-1(ยู)F คือ (ฟังก์ชันสะสมของ) การกระจายดอกเบี้ยและ ยู~ยูนิฟ(0,1). เมื่อไหร่F คือการแจกแจงที่ได้จากการตัดทอนการแจกแจงบางตัว G ในบางช่วงเวลา (a,)นี่เท่ากับตัวอย่าง G-1(ยู) กับ ยู~ยูนิฟ(G(a),G()).

อย่างไรก็ตามและนี่เป็นที่กล่าวถึงแล้วโดย @ Xi'an ในความคิดเห็นสำหรับบางสถานการณ์วิธีการผกผันต้องมีการประเมินที่แม่นยำมากของฟังก์ชั่นควอไทล์G-1และฉันจะเพิ่มมันก็ต้องมีการคำนวณอย่างรวดเร็วของG-1. เมื่อไหร่G เป็นการแจกแจงแบบปกติการประเมินของ G-1 ค่อนข้างช้าและไม่แม่นยำสำหรับค่าของ a และ นอก "ช่วง" ของ G.

จำลองการแจกแจงที่ถูกตัดทอนโดยใช้การสุ่มตัวอย่างที่สำคัญ

ความเป็นไปได้คือการใช้การสุ่มตัวอย่างสำคัญ พิจารณากรณีของการแจกแจงแบบเกาส์มาตรฐานยังไม่มีข้อความ(0,1). ลืมสัญลักษณ์ก่อนหน้าตอนนี้ปล่อยG be the Cauchy distribution. The two above mentionned requirements are fulfilled for G : one simply has G(q)=arctan(q)π+12 and G1(q)=tan(π(q12)). Therefore, the truncated Cauchy distribution is easy to sample by the inversion method and it is a good choice of the instrumental variable for importance sampling of the truncated normal distribution.

After a bit of simplifications, sampling UUnif(G(a),G(b)) and taking G1(U) is equivalent to take tan(U) with UUnif(arctan(a),arctan(b)):

a <- 1
b <- 5
nsims <- 10^5
sims <- tan(runif(nsims, atan(a), atan(b)))

Now one has to calculate the weight for each sampled value xi, defined as the ratio ϕ(x)/g(x) of the two densities up to normalization, hence we can take

w(x)=exp(x2/2)(1+x2),
but it could be safer to take the log-weights:
log_w <- -sims^2/2 + log1p(sims^2)
w <- exp(log_w) # unnormalized weights
w <- w/sum(w)

The weighted sample (xi,w(xi)) allows to estimate the measure of every interval [u,v] under the target distribution, by summing the weights of each sampled value falling inside the interval:

u <- 2; v<- 4
sum(w[sims>u & sims<v])
## [1] 0.1418

This provides an estimate of the target cumulative function. We can quickly get and plot it with the spatsat package:

F <- spatstat::ewcdf(sims,w)
# estimated F:
curve(F(x), from=a-0.1, to=b+0.1)
# true F:
curve((pnorm(x)-pnorm(a))/(pnorm(b)-pnorm(a)), add=TRUE, col="red")

ewcdf

# approximate probability of u<x<v:
F(v)-F(u)
## [1] 0.1418

Of course, the sample (xi)ไม่ใช่ตัวอย่างของการกระจายเป้าหมาย แต่เป็นการกระจายเครื่องมือ Cauchy และอีกตัวอย่างหนึ่งได้รับตัวอย่างของการกระจายเป้าหมายโดยดำเนินการresampling ถ่วงน้ำหนักตัวอย่างเช่นการใช้การสุ่มตัวอย่างแบบมัลติโนเมียล:

msample <- rmultinom(1, nsims, w)[,1]
resims <- rep(sims, times=msample)
hist(resims) 

hist

mean(resims>u & resims<v)
## [1] 0.1446

วิธีอื่น: การสุ่มตัวอย่างการแปลงผกผันอย่างรวดเร็ว

Olver และ Townsendพัฒนาวิธีการสุ่มตัวอย่างสำหรับการกระจายอย่างต่อเนื่องในระดับกว้าง มันถูกนำมาใช้ในห้องสมุด chebfun2 สำหรับ Matlabเช่นเดียวกับห้องสมุด ApproxFun สำหรับ Juliaจูเลีย ฉันเพิ่งค้นพบห้องสมุดนี้และฟังดูมีแนวโน้มมาก (ไม่เพียง แต่สำหรับการสุ่มตัวอย่าง) โดยทั่วไปนี่เป็นวิธีการผกผัน แต่ใช้การประมาณค่าที่มีประสิทธิภาพของ cdf และ c ผกผัน อินพุตคือฟังก์ชันความหนาแน่นเป้าหมายจนถึงการปรับมาตรฐาน

ตัวอย่างถูกสร้างขึ้นโดยรหัสต่อไปนี้:

using ApproxFun
f = Fun(x -> exp(-x.^2./2), [1,5]);
nsims = 10^5;
x = sample(f,nsims);

เมื่อตรวจสอบด้านล่างแล้วจะให้การวัดช่วงเวลาโดยประมาณ [2,4] ใกล้กับที่ได้รับก่อนหน้านี้โดยการสุ่มตัวอย่างที่สำคัญ:

sum((x.>2) & (x.<4))/nsims
## 0.14191
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.