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_jmedintercept 的中位数是 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()
../../_images/scipy-stats-siegelslopes-1.png