首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中编写命令以删除残差图中的异常值

在R中编写命令以删除残差图中的异常值
EN

Stack Overflow用户
提问于 2014-10-08 08:09:19
回答 2查看 7.7K关注 0票数 1

我想删除残差图中的异常值(定义为与平均值的标准差超过2)?

我应该写什么命令?

代码语言:javascript
复制
DF.mod.2<- lm(X ~ A+ B+ C+ D+ F, data=DF)

我通过这个命令得到了残差的平均值:

代码语言:javascript
复制
mean(resid(DF.mod.2))

和以下命令的标准差:

代码语言:javascript
复制
sqrt(deviance(DF.mod.2)/df.residual(DF.mod.2))

那么我如何从我的数据帧中排除残差(距离平均值超过2个标准差)?

残差图:

请帮帮我。我在这些数据上工作了一周,我不知道如何去除异常值!我被允许删除200个异常值(不能更多)。

EN

回答 2

Stack Overflow用户

发布于 2014-10-08 11:36:27

有多种方法可以做到这一点。一个简单的策略是首先将残差作为新列保存到data.frame。然后,您可以添加第二个新列来标记残差是否为异常值。然后,您可以使用该列创建一个没有异常值的新data.frame,或者设置当前data.frame的子集,或者做任何您需要的事情。下面是一个示例:

代码语言:javascript
复制
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))

代码语言:javascript
复制
#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 -您可以在需要时排除离群值行。

票数 5
EN

Stack Overflow用户

发布于 2014-10-08 08:16:32

我认为你可以使用下面这样的东西来过滤:

代码语言:javascript
复制
z[abs(z-mean(z))<2*sd(z)])

其中z是resid(DF.mod.2)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26247255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档