有很多種方法可以做到這一點。一個簡單的策略是首先將您的殘差保存爲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
- 只需在需要時排除異常值行即可。
請用一些示例數據編輯您的文章。有關在R中創建可重複示例的提示,請參閱[此問題](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)。 – voidHead 2014-10-08 00:12:17
如果你有超過200分的排位賽資格,你會如何決定排除哪些排位? – 2014-10-08 00:22:06
我不知道!你有什麼建議嗎?我甚至不知道我的數據框有多少離羣值! – 2014-10-08 00:39:51