Intégration Metropolis-Hastings - pourquoi ma stratégie ne fonctionne-t-elle pas?

16

Supposons que j'ai une fonction g(x) que je souhaite intégrer

g(x)dx.
Bien sûr, en supposant que g(x) passe à zéro aux points d'extrémité, pas d'explosions, belle fonction. Une façon avec laquelle j'ai joué est d'utiliser l'algorithme Metropolis-Hastings pour générer une liste d'échantillons x1,x2,,xn partir de la distribution proportionnelle à g(x), Qui manque la constante de normalisation
N=g(x)dx
que nous appellerons p(x) , puis en calculant une certaine statistique f(x) sur ces x « s:
1ni=0nf(xi)f(x)p(x)dx.

Puisque p(x)=g(x)/N , je peux substituer dans f(x)=U(x)/g(x) pour annuler g de l'intégrale, résultant en une expression de la forme

1NU(x)g(x)g(x)dx=1NU(x)dx.
Donc, à condition queU(x)s'intègre à1long de cette région, je devrais obtenir le résultat1/N, que je pourrais simplement prendre l'inverse pour obtenir la réponse que je veux. Par conséquent, je pouvais prendre la plage de mon échantillon (pour utiliser le plus efficacement possible les points)r=xmaxxminet laisserU(x)=1/rpour chaque échantillon que j'ai tiré. De cette façon s'évalue à zéro en dehors de la région où mes échantillons ne sont pas, mais s'intègre à 1 dans cette région. Donc, si je prends maintenant la valeur attendue, je devrais obtenir: E [ U ( x )U(x)1
E[U(x)g(x)]=1N1ni=0nU(x)g(x).

J'ai essayé de tester cela dans R pour l'exemple de fonction . Dans ce cas, je n'utilise pas Metropolis-Hastings pour générer les échantillons mais j'utilise les probabilités réelles avec pour générer des échantillons (juste pour tester). Je n'obtiens pas tout à fait les résultats que je recherche. Fondamentalement, l'expression complète de ce que je calculerais est: 1g(x)=ex2rnorm Cela devrait dans ma théorie évaluer à1/

1n(xmaxxmin)i=0n1exi2.
. Il se rapproche mais il ne converge certainement pas de la manière attendue, est-ce que je fais quelque chose de mal?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

Modifier pour CliffAB

La raison pour laquelle j'utilise la plage est juste pour définir facilement une fonction qui est non nulle sur la région où se trouvent mes points, mais qui s'intègre à sur la plage [ - , ] . La spécification complète de la fonction est: U ( x ) = { 11[,] Je n'ai pas eu à utiliserU(x)comme cette densité uniforme. J'aurais pu utiliser une autre densité intégrée à1, par exemple la densité de probabilité P(x)=1

U(x)={1xmaxxminxmax>x>xmin0otherwise.
U(x)1 Cependant, cela aurait rendu la somme des échantillons individuels triviale, c'est-à-dire 1
P(x)=1πex2.
1ni=0nP(x)g(x)=1ni=0nexi2/πexi2=1ni=0n1π=1π.

Je pourrais essayer cette technique pour d'autres distributions qui s'intègrent à . Cependant, je voudrais quand même savoir pourquoi cela ne fonctionne pas pour une distribution uniforme.1

Mike Flynn
la source
Je ne regarde que rapidement cela, donc je ne sais pas exactement pourquoi vous avez décidé d'utiliser range (x). À condition qu'il soit valide, il est extrêmement inefficace! La plage d'un échantillon de cette taille est à peu près la statistique la plus instable que vous puissiez prendre.
Cliff AB
@CliffAB Il n'y a rien de particulier à ce que j'utilise la plage, à part définir une distribution uniforme sur l'intervalle où mes points se trouvent. Voir les modifications.
Mike Flynn
1
n(x)1nrange(x)
@CliffAB vous aviez peut-être raison, je pense que la raison en était que les bornes de l'intégrale n'étaient pas fixes, et donc la variance de l'estimateur ne convergera jamais ...
Mike Flynn

Réponses:

13

ggg

Xg(x)dx
p(X)g(X)α(X)U(X)
{x;α(x)>0}{x;g(x)>0}
the following identity
Xα(x)g(x)p(x)dx=Xα(x)Ndx=1N
shows that a sample from p can produce an unbiased evaluation of 1/N by the importance sampling estimator
η^=1ni=1nα(xi)g(xi)xiiidp(x)
Obviously, the performances (convergence speed, existence of a variance, &tc.) of the estimator η^ do depend on the choice of α [even though its expectation does not]. In a Bayesian framework, a choice advocated by Gelfand and Dey is to take α=π, the prior density. This leads to
α(x)g(x)=1(x)
where (x) is the likelihood function, since g(x)=π(x)(x). Unfortunately, the resulting estimator
N^=ni=1n1/(xi)
is the harmonic mean estimator, also called the worst Monte Carlo estimator ever by Radford Neal, from the University of Toronto. So it does not always work out nicely. Or even hardly ever.

Your idea of using the range of your sample (min(xi),max(xi)) and the uniform over that range is connected with the harmonic mean issue: this estimator does not have a variance if only because because of the exp{x2} appearing in the numerator (I suspect it could always be the case for an unbounded support!) and it thus converges very slowly to the normalising constant. For instance, if you rerun your code several times, you get very different numerical values after 10⁶ iterations. This means you cannot even trust the magnitude of the answer.

A generic fix to this infinite variance issue is to use for α a more concentrated density, using for instance the quartiles of your sample (q.25(xi),q.75(xi)), because g then remains lower-bounded over this interval.

When adapting your code to this new density, the approximation is much closer to 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

We discuss this method in details in two papers with Darren Wraith and with Jean-Michel Marin.

Xi'an
la source