scipy.stats.siegelslopes¶
- scipy.stats.siegelslopes(y, x=None, method='hierarchical')[源代码]¶
计算一组点(x,y)的Siegel估计器。
siegelslopes
实现使用重复中值的稳健线性回归方法(请参见 [1]) 将直线拟合到点(x,y)。该方法对渐近崩溃点为50%的异常值具有较强的鲁棒性。- 参数
- yarray_like
因变量。
- xARRAY_LIKE或NONE,可选
自变量。如果没有,则使用
arange(len(y))
取而代之的是。- method{‘分层’,‘独立’}
如果为‘Hierarchical’,则使用估计的斜率估计截距
medslope
(默认选项)。如果是“分离的”,则独立于估计的斜率来估计截距。有关详细信息,请参阅注释。
- 退货
- medslope浮动
回归线斜率的估计。
- medintercept浮动
回归线截距的估计。
参见
theilslopes
没有重复中频的类似技术
注意事项
使用
n = len(y)
、计算m_j
作为从该点开始的坡度的中值(x[j], y[j])
给所有其他人 n-1 分数。medslope
是所有斜坡的中位数m_j
。给出了两种估计截距的方法 [1] 可以通过参数选择method
。分层方法使用估计的斜率medslope
并计算出medintercept
作为…的中位数y - medslope*x
。另一种方法分别估计截距如下:对于每个点(x[j], y[j])
,计算所有 n-1 通过剩余点的直线,然后取中间带i_j
。medintercept
的中位数是i_j
。该实现计算 n 乘以大小为 n 对于较大的向量,这可能会很慢。还有更高效的算法(请参见 [2]) 这在这里没有实现。
参考文献
- 1(1,2)
A.Siegel,“使用重复中值的稳健回归”,“比比斯皮尔卡”,第69卷,第242-244页,1982。
- 2
A.Stein和M.Werman,“寻找重复的中值回归线”,“ACM-SIAM第三届年度离散算法研讨会论文集”,第409-413页,1992年。
示例
>>> from scipy import stats >>> import matplotlib.pyplot as plt
>>> x = np.linspace(-5, 5, num=150) >>> y = x + np.random.normal(size=x.size) >>> y[11:15] += 10 # add outliers >>> y[-5:] -= 7
计算斜率和截距。为了进行比较,还要计算与的最小二乘拟合
linregress
:>>> res = stats.siegelslopes(y, x) >>> lsq_res = stats.linregress(x, y)
绘制结果图。Siegel回归线显示为红色。绿线显示适合比较的最小二乘法。
>>> fig = plt.figure() >>> ax = fig.add_subplot(111) >>> ax.plot(x, y, 'b.') >>> ax.plot(x, res[1] + res[0] * x, 'r-') >>> ax.plot(x, lsq_res[1] + lsq_res[0] * x, 'g-') >>> plt.show()