Python 化学网络的贝叶斯分析
我试着做一个简单的反应网络,看看反应速率k1和k2的灵敏度。所以我的反应分别是A-->B-->C和k1和k2Python 化学网络的贝叶斯分析,python,statistics,bayesian,Python,Statistics,Bayesian,我试着做一个简单的反应网络,看看反应速率k1和k2的灵敏度。所以我的反应分别是A-->B-->C和k1和k2 import numpy as np import pymc3 as pm from matplotlib.pyplot import figure, scatter, legend, plot from scipy.integrate import solve_ivp from sys import exit Nt = 11 time = 10 tt = np.linspace(0,
import numpy as np
import pymc3 as pm
from matplotlib.pyplot import figure, scatter, legend, plot
from scipy.integrate import solve_ivp
from sys import exit
Nt = 11
time = 10
tt = np.linspace(0,time,Nt+1)
y0 = [1,0,0]
k1_0, k2_0 = 1, 0.5
def equat(t,c):
da_dt = -k1_0*c[0]
db_dt = k1_0*c[0] - k2_0*c[1]
dc_dt = k2_0*c[1]
return da_dt, db_dt, dc_dt
c_est = solve_ivp(equat, t_span = [0,time], t_eval = tt, y0 = y0)
niter = 10
with pm.Model() as reak_model:
k1 = pm.Normal('k1', mu = 0, sd = 100)
k2 = pm.Normal('k2', mu=0, sd=100, shape = 1)
sigma = pm.HalfNormal('sigma', sd=1)
def equat_2(t,c):
da_dt = -k1*c[0]
db_dt = k1*c[0] - k1*c[1]
dc_dt = k1*c[1]
return da_dt, db_dt, dc_dt
c = solve_ivp(equat_2, t_span = [0,time], t_eval = tt, y0 = y0)
likelihood = pm.Normal('y', mu=c.y, sd=sigma, observed=c_est.y)
trace = pm.sample(niter, chains = 1)
pm.traceplot(trace, varnames=['k1','k2'])
ValueError: setting an array element with a sequence.
我得到这个错误。因为我是贝叶斯的新手,我想知道它是否和分布有关
Traceback (most recent call last):
File "<ipython-input-95-26ff8f25faea>", line 1, in <module>
runfile('/Daft regresion.py', wdir='/Final code')
File "/python3.7/site-packages/spyder_kernels/customize/spydercustomize.py", line 786, in runfile
execfile(filename, namespace)
File "python3.7/site-packages/spyder_kernels/customize/spydercustomize.py", line 110, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "Daft regression.py", line 53, in <module>
c = solve_ivp(equat_2, t_span = [0,time], t_eval = tt, y0 = y0)
File "/python3.7/site-packages/scipy/integrate/_ivp/ivp.py", line 454, in solve_ivp
solver = method(fun, t0, y0, tf, vectorized=vectorized, **options)
File "/python3.7/site-packages/scipy/integrate/_ivp/rk.py", line 99, in __init__
self.f = self.fun(self.t, self.y)
File "/python3.7/site-packages/scipy/integrate/_ivp/base.py", line 139, in fun
return self.fun_single(t, y)
File "/python3.7/site-packages/scipy/integrate/_ivp/base.py", line 21, in fun_wrapped
return np.asarray(fun(t, y), dtype=dtype)
File "/python3.7/site-packages/numpy/core/numeric.py", line 501, in asarray
return array(a, dtype, copy=False, order=order)
ValueError: setting an array element with a sequence.
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
运行文件('/Daft regresion.py',wdir='/Final code')
文件“/python3.7/site-packages/spyder_-kernels/customize/spyderrcustomize.py”,第786行,在runfile中
execfile(文件名、命名空间)
文件“python3.7/site packages/spyder_kernels/customize/spydercustomize.py”,第110行,在execfile中
exec(编译(f.read(),文件名,'exec'),命名空间)
文件“Daft regression.py”,第53行,在
c=求解ivp(等式2,t_span=[0,时间],t_eval=tt,y0=y0)
文件“/python3.7/site packages/scipy/integrate/_ivp/ivp.py”,第454行,在solve_ivp中
解算器=方法(乐趣、t0、y0、tf、矢量化=矢量化,**选项)
文件“/python3.7/site packages/scipy/integrate/_ivp/rk.py”,第99行,在__
self.f=self.fun(self.t,self.y)
文件“/python3.7/site packages/scipy/integrate/_ivp/base.py”,第139行,in fun
回归自我。快乐单身(t,y)
文件“/python3.7/site packages/scipy/integrate/_ivp/base.py”,第21行,用fun_包装
返回np.asarray(fun(t,y),dtype=dtype)
asarray中的文件“/python3.7/site packages/numpy/core/numeric.py”,第501行
返回数组(a,数据类型,copy=False,order=order)
ValueError:使用序列设置数组元素。
编辑:显然我需要实现Theano包而不是solve_ivp。仍然感谢您的帮助。添加了错误