Python:如何将内部具有分层功能的ODE系统适合于多个数据

2024-10-01 11:32:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在研究一些生物学数据,利用GFP荧光蛋白和细胞生长数据来模拟细菌系统的行为。基本上,它们是在24小时内测量的两个不同的数据集,我将它们放在两个不同的数据帧中(假设名称为fdataodata

现在,我有一个系统ODE模型,我需要适合这两个数据:

[dGFP] = a + (d + g(OD))[GFP]    #g(OD) is basically another ODE to describe the growth rate
[dOD] = m * (1 - (OD/n)) * OD    #this represents g(OD)

我已经编写了一个Python函数来对增长数据进行参数估计,如下所示:

import pandas as pd
import numpy as np
from scipy.integrate import odeint
from scipy.optimize import curve_fit

odata = df3[df3.columns[col]] #reading growth data
t = list(range(0, len(odata.index)))

def testfunc(t, k1, k2):
    
    def cell_density_model(OD, t, m, n):
        dOD = m * (1 - (OD[0]/n)) * OD[0]
        return dOD
    
    Ca0 = np.abs(odata[0])
    rates = (k1, k2)
    Casol = odeint(cell_density_model, Ca0, t, rates)
    return Casol[:,0]

k_fit, kcov = curve_fit(testfunc, t, odata)
print(k_fit)
fit = testfunc(t, k_fit[0], k_fit[1])

plt.plot(t, odata, '+', label='data')
plt.plot(t, fit, '-', label='fit')
plt.legend(loc='best')
plt.show()

我有一个不同的函数来拟合蛋白质数据(不是工作代码)。我想做的基本上是把它们集成在一起,但我现在知道怎么做了

def fitfunc(t, xa, xd, xCa0):
    
    a = xa
    d = xd
    Ca0 = xCa0
    
    def andGate(y, t):
        
        [GFP] = y
        OD = testfunc(t, amr, amc)       #this seems problematic
        GFP_ = a - (d + OD) * GFP 
        return [GFP_]
    
    Casol = odeint(andGate, Ca0, t)
    return Casol[:,0]

def modelfit(t, xa, xd):
    return fitfunc(t, xa, xd, Ca0)

fdata = df2[df2.columns[col]]    #reading fluorescence data
t = list(range(0, len(fdata.index)))

Ca0 = np.abs(fdata[0])
params, cov = curve_fit(modelfit, t, fdata)
fit = fitfunc(t, *params, Ca0)
print(params)

plt.plot(t, fdata, 'x', label='data')
plt.plot(t, fit, '-', label='fit')
plt.legend(loc='best')
plt.show()

有人知道怎么做吗?我从scipy和{}尝试了{}。我愿意使用不同的库以及Python重写我的函数。任何帮助都将不胜感激。多谢各位


Tags: 数据importdatareturnplotdefpltfit