【问题标题】:Python statsmodel robust linear regression (RLM) outlier selectionPython statsmodel 稳健线性回归 (RLM) 异常值选择
【发布时间】:2017-11-10 22:47:13
【问题描述】:

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

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

【问题讨论】:

    标签: python regression linear-regression statsmodels


    【解决方案1】:

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

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

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

    一般来说并回答问题的第二部分:

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

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

    【讨论】: