One aspect of the LearnBayes package that I’ve been uncomfortable with is the use of loops in my definition of the functions defining log posteriors. I had a reason for using the loops (the theta argument to the function could be a matrix), but it is generally bad programming practice. The worst aspect of the looping is that it makes the process of a writing a posterior more difficult than it really is. Looping is bad from the user’s perspective. After all, we are teaching statistics not programming, and I want to encourage people to code the posteriors for their problems using R.
Here is a simple example. Suppose your model is that y1,…, yn are independent Cauchy with location mu and scale sigma. The log posterior is given by
log g = sum (log f),
where log f is the log of the Cauchy density conditional on parameters. My old way of programming the posterior had the loop
for (i in 1:length(data))
val = val + log(dt((data[i] – mu)/sigma, df = 1)/sigma)
I think this new way is preferable. First you define the function logf for a single observation y:
Then the log posterior is given by
Anyway, I think that by avoiding loops, the function for the log posterior becomes more transparent.
The new version of the LearnBayes package will contain fewer loops.