R gamma先验贝叶斯简单线性回归Gibbs抽样
请帮帮我 我在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之后) 这是我的密码: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 =
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]
....}
yR
中所有与分布相关的函数都有一个log
(或log.p
)参数,该参数返回所需数量的对数,并且可以处理更大范围的值。这只是对最后几行的评论;我没有检查密码。我猜你的问题属于统计,而不是编程。