考虑一个具有均值和方差τ的单变量正态模型。假设我们对µ使用 Beta(2,2) 先验(不知何故,我们知道 µ 在 0 和 1 之间),对τ使用对数正态 (1,10)先验(回想一下,如果随机变量X是对数正态( m,v)那么log X是N(m,v))。先验假设µ和τ是独立的。实施 Metropolis-Hastings 算法来评估µ和τ的后验分布。请记住,您必须共同接受或拒绝µ和τ. 大于 0.5的后验概率。
以下是数据:
2.3656491 2.4952035 1.0837817 0.7586751 0.8780483 1.2765341
1.4598699 0.1801679 -1.0093589 1.4870201 -0.1193149 0.2578262
尝试:(这里输入我的数据)
mu <- rbeta(1,2,2)
tau <- rlnorm(1,1,10)
x <-
c(2.3656491, 2.4952035, 1.0837817, 0.7586751, 0.8780483, 1.2765341,
1.4598699, 0.1801679, -1.0093589, 1.4870201, -0.1193149, 0.2578262)
这是网上找到的MH算法。我不确定如何将上述数据应用于它。
# starting point
a0 <- -5
b0 <- -10
# length of chain
nit <- 1000
a <- rep(0,nit)
b <- rep(0,nit)
# initialize
a[1] <- a0
b[1] <- b0
# tuning parameter
s0 <- 2.0 # maximum step size in random walk proposal
# function. try different s0, e.g., 0.1, 1.0, 2.0
# start chain
counter = 0 # monitor number of acceptances.
for( i in 1:nit) {
s <- s0*runif(1)
theta<-2*3.1415926*runif(1)
anew <- a[i] + s*cos(theta) # random walk
bnew <- b[i] + 2*s*sin(theta) # random walk
r <- pdf(anew,bnew)/pdf(a[i],b[i])# acceptance ratio
test <- runif(1)
if(test < r ) # accept proposed moved.
{
a[i+1] <- anew
b[i+1] <- bnew
counter = counter + 1;
}
else # reject proposed move, stay put.
{
a[i+1] <- a[i]
b[i+1] <- b[i]
}
}
# acceptance rate =
counter /nit