r - 在 R 中使用 MCMC Metropolis-Hastings 算法对多维度后验分布进行采样

标签 r statistics bayesian sampling mcmc

我在使用基于 Metropolis-Hastings 算法的 MCMC 技术对后验分布进行采样(因此是贝叶斯方法)方面很新。
为此,我在 R 中使用了 mcmc 库。我的分布是多维的。为了检查这个metro算法是否适用于多元分布,我在一个多维student-t分布(包mvtnorm,函数dmvt)上成功地做到了。
现在我想对我的多元分布(2 个变量 x 和 y)应用同样的东西,但它不起作用;我收到一个错误:X[, 1] 中的错误:维数不正确

这是我的代码:

library(mcmc)
library(mvtnorm)
my.seed <- 123

logprior<-function(X,...)
{
      ifelse( (-50.0 <= X[,1] & X[,1]<=50.0) & (-50.0 <= X[,2] & X[,2]<=50.0), return(0), return(-Inf))
}

logpost<-function(X,...)
{
      log.like <- log( exp(-((X[,1]^2 + X[,2]^2 - 4)/10 )^2) * sin(4*atan(X[,2]/X[,1])) )
      log.prior<-logprior(X)
      log.post<-log.like + log.prior # if flat prior, the posterior distribution is the likelihood one
      return (log.post)
}

x <- seq(-5,5,0.15)
y <- seq(-5,5,0.15)
X<-cbind(x,y)

#out <- metrop(function(X) dmvt(X, df=3, log=TRUE), 0, blen=100, nbatch=100) ; this works
out <- metrop(function(X) logpost(X), c(0,0), blen=100, nbatch=100)
out <- metrop(out)
out$accept 

所以我试图尊重与 MWE 相同的格式,但它仍然不起作用,因为我得到了前面提到的错误。
另一件事是,将 logpost 应用于 X 效果很好。

预先感谢您的帮助,最好

最佳答案

metrop函数传递单个样本,因此是一个简单的向量到 logpost ,不是矩阵(这就是 X 是什么)。因此,解决方案是更改 X[,1]X[,2]X[1]X[2] , 分别。

我是这样运行的,它会导致其他问题( X[2]/X[1] 是 NaN 用于初始化),但这与您的特定似然模型有更多关系,超出了您的问题范围。

关于r - 在 R 中使用 MCMC Metropolis-Hastings 算法对多维度后验分布进行采样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37947127/

相关文章:

r - R 中 a 规则的子集 lhs 长度

stat_poly_eq 中的 R 科学记数法

neural-network - pymc 3's NUTS can' t 在我的贝叶斯神经网络分层模型中表现良好吗?

r - R 中意外的 PCA 分数

r - 如何在 R markdown 中将当前文件位置设置为工作目录?

statistics - cov(A,mean=0) 给出 InexactError

python - Scipy 多元正常 : How to draw deterministic samples?

recursion - f# - 峰度的递归公式

r - 如何加快具有大数据图(例如跟踪图)的 PDF 页面的滚动速度

search - 人工定向搜索