scipy.stats.mstats.
linregress#
- scipy.stats.mstats.linregress(x, y=None)[源代码][源代码]#
为两组测量值计算线性最小二乘回归。
- 参数:
- x, yarray_like
两组测量数据。两个数组应该具有相同的长度 N。如果只给出 x`(且 ``y=None`),那么它必须是一个二维数组,其中一个维度长度为 2。这两组测量数据通过沿着长度为 2 的维度分割数组来找到。在
y=None
且 x 是 2xN 数组的情况下,linregress(x)
等价于linregress(x[0], x[1])
。
- 返回:
- 结果 :
LinregressResult
实例LinregressResult 实例 返回值是一个具有以下属性的对象:
- 斜率浮动
回归线的斜率。
- 拦截浮动
回归线的截距。
- rvalue浮动
皮尔逊相关系数。
rvalue
的平方等于决定系数。- p值浮动
使用Wald检验和t分布检验统计量的假设检验的p值,其零假设是斜率为零。请参见上述的`alternative`以了解备择假设。
- stderr浮动
在残差正态性假设下,估计斜率(梯度)的标准误差。
- intercept_stderr浮动
在残差正态性假设下,估计截距的标准误差。
- 结果 :
参见
scipy.optimize.curve_fit
使用非线性最小二乘法将函数拟合到数据。
scipy.optimize.leastsq
最小化一组方程的平方和。
注释
缺失值是成对考虑的:如果在 x 中缺失一个值,y 中对应的值将被屏蔽。
为了与旧版本的 SciPy 兼容,返回值的行为类似于长度为 5 的
namedtuple
,字段为slope
、intercept
、rvalue
、pvalue
和stderr
,因此可以继续编写:slope, intercept, r, p, se = linregress(x, y)
然而,使用这种风格时,截距的标准误差是不可用的。要访问所有计算值,包括截距的标准误差,请将返回值作为具有属性的对象使用,例如:
result = linregress(x, y) print(result.intercept, result.intercept_stderr)
示例
>>> import numpy as np >>> 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.mstats.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