去除影响图中的高残值和高杠杆点?

时间:2017-11-02 17:05:10

标签: python plot regression linear outliers

我使用Boston Housing Price数据进行线性回归。

Influence Plot,有很多高残点和一些高杠杆点。

如何删除高残差和高杠杆点,以便重新运行线性回归模型并重新绘制影响和Q-Q图?

输入:

m = ols('PRICE ~ CRIM + RM + PTRATIO',bos).fit()
print(m.summary())

截断输出:

                 coef    std err          t      P>|t|      [0.025      0.975]
Intercept     -3.3066      4.038     -0.819      0.413     -11.240       4.627
CRIM          -0.2021      0.032     -6.301      0.000      -0.265      -0.139
RM             7.3816      0.402     18.360      0.000       6.592       8.171
PTRATIO       -1.0742      0.133     -8.081      0.000      -1.335      -0.813

Influence Plot

QQ Plot

1 个答案:

答案 0 :(得分:0)

对于学生残差,有经验法则将观察结果标记为可能的异常值:

Studentized Residual value for any observation > |3|

您可以使用statsmodels库轻松找到这些观察结果。 这是一个代码,可以帮助您找到那些观测值,对于任何观测值,其|化|残差值> | 3 |

from statsmodels.regression.linear_model import OLS
from statsmodels.stats.outliers_influence import OLSInfluence as olsi
import seaborn as sb
import matplotlib.pyplot as plt
%matplotlib inline

lrmodel = OLS(y_train, x_train)
results = lrmodel.fit()

studentized_residuals = olsi(results).resid_studentized
keep_observ_at_indx = [i for i in studentized_residuals if abs(i) > 3] # applying the above mentioned thumb rule
leverage_pts = olsi(results).hat_matrix_diag        # this will give the array of leverage values
sb.residplot(x = studentized_residuals, y = leverage_pts, color = 'brown')
plt.show()

a。)现在,我们终于有了那些具有selfized_residuals> 3的索引,这些索引将获取观察值。

b。)据我从互联网上所读到的,我认为《库克的距离》将帮助我们消除高杠杆点。但是我不确定“太大”了!因此不能对此发表太多评论。以下是计算“库克距离”的方法

cook_dist = dict(olsi(result).cooks_distance[0])

# {key(index) : value(cook's distance)}