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:
1n∑i=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
1N∫∞−∞U(x)g(x)g(x)dx=1N∫∞−∞U(x)dx.
Donc, à condition que
U(x)s'intègre à
1long de cette région, je devrais obtenir le résultat
1/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=xmax−xminet laisser
U(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)1E[U(x)g(x)]=1N≈1n∑i=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)=e−x2rnorm
Cela devrait dans ma théorie évaluer à1/√
1n(xmax−xmin)∑i=0n1e−x2i.
. 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)={1xmax−xmin0xmax>x>xminotherwise.
U(x)1
Cependant, cela aurait rendu la somme des échantillons individuels triviale, c'est-à-dire
1P(x)=1π−−√e−x2.
1n∑i=0nP(x)g(x)=1n∑i=0ne−x2i/π−−√e−x2i=1n∑i=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
Réponses:
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 to1/π−−√ :
We discuss this method in details in two papers with Darren Wraith and with Jean-Michel Marin.
la source