如何删除异常值或对我的回归模型具有高杠杆作用的特定数据点?

问题描述 投票:0回答:1

我使用 ols_plot_resid_lev() 创建了这个图,并且看到了异常值和杠杆点,我想删除它们以改进我的回归模型。我的数据集有 5 个变量,每个变量都有 140 位数据。我通过做这个情节:

model <- log(variable) ~ variable2 + variable3 + variable4 + variable5
rmodel<- lm(model, data = dataset)

ols_plot_resid_lev(rmodel)


outliers and levrage plot

你可以看到有数字的点,我看过一个视频,他们访问这些数据点并删除它们,但我的数据不像他们的那么简单。

https://www.youtube.com/watch?v=u2OSemc72sM 1:40 左右

我试过做他们在视频里做的事:

lm.sm[35,1]

但它给了我这个错误:

Error: object 'lm.sm' not found

关于如何取出这些数据点有什么想法吗?

更新: 这是改进后的图表 improved leverage and influence points plot

使用厨师和帽子功能后,它得到改善。是否可以完全去除所有的杠杆和影响点?

r regression outliers
1个回答
0
投票

你得到的错误是因为你试图访问一个名为

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)

我希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.