Что означает усеченное распределение?


14

В исследовательской статье об анализе чувствительности модели обыкновенного дифференциального уравнения динамической системы автор представил распределение параметра модели в виде нормального распределения (среднее = 1e-4, std = 3e-5), усеченного до диапазона [0.5e -4 1,5е-4]. Затем он использует образцы из этого усеченного распределения для моделирования модели. Что значит иметь усеченный дистрибутив и образец из этого усеченного дистрибутива?

Я мог бы придумать два способа сделать это:

  • Выборка из нормального распределения, но игнорирование всех случайных значений, выходящих за пределы указанного диапазона, до моделирования.
  • Каким-то образом получите специальный «усеченный нормальный» дистрибутив и получите образцы из него.

Это действительные и эквивалентные подходы?

Я полагаю, что в первом случае, если построить график экспериментального cdf / pdf образца, он не будет выглядеть как нормальное распределение, поскольку кривые не расширяются до ± .

Ответы:


16

Усечение распределения означает ограничение его значений интервалом и повторную нормализацию плотности, чтобы интеграл по этому диапазону был равен 1.

Таким образом, усечение распределения N(μ,σ2) до интервала (a,b) означало бы создание случайной величины, которая имеет плотность

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

где ϕμ,σ2(x) - плотность N(μ,σ2) . Вы можете взять образец из этой плотности несколькими способами. Один из способов (самый простой способ, который я могу придумать) сделать это - сгенерировать N(μ,σ2) значений и выбросить те, которые выходят за пределы (a,b) интервал , как вы упоминали. Так что, да, те две пули, которые вы перечислили, достигли бы той же цели. Кроме того, вы правы, что эмпирическая плотность (или гистограмма) переменных из этого распределения не будет расширяться до . Это будет ограничено ( а , б ) , конечно.±(a,b)


17

Моделирование от нормального распределения до тех пор, пока результат не попадет в интервал ( a , b ) , хорошо, когда вероятность ϱ = b a φ μ , σ 2 ( x )N(μ,σ2)(a,b) достаточно велик. Если он слишком мал, эта процедура слишком затратна, поскольку среднее число тиражей для одного акцепта составляет 1 / ϱ .

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

Как описано в Статистических методах Монте-Карло (Глава 2, Пример 2.2), а также в моей статье arXiv , более эффективный способ симулировать эту усеченную нормалью состоит в использовании метода accept-reject, основанного на экспоненциальном распределении .E(α)

Рассмотрим без ограничения общности случай и σ = 1 . Когда b = + , потенциальным инструментальным распределением является транслированное экспоненциальное распределение E ( α , a ) с плотностью g α ( z ) = α e -μ=0σ=1b=+E(α,a) Отношение р , ( г ) / г α ( г ) α е - α ( г - ) е - г 2 / 2 затем ограничена ехр ( α 2 / 2 - α ) , если α > и exp ( - a

gα(z)=αeα(za)Iza.
pa,(z)/gα(z)eα(za)ez2/2
exp(α2/2αa)α>a противном случае. Соответствующая (верхняя) граница exp(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 не очень хорошая идея.
Стефан Лоран

@ Сиань: это правда, но такие функции могут иметь произвольную точность.
Нил Г

9

Выборка из нормального распределения, но игнорирование всех случайных значений, выходящих за пределы указанного диапазона, до моделирования.

Этот метод является правильным, но, как упомянул @ Xi'an в своем ответе, потребуется много времени, когда диапазон мал (точнее, когда его мера мала при нормальном распределении).

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

G1G1GG1abG .

Имитация усеченного распределения с использованием выборки по важности

N(0,1)GGG(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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.