(这个问题最初发布在stats.O。我把它移到这里是因为它确实与pymc
有关,而且其中包含更多一般性问题:事实上,主要目的是更好地理解{{1}如果任何主持人认为它不适合SO,我会从这里删除。)
我在这里和在SO中都在阅读pymc tutorial和许多其他问题。
我想了解如何应用贝叶斯'定理使用某些数据计算后验概率。特别是,我有一个独立参数元组
根据数据,我想推断出的可能性,其中是某个特定事件。然后目标是计算
其他一些评论:
pymc
计算给定数据的可能性,然后计算每个参数元组我想得到后验概率在下文中,我假设并且可能性是具有的多维正态分布(由于独立性)。
以下是我使用的代码(为简单起见,假设只有两个参数)。代码仍处于开发阶段(我知道它无法正常工作!)。但我认为包含它是有用的,然后在注释和答案之后对其进行优化,以便为将来的参考提供框架。
pymc
问题如下:
class ObsData(object):
def __init__(self, params):
self.theta1 = params[0]
self.theta2 = params[1]
class Model(object):
def __init__(self, data):
# Priors
self.theta1 = pm.Uniform('theta1', 0, 100)
self.theta2 = pm.Normal('theta2', 0, 0.0001)
@pm.deterministic
def model(
theta1=self.theta1,
theta2=self.theta2,
):
return (theta1, theta2)
# Is this the actual likelihood?
self.likelihood = pm.MvNormal(
'likelihood',
mu=model,
tau=np.identity(2),
value=data, # is it correct to put the data here?
observed=True
)
def mcmc(observed_data):
data = ObsData(observed_data)
pymc_obj = Model(data)
model = pymc.MCMC(pymc_obj)
model.sample(10000, verbose=0) # Does this line compute the likelihood and the normalisation factor?
# How do I get the posterior distribution?
代表贝叶斯似然吗?self.likelihood
不正确..)value=data
是否实际计算后验概率?.sample()
仅计算给定数据和先验的可能性?欢迎任何评论,以及其他问题或教程的参考!
答案 0 :(得分:1)
首先,我想你想从你的模型定义中返回(theta1 * theta2)。
model.sample是给定数据的参数,而不是计算,后验分布(给定足够的老化等),并且每个参数元组的特定值的可能性可以从后面的联合后验确定。采样。
我认为您目前对MCMC存在一些根本性的误解。我无法想出一个更好的方式回答你的问题,而不是指向你的精彩Bayesian Methods for Hackers