Integração Metropolis-Hastings - por que minha estratégia não está funcionando?

16

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:
1ni=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

1NU(x)g(x)g(x)dx=1NU(x)dx.
Portanto, desde queU(x)integre a1ao longo dessa região, eu deveria obter o resultado1/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=xmaxxmine deixarU(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)1
E[U(x)g(x)]=1N1ni=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)=ex2rnorm Na minha teoria, isso deve avaliar para1/

1n(xmaxxmin)i=0n1exi2.
. 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)={1xmaxxminxmax>x>xmin0otherwise.
U(x)1 No entanto, isso tornaria a soma das amostras individuais trivial, ou seja, 1
P(x)=1πex2.
1ni=0nP(x)g(x)=1ni=0nexi2/πexi2=1ni=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

Mike Flynn
fonte
Olhando rapidamente para isso, não sei exatamente por que você decidiu usar o intervalo (x). Condicionalmente válido, é extremamente ineficiente! O intervalo de uma amostra desse tamanho é praticamente a estatística mais instável que você pode obter.
Cliff AB
@CliffAB Não há nada de especial em usar o intervalo, além de definir uma distribuição uniforme no intervalo em que estão meus pontos. Veja edições.
Mike Flynn
1
Veremos isso mais adiante com mais detalhes. Mas algo a considerar é que, como se x é um conjunto de RVs uniformes, então como , intervalo ( x ) 1 . Mas se x é um conjunto de RVs normais não degenaratos, então como n , alcance ( x ) . n(x)1nrange(x)
Cliff AB
@CliffAB você pode estar certo, acho que o motivo foi que os limites da integral não foram fixados e, portanto, a variação do estimador nunca convergirá ...
Mike Flynn

Respostas:

13

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.)ggg

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 )

Xg(x)dx
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
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
fonte