Suponha que eu tenho uma função g(x) que desejo integrar
∫∞−∞g(x)dx.
Obviamente, assumindo que
g(x) chega a zero nos pontos finais, sem explosões, boa função. Uma maneira com a qual estou brincando é usar o algoritmo Metropolis-Hastings para gerar uma lista de amostras
x1,x2,…,xn partir da distribuição
proporcional a
g(x), que está faltando a constante de normalização
N=∫∞−∞g(x)dx
que chamarei de
p(x) e, em seguida, calculando alguma estatística
f(x) nesses
x 's:
1n∑i=0nf(xi)≈∫∞−∞f(x)p(x)dx.
Como p(x)=g(x)/N , posso substituir em f(x)=U(x)/g(x) para cancelar g da integral, resultando em uma expressão da forma
1N∫∞−∞U(x)g(x)g(x)dx=1N∫∞−∞U(x)dx.
Portanto, desde que
U(x)integre a
1ao longo dessa região, eu deveria obter o resultado
1/N, que eu poderia usar de maneira recíproca para obter a resposta que eu queria. Portanto, eu poderia pegar o intervalo da minha amostra (para usar os pontos da maneira mais eficaz)
r=xmax−xmine deixar
U(x)=1/rpara cada amostra que desenhei. Dessa forma
avalia como zero fora da região onde minhas amostras não estão, mas integra-se a
1 nessa região. Portanto, se eu pegar agora o valor esperado, devo obter:
E [ U ( x )U(x)1E[U(x)g(x)]=1N≈1n∑i=0nU(x)g(x).
Eu tentei testar isso em R para a função de exemplo . Nesse caso, eu não uso Metropolis-Hastings para gerar as amostras, mas uso as probabilidades reais para gerar amostras (apenas para testar). Não recebo os resultados que estou procurando. Basicamente, a expressão completa do que eu estaria calculando é:
1g(x)=e−x2rnorm
Na minha teoria, isso deve avaliar para1/√
1n(xmax−xmin)∑i=0n1e−x2i.
. Chega perto, mas certamente não converge da maneira esperada, estou fazendo algo errado?
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
Editar para CliffAB
A razão pela qual eu uso o intervalo é apenas para definir facilmente uma função que não seja zero na região onde estão meus pontos, mas que se integra a no intervalo [ - ∞ , ∞ ] . A especificação completa da função é:
U ( x ) = { 11[−∞,∞]
Não precisei usarU(x)como essa densidade uniforme. Eu poderia ter usado alguma outra densidade integrada a1, por exemplo, a densidade de probabilidade
P(x)=1
U(x)={1xmax−xmin0xmax>x>xminotherwise.
U(x)1
No entanto, isso tornaria a soma das amostras individuais trivial, ou seja,
1P(x)=1π−−√e−x2.
1n∑i=0nP(x)g(x)=1n∑i=0ne−x2i/π−−√e−x2i=1n∑i=0n1π−−√=1π−−√.
Eu poderia tentar essa técnica para outras distribuições que se integram ao . No entanto, eu ainda gostaria de saber por que ele não funciona para uma distribuição uniforme.1
Respostas:
Essa é uma questão mais interessante, que se relaciona à questão de aproximar uma constante normalizadora de uma densidade base em uma saída MCMC da mesma densidade g . (Uma observação paralela é que a suposição correta a ser feita é que g é integrável, chegar a zero no infinito não é suficiente.)g g g
Na minha opinião, a entrada mais relevante sobre esse tópico em relação à sua sugestão é um artigo de Gelfand e Dey (1994, JRSS B ), onde os autores desenvolvem uma abordagem muito semelhante para encontrar ao gerar a partir de p ( x ) ∝ g ( x ) . Um resultado deste artigo é que, para qualquer densidade de probabilidade α ( x ) [isso é equivalente ao seu U ( x ) ], tal que { x ; α ( x ) > 0 } ⊂ { x ; g ( x ) > 0 } a seguinte identidade ∫ X α ( x )
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.
fonte