Greetings I have been experimenting with sampling from posterior distributions using R. Assume that I have the following observations from a normal distribution, with an unscaled joint likelihood function: normsamples = rnorm(1000,8,3) joint_likelihood = function(observations, mean, sigma){ return((sigma ^ (-1 * length(observations))) * exp(-0.5 * sum( ((observations - mean ) ^ 2)) / (sigma ^ 2) )); } the joint likelihood omits the constant (1/(2Pi)^n), which is what I want, because I've been experimenting with some crude sampling methods. The problem is, with the samples above, the joint likelihood becomes 0 very quickly. I wanted to experiment with tens of thousands of observations, but without an implementation of a transformation that can handle very small values, my sampling algorithms would not work. This is an attempt to use some sampling algorithms for Bayesian parameter estimation. I do not want to resort to conjugacy, since I am developing this to handle non conjugate scenarios, I just wanted to test it on a conjugate scenario, but I've quickly realized that I'm in trouble due to likelihood reaching 0 quickly. Your feedback would be appreciated. It makes me wonder how JAGS/BUGS handles this problem Best regards Seref [[alternative HTML version deleted]]
Nordlund, Dan (DSHS/RDA)
2011-Oct-17 17:15 UTC
[R] Best practices for handling very small numbers?
> -----Original Message----- > From: r-help-bounces at r-project.org [mailto:r-help-bounces at r- > project.org] On Behalf Of Seref Arikan > Sent: Monday, October 17, 2011 9:11 AM > To: r-help at r-project.org > Subject: [R] Best practices for handling very small numbers? > > Greetings > I have been experimenting with sampling from posterior distributions > using > R. Assume that I have the following observations from a normal > distribution, > with an unscaled joint likelihood function: > > normsamples = rnorm(1000,8,3) > > joint_likelihood = function(observations, mean, sigma){ > return((sigma ^ (-1 * length(observations))) * exp(-0.5 * sum( > ((observations - mean ) ^ 2)) / (sigma ^ 2) )); > } > > the joint likelihood omits the constant (1/(2Pi)^n), which is what I > want, > because I've been experimenting with some crude sampling methods. The > problem is, with the samples above, the joint likelihood becomes 0 very > quickly. > I wanted to experiment with tens of thousands of observations, but > without > an implementation of a transformation that can handle very small > values, my > sampling algorithms would not work. > > This is an attempt to use some sampling algorithms for Bayesian > parameter > estimation. I do not want to resort to conjugacy, since I am developing > this > to handle non conjugate scenarios, I just wanted to test it on a > conjugate > scenario, but I've quickly realized that I'm in trouble due to > likelihood > reaching 0 quickly. > > Your feedback would be appreciated. It makes me wonder how JAGS/BUGS > handles > this problem > > Best regards > Seref >Maybe you should work with the log-likelihood? Hope this is helpful, Dan Daniel J. Nordlund Washington State Department of Social and Health Services Planning, Performance, and Accountability Research and Data Analysis Division Olympia, WA 98504-5204