trying to speed up Metropolis… and failing!
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
A while ago (but still after Iceland since I used the thorn rune as a math symbol!), I wrote the following post draft as a memo. Now that Marco Banterle, Clara Grazian and myself have completed our delayed acceptance paper, it may be of interest to some readers to see how a first attempt proved fruitless.
In the past days, I tried to speed up my student Clara’s code, reducing the number of prior evaluations in a Metropolis-Hastings algorithm by trying to reject proposals with low likelihoods before computing the corresponding prior. (This is one of those rare problems where the prior is the culprit.) My first idea was to start from the case when the new likelihood þ(θ’) was lower than the previous likelihood þ(θ)
þ(θ’) < þ(θ)
as the indicator
ℑ{u≤þ(θ’)/þ(θ)}
is an unbiased estimator of the ratio þ(θ’)/þ(θ) . When u is generated from a uniform U(0,1). (All u’s in this page will be uniform U(0,1), unless otherwise indicated.) Does this mean low values of þ(θ’) can be rejected prior to computing π(θ’)? Unfortunately no, since
ℑ{u≤þ(θ’)/þ(θ)} π(θ’)/ π(θ) ∧ 1
is not an unbiased estimator of
{þ(θ’)/þ(θ)} {π(θ’)/ π(θ)} ∧ 1
Then I considered
{þ(θ’)/þ(θ)} {π(θ’)/ π(θ)} ∧ þ(θ)/þ(θ’)}
which can be associated with the unbiased estimator
ℑ{u≤þ(θ’)/þ(θ)} {π(θ’)/ π(θ) ∧ þ(θ)/þ(θ’)}
Once more unfortunately, since
{π(θ’)/ π(θ) ∧ þ(θ)/þ(θ’)}
is not easily bounded, unless π(θ’)/π(θ) itself is bounded (a self-defeating condition!), generating an unbiased estimator of this second term is not obvious.
Another attempt was to consider an exact approximation à la Andrieu and Roberts (2009, Annals of Stat.), using an unbiased estimator of þ(θ’), namely
ℑ{þ(θ)u≤þ(θ’)} þ(θ) ℑ{þ(θ)>þ(θ’)} + þ(θ’) ℑ{þ(θ)<þ(θ’)}
and to plug this unbiased estimator in the Metropolis-Hastings acceptance ratio,
π(θ’) [ℑ{þ(θ)u’≤þ(θ’)}þ(θ)ℑ{þ(θ)>þ(θ’)} + þ(θ’)ℑ{þ(θ)<þ(θ')}] / π(θ) [ℑ{þ(θ')u≤þ(θ)}þ(θ')ℑ{þ(θ')>þ(θ)} + þ(θ)ℑ{þ(θ)>þ(θ’)}] ∧ 1
which leads to
π(θ’) [ℑ{þ(θ)u’≤þ(θ’)}þ(θ)] / π(θ) þ(θ) ∧ 1 = π(θ’) ℑ{þ(θ)u’≤þ(θ’)} / π(θ) ∧ 1
when þ(θ)>þ(θ’) and to
π(θ’) þ(θ’) / π(θ) ℑ{þ(θ’)u≤þ(θ)}þ(θ’) ∧ 1 = π(θ’) / π(θ) ℑ{þ(θ’)u≤þ(θ)} ∧ 1
otherwise. But this is not correct either. As shown by the above histogram versus target.
#data x~B(N,p) #posterior p|x~Be(x+7.5,N+.5-x) T=10^4 N=100;y=32 a=7.5;b=.5 chk=NULL p=rep(.2,T) for (t in 2:T){ pp=p[t-1]+runif(1,-.1,.1) #random walk p[t]=p[t-1] #by default rejection if ((pp>0)&(pp<1)){ ratio=dbinom(y,N,pp)/dbinom(y,N,p[t-1]) if (ratio<1){ if ((runif(1)<ratio)&(runif(1)< dbeta(pp,a,b)/dbeta(p[t-1],a,b))) p[t]=pp else{ if ((runif(1)*ratio>1)||(runif(1)< dbeta(pp,a,b)/dbeta(p[t-1],a,b))) p[t]=pp} }}
Filed under: R, Statistics, University life Tagged: big data, delayed acceptance, pseudo-marginal MCMC, unbiased estimation
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.