识别并删除具有高杠杆率和大残差的数据点
Identify and remove data points with high leverage and large residuals
我想识别具有高杠杆和大残差的数据点。我的目标是删除它们并重复线性回归分析。具体来说,我想删除大于 3 的学生化残差和厨师 D > 4/n 的数据点。我如何在样本数据中执行该操作并在没有影响点的情况下进行相同的分析?
示例数据:
hsb2 <- read.csv("http://www.ats.ucla.edu/stat/data/hsb2.csv")
lm1<-lm(write ~ read +ses + prog+race.f, data = hsb2)
将这些点的权重设置为零,然后update
模型:
w <- abs(rstudent(lm1)) < 3 & abs(cooks.distance(lm1)) < 4/nrow(lm1$model)
lm2 <- update(lm1, weights=as.numeric(w))
这在统计上可能是一种较弱的方法,但至少代码不是太难...
您还可以删除杠杆率高且残差大的值
HighLeverage <- cooks.distance(lm1) > (4/nrow(hsb2))
LargeResiduals <- rstudent(lm1) > 3
hsb2 <- hsb2[!HighLeverage & !LargeResiduals,]
lm1<-lm(write ~ read +ses + prog+race.f, data = hsb2)
我想识别具有高杠杆和大残差的数据点。我的目标是删除它们并重复线性回归分析。具体来说,我想删除大于 3 的学生化残差和厨师 D > 4/n 的数据点。我如何在样本数据中执行该操作并在没有影响点的情况下进行相同的分析?
示例数据:
hsb2 <- read.csv("http://www.ats.ucla.edu/stat/data/hsb2.csv")
lm1<-lm(write ~ read +ses + prog+race.f, data = hsb2)
将这些点的权重设置为零,然后update
模型:
w <- abs(rstudent(lm1)) < 3 & abs(cooks.distance(lm1)) < 4/nrow(lm1$model)
lm2 <- update(lm1, weights=as.numeric(w))
这在统计上可能是一种较弱的方法,但至少代码不是太难...
您还可以删除杠杆率高且残差大的值
HighLeverage <- cooks.distance(lm1) > (4/nrow(hsb2))
LargeResiduals <- rstudent(lm1) > 3
hsb2 <- hsb2[!HighLeverage & !LargeResiduals,]
lm1<-lm(write ~ read +ses + prog+race.f, data = hsb2)