Model Selection – How to Calculate Weights in ABC-SMC for Bayesian Computation?

approximate-bayesian-computationmodel selectionmonte carlosequential-monte-carlo

I have been reading through the Tutorial on ABC rejection and ABC SMC for parameter estimation and model selection by Tina Toni and Michael P. H. Stumpf.
I can't work out how to calculate the weights for the SMC approach. Could anyone run through this step by step example to help me understand?

For t=0 Say I take a sample from a prior distribution based on uniform[1,3]

2.879864 2.684748 1.889464 2.945675 2.097058 1.003143 2.514226 2.242223 1.594360 2.764085 2.787965 1.052775 1.320575
2.108242 1.740970 2.214639 1.501381 2.234161 2.194186 1.331659

I then use these values to run some simulations and using a tolerance of 50% with a standard abc rejection method keep the following:

1.889464 1.003143 1.594360 1.052775 1.320575 1.740970 1.501381 1.331659 2.194186 2.097058

I add a bit of noise to each of these values using a Gaussian random walk:

1.9020030 0.9874041 1.6011953 1.0711497 1.2948880 1.7577606 1.5704593 1.3434156 2.2347718 2.1125749

How do I weight these in order to use them on a second set of simulations?

Best Answer

If you read the reference [4] in the tutorial, you can see a very detailed description of the ABC-SMC algorithm:

enter image description here

At the first iteration, the weights are all equal to one. At later iterations, because a new proposal which is a mixture of $K_t$ kernels is used instead of the prior, the weights are the ratios of the prior values to the mixtures values, as explained in S2.2.

There are several R packages implementing ABC-SMC, including easyABC, which, as an R package, should be easy (!) enough to install & experimen with.

Simply type install.packages("EasyABC") from within R.

There is for instance an ABC_sequential function that covers several sequential methods, including the one we proposed in Beaumont et al. (2009):

> ABC_Beaumont<-ABC_sequential(method="Beaumont", model=toy_model,
+ prior=toy_prior, nb_simul=n, summary_stat_target=sum_stat_obs,
+ tolerance_tab=tolerance)

"Method must be Beaumont, Drovandi, Delmoral, Lenormand or Emulation"
Related Question