我正在尝试使用“ a”作为参数之一进行MCMC。只要a的建议值的pdf不为零,即可从均匀分布(a-delta,a + delta)中随机获得'a'的建议值。这是我编写的代码的测试。
from scipy.stats import uniform
import numpy as np
prior_a= uniform(1,79)
delta = 5
a_current = 40
all_a = []
for i in range(1,1000):
a_proposal = np.random.uniform(a_current-delta, a_current+delta)
while prior_a.pdf(a_proposal)<0:
a_proposal = np.random.uniform(a_current-delta, a_current+delta)
a_current = a_proposal
all_a.append(a_current)
print(max(all_a))
print(min(all_a))
原则上,a_current的最大值不应大于80或小于1(因为x小于1或大于80的a.pdf(x)将为0)。但是,当我多次运行此代码时,经常会得到一个大于80或小于1的值。
我不确定是怎么回事。