Python 化学网络的贝叶斯分析

Python 化学网络的贝叶斯分析,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,

我试着做一个简单的反应网络,看看反应速率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,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。仍然感谢您的帮助。

添加了错误