scipy.stats.linregress¶
- scipy.stats.linregress(x, y=None, alternative='two-sided')[源代码]¶
计算两组测量值的线性最小二乘回归。
- 参数
- x, yarray_like
两套尺寸。两个数组的长度应该相同。要是 x 已给出(和
y=None
),则它一定是一个二维数组,其中一维的长度为2。然后,通过沿长度-2维拆分该数组来找到两组测量值。在以下情况下y=None
和 x 是2x2阵列,linregress(x)
相当于linregress(x[0], x[1])
。- alternative{‘双面’,‘少’,‘大’},可选
定义了另一种假设。默认值为“双面”。以下选项可用:
‘双边’:回归线的斜率非零
‘Less’:回归线的斜率小于零
‘较大’:回归线的斜率大于零
1.7.0 新版功能.
- 退货
- 结果 :
LinregressResult
实例LinregressResult实例 返回值是具有以下属性的对象:
- 坡度浮动
回归线的坡度。
- 拦截浮动
回归线的截距。
- 右值浮动
皮尔逊相关系数。的正方形
rvalue
等于决定系数。- p值浮动
假设检验的p值,其零假设是斜率为零,使用带有检验统计量t分布的Wald检验。看见 alternative 以上可供选择的假设。
- 标准错误浮动
在残差正态假设下,估计斜率(坡度)的标准误差。
- intercept_stderr浮动
在残差正态假设下,估计截距的标准误差。
- 结果 :
参见
scipy.optimize.curve_fit
使用非线性最小二乘法来拟合函数以适应数据。
scipy.optimize.leastsq
最小化一组方程的平方和。
注意事项
缺少的值被认为是成对的:如果 x 中的相应值 y 戴着面具。
为了与旧版本的SciPy兼容,返回值的作用类似于
namedtuple
长度为5,带字段slope
,intercept
,rvalue
,pvalue
和stderr
,所以人们可以继续写::slope, intercept, r, p, se = linregress(x, y)
然而,对于这种风格,拦截的标准误差是不可用的。要访问所有计算值(包括截取的标准误差),请将返回值用作具有属性的对象,例如:
result = linregress(x, y) print(result.intercept, result.intercept_stderr)
示例
>>> import matplotlib.pyplot as plt >>> from scipy import stats >>> rng = np.random.default_rng()
生成一些数据:
>>> x = rng.random(10) >>> y = 1.6*x + rng.random(10)
执行线性回归:
>>> res = stats.linregress(x, y)
确定系数(R平方):
>>> print(f"R-squared: {res.rvalue**2:.6f}") R-squared: 0.717533
将数据与拟合的直线一起绘制:
>>> plt.plot(x, y, 'o', label='original data') >>> plt.plot(x, res.intercept + res.slope*x, 'r', label='fitted line') >>> plt.legend() >>> plt.show()
计算坡度和截距的95%置信区间:
>>> # Two-sided inverse Students t-distribution >>> # p - probability, df - degrees of freedom >>> from scipy.stats import t >>> tinv = lambda p, df: abs(t.ppf(p/2, df))
>>> ts = tinv(0.05, len(x)-2) >>> print(f"slope (95%): {res.slope:.6f} +/- {ts*res.stderr:.6f}") slope (95%): 1.453392 +/- 0.743465 >>> print(f"intercept (95%): {res.intercept:.6f}" ... f" +/- {ts*res.intercept_stderr:.6f}") intercept (95%): 0.616950 +/- 0.544475