我正在运行一个MCMC算法,Metropolis Hastings步骤R
,它需要根据逻辑规则接受或拒绝提案示例。目前,我已经实现这个作为为了提高MCMC算法的性能,if语句有哪些替代方法?
if(sample meets condition){accept}
else{reject}
听说if
语句是缓慢的,但MCMC通常需要很多评估建议的样本,在数万肯定。什么是更快的替代方法来提高任何MCMC算法的这部分速度?
为了让在该代码的步骤的一个例子:
A = sample(c(0,1),1,prob=c(1-A,A))
if(A==1){
s_acc[i,] = s_new
s_old = s_new
acc[i] = 1
}
else{
s_acc[i,] = s_old
acc[i] = 0
}
其中A
是样品的接受概率,s_new
是所提出的样本的值,s_acc
是所有接受样品的载体, s_old
是以前接受的样本,acc
是接受哪些样本的计数。这部分代码嵌入在for
循环中,迭代次数很多。
只是在那里抛出一个想法...如果你有一种方法将你的条件转换为数值,你可以使用已知好值的字典/散列表。根据它是否存在于已知好的集合中来接受或拒绝。您可以使用与用于评估运行时值相同的代码预先评估所有“良好”选项,从而在启动时构建已知好的列表。 – theGleep