我想在残差图中删除异常值(定义为平均值超过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个异常值(不是更多)。
答案 0 :(得分:4)
我认为您可以使用以下内容进行过滤:
z[abs(z-mean(z))<2*sd(z)])
其中z为resid(DF.mod.2)
答案 1 :(得分:4)
有多种方法可以做到这一点。一个简单的策略是首先将残差保存到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
- 您可以在排除异常值行时排除需要。