R gamma先验贝叶斯简单线性回归Gibbs抽样

R gamma先验贝叶斯简单线性回归Gibbs抽样,r,R,请帮帮我 我在Gibbs中使用Metopolis_hasting生成一个马尔可夫链,其平稳分布等于给定观测y的(β,φ)的联合条件分布。其中y的模型为简单线性回归,φ为1/sigma^2。phi的完整条件分布是gamma(shape=shape_0+n/2,rate=rate_0+0.5*sum((y$y-b[1]-b[1]*y$x)^2)),其中shape_0和rate_0是phi的先验分布(在gamma之后) 这是我的密码: y <- read.table("...",header =

请帮帮我

我在Gibbs中使用Metopolis_hasting生成一个马尔可夫链,其平稳分布等于给定观测y的(β,φ)的联合条件分布。其中y的模型为简单线性回归,φ为1/sigma^2。phi的完整条件分布是gamma(shape=shape_0+n/2,rate=rate_0+0.5*sum((y$y-b[1]-b[1]*y$x)^2)),其中shape_0和rate_0是phi的先验分布(在gamma之后)

这是我的密码:

y <- read.table("...",header = T)
n <- 50
shape_0 <- 10
rate_0 <- 25


  shape <- shape_0+n/2

   mcmc <- function (n = 10){
       X <- matrix(0,n,3)
       b <- c(5,2)
       phi <- 0.2 
       X[1,] <- c(b,phi)
       count1 <- 0
       count2 <- 0
      for (i in 2:n){

      phi_new <- rnorm(1,phi,1) #generate new phi candidate 
      rate <- rate_0 + 0.5*sum((y$y-b[1]-b[1]*y$x)^2)

      prob1 <- min(dgamma(phi_new,shape = shape, 
       rate =   rate)/dgamma(phi,shape = shape, rate = rate),1)
      ##here is where I run into trouble, dgamma(phi_new,shape = shape, 
       ##rate =   rate) 
       ##and dgamma(phi,shape = shape, rate = rate) both gives 0

     u <- runif(1)
      if (prob1>u)
      {X[i,3] <- phi_new; count1=count1+1}
        else  {X[i,3] <-phi}

       phi <- X[i,3]

 ....}

y
R
中所有与分布相关的函数都有一个
log
(或
log.p
)参数,该参数返回所需数量的对数,并且可以处理更大范围的值。这只是对最后几行的评论;我没有检查密码。我猜你的问题属于统计,而不是编程。