r - 需要有关 R 中 MCMC 估计的建议

标签 r estimation mcmc

假设随机变量 X ∼ N(μ,σ2) 分布
我得到了观察结果 x =(0.7669, 1.6709, 0.8944, 1.0321, 0.0793, 0.1033, 1.2709, 0.7798, 0.6483, 0.3256)
给定先验分布 μ ∼ N(0, (100)^2) 和 σ2 ∼ Inverse − Gamma(5/2, 10/2)。
我正在尝试对参数进行 MCMC 估计。
这是我的示例代码,我尝试使用 Random Walk MCMC 进行估计,但似乎没有收敛:

x = c(0.7669,1.6709,0.8944, 1.0321, 0.0793, 0.1033, 1.2709, 0.7798, 0.6483, 0.3256)
mu.old = rnorm(1,0,100); #initial guess for mu
alpha = 5/2;beta = 10/2
sigma.old = sqrt(rinvgamma(1, shape = alpha, scale = 1/beta)) #initial guess for sigma
burn.in = 50000
rep = 100000
acc = 0

lik.old = sum(dnorm(x,mu.old,sd = sigma.old),log = T)
res = c(mu.old,sigma.old,lik.old)
for (i in (1:rep)){
  mu.new = mu.old + rnorm(1,0,10)
  sigma.new = sigma.old + rnorm(1,0,10)
  if ((mu.new <=0)||sigma.new <= 0){
    res = rbind(res,c(mu.old,sigma.old,lik.old))
  }
  else{
    lik.new = sum(dnorm(x,mu.new,sigma.new,log = T))
    r = exp(lik.new - lik.old)
    u = runif(1,0,1)
    if (u<r){
      res = rbind(res,c(mu.new,sigma.new,lik.new))
      mu.old = mu.new
      sigma.old = sigma.new
      lik.old = lik.new
      acc = acc + 1
    }
    else{
      res = rbind(res,c(mu.old,sigma.old,lik.old))
    }
  }
  if (i %% 10000 == 0){
    plot(res[,1],type = 'l')
  }
}
有人可以就如何找到更好的 MCMC 方法提出建议吗?

最佳答案

代码有几个问题。

  • 您计算对数似然,但忽略对数先验。如此有效地您正在使用统一的先验,而不是您指定的那个。
  • 对数似然的初始计算在错误的地方有括号:
    sum(dnorm(x,mu.old,sd = sigma.old),log = T)
    
    最后一个参数应该是 log = TRUE ,内dnorm()打电话,不在外面。 (避免将 T 用于 TRUE 。键入时节省 3 个字符是不值得的。)
  • 使用 rbind()发展您的 res阵列很慢。最好提前分配整个事情,并将结果分配给特定的行,例如
    # initialize
    res <- matrix(NA, nrow = reps, ncol = 3)
    
    # in the loop
    res[i,] <- c(mu.old,sigma.old,lik.old)
    
  • 关于r - 需要有关 R 中 MCMC 估计的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69924551/

    相关文章:

    R ggplot多列按相似列名分面

    r - 使用 ff 包中的 ffsave 和 ffload

    performance - 预测在高负载项目上安装 LESS、CSS3PIE 的后果

    tdd - 使用 TDD 进行项目实现估算

    python - 使用 solvePnPRansac 函数时出错

    r - 是否可以在多个内核上使用 JAGS 运行多个链(分割链)

    python - Python 中网格数据的 PolarColor map 绘图

    r - 使用 bigmemory 和 irlba 对大矩阵进行 SVD 的问题

    python - 使用pymc在Python中进行内存溢出

    python - 在不是来自 pymc 的样本上使用 pymc 诊断和后验总结