2014-10-08 35 views
0

我想刪除殘差圖中的異常值(定義爲平均值超過2個標準差)?在R中寫入命令以刪除殘差圖中的異常值

我應該寫什麼命令?

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個標準差)?

殘差圖:

enter image description here

請幫我...我的工作,這些數據一週,我不知道如何刪除異常值!我被允許刪除200個異常值(不是更多)。

+2

請用一些示例數據編輯您的文章。有關在R中創建可重複示例的提示,請參閱[此問題](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)。 – voidHead 2014-10-08 00:12:17

+1

如果你有超過200分的排位賽資格,你會如何決定排除哪些排位? – 2014-10-08 00:22:06

+0

我不知道!你有什麼建議嗎?我甚至不知道我的數據框有多少離羣值! – 2014-10-08 00:39:51

回答

3

我認爲你可以使用類似過濾:

z[abs(z-mean(z))<2*sd(z)]) 

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

+0

非常感謝。我應該如何在RStudio中編寫它?首先我應該寫:z < - resid(DF.md.2)然後我應該寫z [abs(z-mean(z))<2 * sd(z)])?如果我想繪製殘差,我應該使用這個命令:z < - lm(X〜A + B + C + D + F,data = DF)和residualPlot(z)?我對嗎? – 2014-10-08 00:25:38

+0

我寫了這些命令。你能否告訴我如何繪製過濾數據farme的殘留圖? – 2014-10-08 01:11:20

+5

尊重@PotentialScientist,你看起來有點超出你的深度。您可能需要獲得一些本地幫助或坐下來,並通過R的介紹工作 - 堆棧溢出適合克服偶爾的障礙,但它不能教您一種新的編程語言...... – 2014-10-08 01:59:40

2

有很多種方法可以做到這一點。一個簡單的策略是首先將您的殘差保存爲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)) 

Plot with outliers

#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)) 

Plot with outliers removed

這是基本的想法。您可以結合其中一些命令 - 例如,您可以創建異常值列而不保存SD2,而且您並不需要兩個data.frames - 只需在需要時排除異常值行即可。