Интеграция Метрополис-Гастингс - почему не работает моя стратегия?

16

Предположим, у меня есть функция которую я хочу интегрировать Конечно, предполагая, что стремится к нулю в конечных точках, нет сбоев, хорошая функция. Один из способов , который я теребил является использование алгоритма Метрополиса-Гастингса , чтобы создать список образцов от распределения пропорционально к , который отсутствует константа нормировки который я назову , а затем вычислю некоторую статистику по этим : - g ( x ) d x . г ( х ) х 1 , х 2 , , х нg(x)

g(x)dx.
g(x)x1,x2,,xnN = - g ( x ) d x p ( x ) f ( x ) x 1g(x)
N=g(x)dx
p(x)f(x)x
1ni=0nf(xi)f(x)p(x)dx.

Поскольку , я могу заменить в f (x) = U (x) / g (x), чтобы отменить g из интеграла, что приведет к выражению вида \ frac {1} {N} \ int _ {- \ infty} ^ {\ infty} \ frac {U (x)} {g (x)} g (x) dx = \ frac {1} {N} \ int _ {- \ infty} ^ \ infty U (x) dx. Таким образом, при условии, что U (x) интегрируется в 1 вдоль этой области, я должен получить результат 1 / N , который я мог бы просто взять обратно, чтобы получить желаемый ответ. Поэтому я мог бы взять диапазон моей выборки (чтобы наиболее эффективно использовать точки) r = x_ \ max - x_ \ min и позволить U (x) = 1 / r для каждой выборки, которую я нарисовал. Таким образом, U (х)fp(x)=g(x)/Ng 1f(x)=U(x)/g(x)gU(x)11/Nr=xmax-xminU(x)=1/rU(x)

1NU(x)g(x)g(x)dx=1NU(x)dx.
U(x)11/Nr=xmaxxminU(x)=1/rU(x)оценивает в ноль за пределами региона, где мои выборки не, но интегрируется в 1 в этом регионе. Поэтому, если я теперь возьму ожидаемое значение, я должен получить:
E[U(x)g(x)]=1N1ni=0nU(x)g(x).

Я попытался проверить это в R для примера функции . В этом случае я не использую Metropolis-Hastings для генерации выборок, но использую фактические вероятности для генерации выборок (просто для тестирования). Я не совсем получаю результаты, которые я ищу. По сути, полное выражение того, что я бы вычислял, таково: В моей теории это должно быть равно . Это близко, но это, конечно, не сходится ожидаемым образом, я делаю что-то не так? 1g(x)=ex2rnorm1/

1n(xmaxxmin)i=0n1exi2.
1/π
ys = rnorm(1000000, 0, 1/sqrt(2))
r = max(ys) - min(ys)
sum(sapply(ys, function(x) 1/( r * exp(-x^2))))/length(ys)
## evaluates to 0.6019741. 1/sqrt(pi) = 0.5641896

Редактировать для CliffAB

Причина, по которой я использую диапазон, заключается в простом определении функции, которая не равна нулю в области, где находятся мои точки, но которая интегрируется в в диапазоне . Полная спецификация функции: Мне не нужно было использовать качестве этой равномерной плотности. Я мог бы использовать некоторую другую плотность, интегрированную в , например, плотность вероятности Однако это сделало бы суммирование отдельных образцов тривиальным, т.е. [ - , ] U ( x ) = { 11[,]U(х)

U(x)={1xmaxxminxmax>x>xmin0otherwise.
U(x)P ( x ) = 111
P(x)=1πex2.
1ni=0nP(x)g(x)=1ni=0nexi2/πexi2=1ni=0n1π=1π.

Я мог бы попробовать эту технику для других дистрибутивов, которые интегрируются в . Тем не менее, я все еще хотел бы знать, почему это не работает для равномерного распределения.1

Майк Флинн
источник
Только быстро просматривая это, поэтому я не уверен точно, почему вы решили использовать диапазон (х). Условно, что это действительно, это крайне неэффективно! Диапазон выборки такого размера - примерно самая нестабильная статистика, которую вы можете взять.
Клифф А.Б.
@CliffAB Нет ничего особенно особенного в том, что я использую диапазон, кроме определения равномерного распределения на интервале, где лежат мои точки. Смотрите правки.
Майк Флинн
1
Я рассмотрю это позже более подробно. Но нужно учесть, что если x является набором равномерных RV, то как , range . Но если x - это набор невырожденных нормальных RV, то как , . n(x)1nrange(x)
Cliff AB
@CliffAB Вы, возможно, были правы, я думаю, причина была в том, что границы интеграла не были фиксированными, и поэтому дисперсия оценки никогда не будет сходиться ...
Майк Флинн

Ответы:

13

граммграммграмм

Иксграмм(Икс)dИкс
p(x)g(x)α(x)U(x)
{x;α(x)>0}{x;g(x)>0}
Xα(x)g(x)p(x)dx=Xα(x)Ndx=1N
p1/N
η^=1ni=1nα(xi)g(xi)xiiidp(x)
η^αα=π
α(x)g(x)=1(x)
(x)g(x)=π(x)(x)
N^=ni=1n1/(xi)

(min(xi),max(xi))exp{x2}

α(q.25(xi),q.75(xi))g

1/π

ys = rnorm(1e6, 0, 1/sqrt(2))
r = quantile(ys,.75) - quantile(ys,.25)
yc=ys[(ys>quantile(ys,.25))&(ys<quantile(ys,.75))]
sum(sapply(yc, function(x) 1/( r * exp(-x^2))))/length(ys)
## evaluates to 0.5649015. 1/sqrt(pi) = 0.5641896

Мы подробно обсуждаем этот метод в двух статьях с Дарреном Рейтом и с Жаном-Мишелем Марином .

Сиань
источник