Bayseian + Pymc。如何在pymc中定义模型时调用集成

时间:2015-05-25 23:34:27

标签: python bayesian pymc mcmc

enter image description here我是pymc的新手。我在代码中定义模型时遇到了困难。 模型涉及步长的整合。我很困惑,因为我不知道我是否可以将一个函数定义为具有来自数据和均匀随机数的变量的确定性函数(H(Hubble常数)和O(某些常数)))。我在互联网上找到的所有例子,在那些例子模型中只涉及线性或者不需要调用或定义函数的东西。我知道python的范围,以便我可以在不使用pymc的情况下解决这个问题但是如果我不能在pymc中这样做,那将是多么有趣。我正在尝试通过阅读可用的代码来学习,但是没有很好的解释我现在太困惑了。

"这是错误"

import matplotlib.pyplot as plt
import numpy as np
from scipy import integrate
import pymc



# Create some convenience routines for plotting
#@pymc.stochastic(observed=True)
z_true,u_true,deltau_true=np.loadtxt('sn_data.dat',usecols=(1,2,3),unpack=True)
sigma_true=np.power(deltau_true,-2)
#print('1',len(z_true),len(u_true))
H=pymc.Uniform('H',40.0,100.0)
O=pymc.Uniform('O',0.13,0.32)
@pymc.deterministic   
def fun(z=z_true,o=O):#this is integrand for model 
    nd=3.0*(10**5)/(np.sqrt( (1-o)+o*(1+z)**3))
    return(nd) 
@pymc.deterministic    
def y_model(z=z_true,a=H,b=O ): # this is my model like in on line examples (y=mx+c kind of )
    nd1=(1+z)*integrate.quad(fun,0,z,b)/a
    return(5*np.log(nd1)+25) 

    
@pymc.stochastic(plot=False)
def tau(c=deltau_true):
    return (np.power(c,-2))    
    
data=pymc.Normal('data',mu=y_model,sigma=sigma_true,value=u_true,observed=True)    
sampler=pymc.MCMC(data)

sampler = pymc.MCMC([H,O,y_model,tau,u_true,z_true])
sampler.use_step_method(pymc.AdaptiveMetropolis, [H,O])
sampler.sample(iter=10000)    
pymc.Matplot.plot(sampler)
plt.show()



{{1}}




1 个答案:

答案 0 :(得分:0)

你的模特究竟有什么不适用的?你的问题并不清楚。一个问题是你的tau随机函数没有value参数,这是必需的。