Jea*_*ine 5 statistics r 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
Run Code Online (Sandbox Code Playgroud)
所以我试图尊重与 MWE 相同的格式,但它仍然不起作用,因为我得到了前面提到的错误。另一件事是,将 logpost 应用于 X 效果很好。
预先感谢您的帮助,最好
该metrop函数将各个样本传递给 ,因此将一个简单的向量传递给logpost,而不是矩阵(这就是矩阵X)。因此,解决方案是将X[,1]和分别更改X[,2]为X[1]和X[2]。
我这样运行它,它会导致其他问题(X[2]/X[1]初始化为 NaN ),但这与您的特定可能性模型有更多关系,并且超出了您的问题范围。
| 归档时间: |
|
| 查看次数: |
309 次 |
| 最近记录: |