Python statsmodel 鲁棒线性回归 (RLM) 异常值选择

Python statsmodel robust linear regression (RLM) outlier selection

我正在分析一组数据,我需要找到它的回归。数据集中的数据点数量很少(~15),我决定使用稳健的线性回归来完成这项工作。问题是程序选择了一些似乎没有那么有影响力的点作为异常值。这是数据的散点图,它们的影响用作大小:

B点和C点(图中红圈所示)被选为离群点,影响较大的A点则没有。虽然A点没有改变回归的总趋势,但它基本上是沿着X最高的点来定义斜率。而B点和C点只影响斜率的显着性。所以我的问题有两个部分: 1)如果没有选择最有影响力的点,RLM 包选择离群值的方法是什么?你知道其他有我想到的离群值选择的包吗? 2)你认为A点是异常值吗?

statsmodels 中的 RLM 仅限于 M 估计器。默认的 Huber 范数仅对 y 中的异常值具有鲁棒性,但对 x 中的异常值不具有鲁棒性,即对不良影响点不鲁棒。

参见示例http://www.statsmodels.org/devel/examples/notebooks/generated/robust_models_1.html 在 [51] 及之后的行。

像双平方这样的降序范数能够去除不良影响点,但解决方案是局部最优解,需要适当的起始值。具有低故障点并且对像 LTS 这样的 x 异常值具有鲁棒性的方法目前在 statsmodels 中不可用,据我所知,在 Python 中的其他任何地方都不可用。 R 有一套更广泛的稳健估计器可以处理这些情况。在 statsmodels.robust 中添加更多方法和模型的一些扩展在拉取请求中,目前已停止。

总的来说,回答问题的第二部分:

在特定情况下,通常很难将观察结果声明或识别为离群值。研究人员经常使用稳健的方法来指出需要进一步调查的 异常值候选者 。例如,一个原因可能是 "outliers" 是从不同的人群中抽样的。在许多情况下,使用纯机械的统计识别可能并不合适。

在这个例子中:如果我们拟合一个陡坡并将点 A 作为离群值,那么点 B 和 C 可能拟合得相当好并且不会被识别为离群值。另一方面,如果 A 是基于额外信息的合理点,则关系可能是非线性的。 我的猜测是 LTS 会将 A 声明为唯一的异常值并拟合一条陡峭的回归线。