Co oznacza skrócona dystrybucja?

14

W artykule badawczym na temat analizy wrażliwości modelu równania różniczkowego zwyczajnego układu dynamicznego autor podał rozkład parametru modelu jako Rozkład normalny (średnia = 1e-4, std = 3e-5) obcięty do zakresu [0,5e -4 1,5e-4]. Następnie wykorzystuje próbki z tego obciętego rozkładu do symulacji modelu. Co to znaczy mieć obcięty rozkład i próbkę z tego obciętego rozkładu?

Mógłbym wymyślić dwa sposoby:

  • Próbkuj z rozkładu normalnego, ale przed symulacjami zignoruj ​​wszystkie losowe wartości spoza określonego zakresu.
  • Jakoś uzyskać specjalny rozkład „Skrócona normalna” i pobrać z niego próbki.

Czy są to prawidłowe i równoważne podejścia?

Uważam, że w pierwszym przypadku, gdyby wykreślić eksperymentalny plik cdf / pdf próbki, nie wyglądałby on jak rozkład normalny, ponieważ krzywe nie rozciągają się do ± .

Kawka
źródło

Odpowiedzi:

16

Aby obciąć rozkład, należy ograniczyć jego wartości do przedziału i ponownie znormalizować gęstość, tak aby całka w tym zakresie wynosiła 1.

Tak więc obcięcie rozkładu N(μ,σ2) do przedziału (a,b) oznaczałoby wygenerowanie zmiennej losowej o gęstości

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

gdzie ϕμ,σ2(x) to gęstość N(μ,σ2) . Możesz próbkować z tej gęstości na wiele sposobów. Jednym ze sposobów (najprostszego, jaki mogę wymyślić), aby to zrobić, byłoby wygenerowanie wartości N(μ,σ2) i wyrzucenie tych, które wypadają poza (a,b)interwał, jak wspomniałeś. Tak, te dwie wymienione przez ciebie kule osiągnęłyby ten sam cel. Masz również rację, że gęstość empiryczna (lub histogram) zmiennych z tego rozkładu nie rozciągałaby się na . Oczywiście byłoby to ograniczone do ( a , b ) .±(a,b)

Makro
źródło
17

Symulowanie od normalnego rozkładu aż wynik mieści się w przedziale ( a , b ) jest w porządku, gdy prawdopodobieństwo ϱ = b a φ μ , σ 2 ( x )N(μ,σ2)(a,b) jest wystarczająco duży. Jeśli jest zbyt mała, procedura ta jest zbyt kosztowna, ponieważ średnia liczba losowań dla jednej akceptacji wynosi 1 / ϱ .

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

Jak opisano w Metodach Statystycznych Monte Carlo (Rozdział 2, Przykład 2.2), a także w moim artykule arXiv , bardziej skutecznym sposobem symulacji tej okrojonej normy jest zastosowanie metody akceptacji-odrzucenia opartej na wykładniczym rozkładzie .E(α)

Rozważmy, bez utraty ogólności, przypadek i σ = 1 . Gdy b = + , potencjalnym rozkładem instrumentalnym jest przetłumaczony rozkład wykładniczy E ( α , a ) o gęstości g α ( z ) = α e - α ( z - a )μ=0σ=1b=+E(α,a) Stosunek P , ( z ) / g α ( oo ) α e - α ( z - ) e - z 2 / 2 jest wówczas ograniczone exp ( α 2 / 2 - α ) jeśli α > i exp ( - 2 / 2 ) inaczej. Odpowiednia (górna) granica to

gα(z)=αeα(za)Iza.
pa,(z)/gα(z)eα(za)ez2/2
exp(α2/2αa)α>aexp(a2/2) Pierwsze wyrażenie jest minimalizowane przez α=1
{1/αexp(α2/2αa)if α>a,1/αexp(a2/2)otherwise.
podczas gdy ˜ α = a minimalizuje drugą granicę. Optymalnym wyborem α jest zatem (1).
α=12a+12a2+4,(1)
α~=aα
Xi'an
źródło
2
Być może czegoś mi brakuje, ale co jest nie tak z przyjmowaniem i pozwalaniem X = Φ - 1 ( U ) ? Czy to nie daje pożądanej dystrybucji? UUnif(Φ(a),Φ(b))X=Φ1(U)
bnaul
2
@bnaul: jest to całkowicie słuszne, ponieważ opiera się na odwrotnej transformacji cdf. Implikuje to jednak uzyskanie funkcji kwantylu rozkładu normalnego z bardzo dużą precyzją. Zwłaszcza, gdy jest znacznie większe niż 0 . a0
Xi'an,
1
Xi'an ma rację, @bnaul. Bieganie qnormw pętli R nie jest dobrym pomysłem.
Stéphane Laurent
@ Xi'an: To prawda, ale takie funkcje mogą mieć dowolną precyzję.
Neil G
9

Próbkuj z rozkładu normalnego, ale przed symulacjami zignoruj ​​wszystkie losowe wartości spoza określonego zakresu.

Ta metoda jest poprawna, ale jak wspomniał @ Xi'an w swojej odpowiedzi, zajęłoby dużo czasu, gdy zasięg jest mały (a dokładniej, gdy jego miara jest mała w normalnym rozkładzie).

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

G1G1G is a normal distribution, the evaluation of G1 is rather slow, and it is not highly precise for values of a and b outside the "range" of G.

Simulate a truncated distribution using importance sampling

A possibility is to use importance sampling. Consider the case of the standard Gaussian distribution N(0,1). Forget the previous notations, now let 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) is definitely not a sample of the target distribution, but of the instrumental Cauchy distribution, and one gets a sample of the target distribution by performing weighted resampling, for instance using the multinomial sampling:

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

hist

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

Another method: fast inverse transform sampling

Olver and Townsend developed a sampling method for a broad class of continuous distribution. It is implemented in the chebfun2 library for Matlab as well as the ApproxFun library for Julia. I have recently discovered this library and it sounds very promising (not only for random sampling). Basically this is the inversion method but using powerful approximations of the cdf and the inverse cdf. The input is the target density function up to normalization.

The sample is simply generated by the following code:

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

As checked below, it yields an estimated measure of the interval [2,4] close to the one previously obtained by importance sampling:

sum((x.>2) & (x.<4))/nsims
## 0.14191
Stéphane Laurent
źródło