我想删除残差图中的异常值(定义为与平均值的标准差超过2)?
我应该写什么命令?
DF.mod.2<- lm(X ~ A+ B+ C+ D+ F, data=DF)我通过这个命令得到了残差的平均值:
mean(resid(DF.mod.2))和以下命令的标准差:
sqrt(deviance(DF.mod.2)/df.residual(DF.mod.2))那么我如何从我的数据帧中排除残差(距离平均值超过2个标准差)?
残差图:

请帮帮我。我在这些数据上工作了一周,我不知道如何去除异常值!我被允许删除200个异常值(不能更多)。
发布于 2014-10-08 11:36:27
有多种方法可以做到这一点。一个简单的策略是首先将残差作为新列保存到data.frame。然后,您可以添加第二个新列来标记残差是否为异常值。然后,您可以使用该列创建一个没有异常值的新data.frame,或者设置当前data.frame的子集,或者做任何您需要的事情。下面是一个示例:
set.seed(20) #sets the random number seed.
# Test data and test linear model
DF<-data.frame(X=rnorm(200), Y=rnorm(200), Z=rnorm(200))
LM<-lm(X~Y+Z, data=DF)
# Store the residuals as a new column in DF
DF$Resid<-resid(LM)
# Find out what 2 standard deviations is and save it to SD2
SD2<-2*sd(resid(LM))
SD2
#[1] 1.934118
# Make DF$Outs 1 if a residual is 2 st. deviations from the mean, 0 otherwise
DF$Outs<-ifelse(abs(DF$Resid)>SD2, 1, 0)
# Plot this, note that DF$Outs is used to set the color of the points.
plot(DF$Resid, col=DF$Outs+1, pch=16,ylim=c(-3,3))

#Make a new data.frame with no outliers
DF2<-DF[!DF$Outs,]
nrow(DF2)
#[1] 189 Was 200 before, 11 outliers removed
# Plot new data
plot(DF2$Resid, col=DF2$Outs+1,pch=16, ylim=c(-3,3))

这就是基本的想法。您可以组合这些命令中的一些命令-例如,您可以只创建离群值列而不保存SD2,并且您实际上不需要两个data.frames -您可以在需要时排除离群值行。
发布于 2014-10-08 08:16:32
我认为你可以使用下面这样的东西来过滤:
z[abs(z-mean(z))<2*sd(z)])其中z是resid(DF.mod.2)
https://stackoverflow.com/questions/26247255
复制相似问题