【问题标题】:Metropolis-Hastings algorithm in R: correct results?R中的Metropolis-Hastings算法:正确的结果?
【发布时间】:2016-10-30 12:47:18
【问题描述】:

我的 Metropolis-Hastings 问题有一个平稳的二项分布,并且所有提案分布 q(i,j) 都是 0.5。参考图和直方图,算法是否应该如此清晰地以二项分布的概率0.5为中心?

pi <- function(x, n, p){
# returning value from binomial distribution
    result <- (factorial(n) / (factorial(x) * factorial(n - x))) * 
        p^x * (1 - p)^(n - x)
    return(result)
}


metropolisAlgorithm <- function(n, p, T){
# implementation of the algorithm
# @n,p binomial parameters
# @T number of time steps
    X <- rep(runif(1),T)
    for (t in 2:T) {
        Y <- runif(1)
        alpha <- pi(X[t - 1], n, p) / pi(Y, n, p)
        if (runif(1) < alpha) X[t] <- Y
        else X[t] < X[t - 1]
    }
    return(X)
}

# calling M-H algorithm and plotting result
test <- metropolisAlgorithm(40,0.5,5000)
par(mfrow=c(2,1))
plot(test, type = "l")
hist(test, breaks = 40)

【问题讨论】:

  • 这是一个很好的问题,我什至没有考虑寻找原生函数:/ 感谢您的提示!
  • 当我反复运行您的代码时,我通常看不到您声称的内容。我看到一些东西似乎集中在生成的第一个随机数附近,通常离 0.5 很远。因此,您的实施存在问题。您的提案分布似乎很奇怪。
  • 不应该 X 采用整数值而不是 [0,1] 中的值吗?
  • 试试X &lt;- runif(T) 而不是X &lt;- rep(runif(1),T) ??
  • X[t] &lt; X[t - 1] 应该是 X[t] &lt;- X[t - 1],尽管存在 X 似乎是成功次数的语义问题(在 1:40 中离散),但您正试图通过随机走进[0,1]

标签: r markov-chains


【解决方案1】:

您有 3 个问题:

1) 您似乎想要模拟二项式分布,因此您的随机游走应该在1:n 范围内的整数上,而不是在[0,1] 范围内的实数上。

2) 你在alpha的计算中切换了分子和分母

3) 你在X[t] &lt; X[t - 1] 中有错字。

修复这些问题并稍微清理一下您的代码(包括按照@ZheyuanLi 的建议使用dbinom 函数)产生:

metropolisAlgorithm <- function(n, p, T){
  # implementation of the algorithm
  # @n,p binomial parameters
  # @T number of time steps
  X <- rep(0,T)
  X[1] <- sample(1:n,1)
  for (t in 2:T) {
    Y <- sample(1:n,1)
    alpha <- dbinom(Y,n,p)/dbinom(X[t-1],n,p)
    if (runif(1) < alpha){
      X[t] <- Y
    }else{
      X[t] <- X[t - 1]}
  }
  return(X)
}

# calling M-H algorithm and plotting result
test <- metropolisAlgorithm(40,0.5,5000)
par(mfrow=c(2,1))
plot(test, type = "l")
hist(test) breaks = 40)

典型输出(非常有意义):

【讨论】:

  • 你实际上理解了这个问题,即使我没有正确/完整地呈现它。真是个英雄,非常感谢!
  • @ErikL 纯属巧合,当我看到这篇文章。
  • 巧合造就了。我只是喜欢这个地方的所有拯救尾巴的荣耀:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-23
  • 1970-01-01
  • 1970-01-01
  • 2018-09-29
相关资源
最近更新 更多