有2个样本X,Y,需要建立一个模型Y=aX+b+eps。有必要找到参数 a,b 的置信区间。
根据学生的相应公式,我自己编写了区间搜索。(teta-参数矩阵,252-样本量,假设正态分布,即2个参数,可靠性水平a=0.05)
a_left = teta[0]-stats.t.ppf(0.975,250)*math.sqrt(eps2.sum()*C[0,0]/250)
a_right = teta[0]+stats.t.ppf(0.975,250)*math.sqrt(eps2.sum()*C[0,0]/250)
b_left = teta[1]-stats.t.ppf(0.975,250)*math.sqrt(eps2.sum()*C[1,1]/250)
b_right = teta[1]+stats.t.ppf(0.975,250)*math.sqrt(eps2.sum()*C[1,1]/250)
但是,我需要(违背我的意愿)只使用库的标准功能(stats、sklearn、numpy、scipy 等)。这些库有这样的内置功能吗?
目前只能找到模型中的参数
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn import metrics
model = LinearRegression().fit(x, y)
y_pred = model.predict(x)
print("a,b= ", model.coef_[0], model.intercept_)
如果您将和归因于常规可能性,则可以通过多种方式找到线性回归的置信区间。
scipynumpy无论您选择哪种方法,要计算置信区间,您都需要知道参数本身(例如
a)及其标准差(让它成为a_err)。alpha使用学生分布计算置信水平的置信区间:如果您只需要找到区间的半角 - 放置在 ± 符号之后的值,则计算如下:
现在如何查找参数及其错误。
通过 linregress
scipy.stats.linregress- 一种计算线性回归的专门方法。一条直线上 100 个点的结果
y=0.5x+2随机误差sigma=0.5:通用工具
curve_fit有
scipy一个通用工具可以通过给定模型逼近一组点scipy.optimize.curve_fit。此函数使用最小二乘法为任何类型的模型搜索最佳参数集,而不仅仅是线性模型。除了参数的最优值外,该函数还返回一个协方差矩阵,其对角线元素给出了参数方差的估计值。相同数据集的结果:
如您所见,结果与专用工具相同。
直接计算
您可以使用公式直接计算线性回归参数
性能测量
100 点的线性回归
linregress: 207 µs ± 2.67 µscurve_fit: 237 µs ± 8.29 µs图上线性回归的结果。
例子
该示例作为 jupyter notebook 上传到 github。
奇怪的是,您以某种方式计算系数的置信区间。我不知道你是基于什么教程,但看看这里:
http://mcimeer.narod.ru/data/t5/t5_2.html
它与您尝试应用的不同,并且与受人尊敬的 Pak Uula 给出的(系数 b)有所不同