同时用一个斜率拟合两个线性函数

时间:2019-05-29 20:15:28

标签: python statistics

我有两组实验数据,如图figure所示 对于x = 0,两组的测量数据必须相同。因此,我想同时拟合两个集合,定义一个y截距和两个斜率。据我了解,this question不能解决我的问题。

1 个答案:

答案 0 :(得分:2)

我认为您将要做一个simple linear regression。这里的问题是使具有相同截距的两个线性函数的误差最小化。错误函数是:

def f(params):
    alpha, betha_1, betha_2 = params
    e_1 = np.power(y1- alpha - (betha_1 * x),2)
    e_2 = np.power(y2- alpha - (betha_2 * x),2)
    error = np.sum(e_1 + e_2)
    return error

我使用scipy.optimize.minimize来获得最佳参数。最终的代码是:

import numpy as np
from scipy.optimize import minimize
import matplotlib.pyplot as plt

y2 = [9, 11, 10, 12, 13, 12, 12]
y1 = [10, 12, 11, 12, 12, 13, 14]
x = [0, 1, 2, 3, 4, 5, 6]
x, y1, y2 = np.array(x), np.array(y1), np.array(y2)

def f(params):
    alpha, betha_1, betha_2 = params
    e_1 = np.power(y1- alpha - (betha_1 * x),2)
    e_2 = np.power(y2- alpha - (betha_2 * x),2)
    error = np.sum(e_1 + e_2)
    return error

initial_guess = [1, 1, 1]
result = minimize(f, initial_guess)

xfine = np.arange(0, 6, 0.001)
y1_reg = result.x[0] + result.x[1]*xfine
y2_reg = result.x[0] + result.x[2]*xfine

plt.plot(x, y1, 'bo', x, y2, 'go', xfine, y1_reg, 'b', xfine, y2_reg, 'g')
plt.show()

和结果: Liear Regression Result