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

时间:2017-11-10 22:47:13

标签: python regression linear-regression statsmodels

我正在分析一组数据,我需要找到它的回归。数据集中的数据点数量很少(~15),我决定对工作使用稳健的线性回归。问题是程序选择一些点作为异常值,似乎没有那么有影响力。以下是数据的散点图,其影响用作大小:X vs Y. The Points B and C are selected as outliers, while point A is not.

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

1 个答案:

答案 0 :(得分:1)

statsmodels中的RLM仅限于M-estimators。默认的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声明为唯一的异常值,并且符合陡峭的回归线。