用python编写最大似然函数拟合NTCP中参数TD_50和m的代码,概率函数是标准正态分布
时间: 2024-11-07 11:13:41 浏览: 40
在Python中,我们可以使用`scipy.optimize`库中的`curve_fit`函数来拟合数据点到一个给定的概率分布模型,这里我们假设NTCP(Non-Uniform Type III Cumulative Distribution Function)的概率函数是一个标准正态分布,即均值μ=0,方差σ^2=1。对于两个参数TD_50(半衰期)和m(形状因子),可以这样表示:
```python
import numpy as np
from scipy.optimize import curve_fit
from scipy.stats import norm
# 定义标准正态分布的概率密度函数
def normal_pdf(x, td_50, m):
return (1 / np.sqrt(2 * np.pi)) * np.exp(-(x - td_50) ** 2 / (2 * m ** 2))
# 假设有一些实验数据 points 和对应的误差 error
points = ... # 数据点列表
error = ... # 数据点误差列表
# 初始化拟合参数猜测,这里设 TD_50 和 m 初始值分别为 5 和 1
initial_guess = [5, 1]
# 使用曲线拟合
params, _ = curve_fit(normal_pdf, points, points, p0=initial_guess, sigma=error)
# 拟合结果
td_50_fit, m_fit = params
print(f"TD_50 参数估计: {td_50_fit}")
print(f"m 参数估计: {m_fit}")
# 可视化拟合结果
x.linspace(-10, 10)
y_fit = normal_pdf(x, td_50_fit, m_fit)
plt.scatter(points, points, label='Data')
plt.plot(x, y_fit, 'r', label=f'Maximum Likelihood Fit: TD_50={td_50_fit}, m={m_fit}')
plt.legend()
plt.show()
阅读全文