Apa artinya distribusi terpotong?

14

Dalam sebuah artikel penelitian tentang analisis sensitivitas model persamaan diferensial biasa dari sistem dinamis, penulis memberikan distribusi parameter model sebagai distribusi Normal (rata-rata = 1e-4, std = 3e-5) terpotong ke kisaran [0,5e -4 1.5e-4]. Dia kemudian menggunakan sampel dari distribusi terpotong ini untuk simulasi model. Apa artinya memiliki distribusi terpotong dan sampel dari distribusi terpotong ini?

Saya dapat menemukan dua cara untuk melakukan ini:

  • Sampel dari distribusi Normal tetapi abaikan semua nilai acak yang berada di luar rentang yang ditentukan sebelum simulasi.
  • Entah bagaimana, dapatkan distribusi "Truncated Normal" khusus dan dapatkan sampel darinya.

Apakah ini pendekatan yang valid dan setara?

Saya percaya pada kasus pertama, jika ada yang merencanakan eksperimental cdf / pdf sampel, itu tidak akan terlihat seperti distribusi normal karena kurva tidak meluas ke ± .

Kavka
sumber

Jawaban:

16

Untuk memotong distribusi adalah untuk membatasi nilainya ke interval dan menormalkan kembali kepadatan sehingga integral atas rentang itu adalah 1.

Jadi, untuk memotong distribusi ke suatu interval ( a , b ) akan menghasilkan variabel acak yang memiliki kepadatanN(μ,σ2)(a,b)

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

di mana adalah kepadatan N ( μ , σ 2 ) . Anda dapat mencicipi dari kepadatan ini dalam beberapa cara. Salah satu cara (cara paling sederhana yang dapat saya pikirkan) untuk melakukan ini adalah dengan menghasilkan nilai N ( μ , σ 2 ) dan membuang nilai-nilai yang berada di luar ( a , b )ϕμ,σ2(x)N(μ,σ2)N(μ,σ2)(a,b)Interval, seperti yang Anda sebutkan. Jadi, ya, kedua peluru yang Anda daftarkan akan mencapai tujuan yang sama. Juga, Anda benar bahwa kepadatan empiris (atau histogram) variabel dari distribusi ini tidak akan mencapai . Itu akan terbatas pada ( a , b ) , tentu saja.±(a,b)

Makro
sumber
17

Simulasi dari distribusi normal sampai hasilnya jatuh dalam suatu interval ( a , b ) baik-baik saja ketika probabilitas ϱ = b a φ μ , σ 2 ( x )N(μ,σ2)(a,b) cukup besar. Jika terlalu kecil, prosedur ini terlalu mahal karena jumlah rata-rata penarikan untuk satu penerimaan adalah 1 / ϱ .

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

Seperti dijelaskan dalam Metode Statistik Monte Carlo (Bab 2, Contoh 2.2), dan juga dalam makalah arXiv saya , cara yang lebih efisien untuk mensimulasikan normal terpotong ini adalah dengan menggunakan metode accept-reject berdasarkan distribusi eksponensial .E(α)

Pertimbangkan, tanpa kehilangan keumuman, dan σ = 1 . Ketika b = + , distribusi instrumental potensial adalah distribusi eksponensial yang diterjemahkan, E ( α , a ) , dengan kepadatan g α ( z ) = α e - α ( z - a )μ=0σ=1b=+E(α,a) Rasio p a , ( z ) / g α ( z ) e - α ( z - a )

gα(z)=αeα(za)Iza.
kemudian dibatasi oleh exp ( α 2 / 2 - α a ) jika α > a dan oleh exp ( - a 2 / 2 ) sebaliknya. Batas (atas) yang sesuai adalah
pa,(z)/gα(z)eα(za)ez2/2
exp(α2/2αa)α>aexp(a2/2) Ekspresi pertama diminimalkan oleh α=1
{1/αexp(α2/2αa)if α>a,1/αexp(a2/2)otherwise.
sedangkan ˜ α = a meminimalkan batas kedua. Oleh karena itu,pilihan optimal α adalah (1).
α=12a+12a2+4,(1)
α~=aα
Xi'an
sumber
2
Saya mungkin kehilangan sesuatu, tetapi apa salahnya dengan mengambil UUnif(Φ(a),Φ(b))X=Φ1(U)
2
a0
1
Xi'an benar, @bnaul. Menjalankan qnormdalam loop R bukan ide yang baik.
Stéphane Laurent
@ Xi'an: Itu benar, tetapi fungsi seperti itu dapat dirancang untuk memiliki presisi yang sewenang-wenang.
Neil G
9

Sampel dari distribusi Normal tetapi abaikan semua nilai acak yang berada di luar rentang yang ditentukan sebelum simulasi.

Metode ini benar, tetapi, seperti yang disebutkan oleh @ Xi'an dalam jawabannya, akan membutuhkan waktu yang lama ketika kisarannya kecil (lebih tepatnya, ketika ukurannya kecil di bawah distribusi normal).

F1(U)FUUnif(0,1)FG(a,b)G1(U)UUnif(G(a),G(b))

G1G1GG1abG

Simulasikan distribusi terpotong dengan menggunakan sampling penting

N(0,1)GGG(q)=arctan(q)π+12G1(q)=tan(π(q12))

UUnif(G(a),G(b))G1(U)tan(U)UUnif(arctan(a),arctan(b))

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

xiϕ(x)/g(x)

w(x)=exp(x2/2)(1+x2),
log_w <- -sims^2/2 + log1p(sims^2)
w <- exp(log_w) # unnormalized weights
w <- w/sum(w)

(xi,w(xi))[u,v]

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

Ini memberikan perkiraan fungsi kumulatif target. Kami dapat dengan cepat mendapatkan dan merencanakannya dengan spatsatpaket:

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

(xi)

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

hist

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

Metode lain: pengambilan sampel transformasi invers cepat

Olver dan Townsend mengembangkan metode pengambilan sampel untuk kelas luas distribusi berkelanjutan. Ini diimplementasikan di perpustakaan chebfun2 untuk Matlab serta perpustakaan ApproxFun untuk Julia . Baru-baru ini saya menemukan perpustakaan ini dan kedengarannya sangat menjanjikan (tidak hanya untuk pengambilan sampel acak). Pada dasarnya ini adalah metode inversi tetapi menggunakan perkiraan kuat dari cdf dan invers cdf. Input adalah fungsi kepadatan target hingga normalisasi.

Sampel hanya dihasilkan oleh kode berikut:

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
Stéphane Laurent
sumber