我使用 ols_plot_resid_lev() 创建了这个图,并且看到了异常值和杠杆点,我想删除它们以改进我的回归模型。我的数据集有 5 个变量,每个变量都有 140 位数据。我通过做这个情节:
model <- log(variable) ~ variable2 + variable3 + variable4 + variable5
rmodel<- lm(model, data = dataset)
ols_plot_resid_lev(rmodel)
你可以看到有数字的点,我看过一个视频,他们访问这些数据点并删除它们,但我的数据不像他们的那么简单。
https://www.youtube.com/watch?v=u2OSemc72sM 1:40 左右
我试过做他们在视频里做的事:
lm.sm[35,1]
但它给了我这个错误:
Error: object 'lm.sm' not found
关于如何取出这些数据点有什么想法吗?
使用厨师和帽子功能后,它得到改善。是否可以完全去除所有的杠杆和影响点?
你得到的错误是因为你试图访问一个名为
lm.sm
的对象,它在你的代码中不存在。相反,您应该使用特定的数据集对象。首先,让我们通过获取行号来识别异常值和杠杆点。
您可以使用
hatvalues()
和cooks.distance()
函数分别识别杠杆点和影响点。然后您可以设置一个阈值来确定要删除的点。例如,您可以对杠杆点使用 2 * p/n,对库克距离使用 4/n,其中 p 是预测变量的数量,n 是观测值的数量。让我举例说明。
leverage_threshold <- 2 * (length(coef(rmodel)) - 1) / nrow(dataset)
high_leverage_points <- which(hatvalues(rmodel) > leverage_threshold)
cooks_threshold <- 4 / nrow(dataset)
influential_points <- which(cooks.distance(rmodel) > cooks_threshold)
points_to_remove <- unique(c(high_leverage_points, influential_points))
现在您有了要删除的点的行号,您可以将它们从数据集中删除并创建一个没有这些点的新线性模型:
new_dataset <- dataset[-points_to_remove, ]
new_model <- log(variable) ~ variable2 + variable3 + variable4 + variable5
new_rmodel <- lm(new_model, data = new_dataset)
我希望这有帮助。