我使用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
答案 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)}