假设我进行了一个实验,其中数据具有 $Poisson(\lambda)$ 采样密度。我对使用带有参数 $\alpha$ 和 $\beta$ 的 Gamma 先验密度的 $\lambda$ 的不确定性。我还使用独立的 Gamma 先验密度描述了我们关于 $\alpha$ 和 $\beta$ 的不确定性。
我正在尝试实现一个 MCMC 算法来计算 $\lambda$、$\alpha$ 和 $\beta$ 的后验密度。我下面的代码有什么问题?我的接受率为0。
obs <- rpois(50, 5)
m <- 100000
x <- matrix(NA, nrow=m, ncol=3)
x[1,] <- c(5, 1, 1)
accept <- 0
sd1 <- 2
sd2 <- 2
sd3 <- 2
post <- function(lambda, alpha, beta) {
prod(dpois(x, lambda))*dgamma(lambda,
alpha,beta)*dgamma(alpha,1,1)*dgamma(beta,1,1)}
for(i in 2:m){
xc <- c(rnorm(2, x[i-1,1]-sd1,x[i-1,1]+sd1),runif(1,x[i-1,2]-sd2,x[i-
1,2]+sd2), runif(1,x[i-1,3]-sd3, x[i-1,3]+sd3))
if (post(xc[1], xc[2], xc[3])/post(x[i-1,1],x[i-1,2], x[i-1,3]) > runif(1)){
x[i,] <- xc; accept <- accept + 1
} else{
x[i,] <- x[i-1,]
}
}
accept/m