2017-11-25 125 views
0

我對R非常陌生,正試圖從一個子集中移除異常值以改善GLM。我使用的代碼是:如何從R子集中刪除異常值?

data$sel <- ifelse(data$chol==8.3 & data$whr==1.14 ,(0), (1)) 
data 
dim(data) 
data2 <- subset(data, !(chol==8.3 & whr==1.14)) 
dim(data2) 

我這樣做,但是,當我試圖繪製新的數據圖表,問題依然出現。我用來繪製新圖的代碼是:

dataF2 <- subset(data2, sex=="F") 
dataF2 
dataM2 <- subset(data2, sex=="M") 
dataM2 

plot(chol ~ whr, data=data2, type="n", ylab="Cholesterol (mM/L)", xlab="Waist-hip Ratio") 

#### add each group of points: 
points(dataF2$chol ~ dataF2$whr, pch=1, col="red") 
points(dataM2$chol ~ dataM2$whr, pch=2, col="blue") 

Females2 <- lm(chol ~ whr, data=dataF2) 
summary(Females) 
abline(-8.053, 14.801, col="red") 
Males2 <- lm(chol ~ whr, data=dataM2) 
summary(Males2) 
abline(-3.5896, 8.5617, col="blue") 

我不知道我在做什麼錯,或者我錯過了一些重要的步驟。我所要做的只是刪除一個或多個異常值,以便改進GLM,然後生成沒有異常值的圖。

數據

'data.frame': 100 obs. of 7 variables: 
$ age : int 42 41 40 43 61 44 39 70 47 55 ... 
$ sex : Factor w/ 2 levels "F","M": 1 1 1 1 1 1 2 1 1 1 ... 
$ bmi : num 28.5 26.2 25.2 29.3 34.6 26.7 25.5 33.2 28.8 31.4 ... 
$ whr : num 0.83 0.82 0.84 0.82 0.89 0.81 0.93 0.97 0.86 0.88 ... 
$ sysbp: int 132 135 141 142 167 145 137 182 150 160 ... 
$ chol : num 4.2 3.3 4.3 4.1 5.5 4.4 3.9 6.7 4.7 5.2 ... 
$ smoke: Factor w/ 2 levels "N","Y": 1 2 2 2 1 2 1 2 2 2 ... 

數據2:

'data.frame': 99 obs. of 8 variables: 
$ age : int 42 41 40 43 61 44 39 70 47 55 ... 
$ sex : Factor w/ 2 levels "F","M": 1 1 1 1 1 1 2 1 1 1 ... 
$ bmi : num 28.5 26.2 25.2 29.3 34.6 26.7 25.5 33.2 28.8 31.4 ... 
$ whr : num 0.83 0.82 0.84 0.82 0.89 0.81 0.93 0.97 0.86 0.88 ... 
$ sysbp: int 132 135 141 142 167 145 137 182 150 160 ... 
$ chol : num 4.2 3.3 4.3 4.1 5.5 4.4 3.9 6.7 4.7 5.2 ... 
$ smoke: Factor w/ 2 levels "N","Y": 1 2 2 2 1 2 1 2 2 2 ... 
$ sel : num 1 1 1 1 1 1 1 1 1 1 ... 
+2

您的代碼不是[重現](https://stackoverflow.com/help/mcve)。請提供您的數據或其中的一些最小形式。 – SirSaleh

+0

您的代碼仍然不可重現。塞德里克的回答有幫助嗎? – AkselA

回答

0

到子集數據,您可以通過TRUE FALSE的矢量線條。

你的數據幀是數據2 [行,列]

data2 <- data2[data2$chol!=8.3 & data2$whr!=1.14,] 

this r blogger example更好地瞭解如何從您的數據幀刪除一些行。

你也剛使用

data2 <- subset(data, (chol!=8.3 & whr!=1.14)) 

data2 <- subset(data, !(chol==8.3 | whr==1.14)) 

我的猜測是,你有沒有線,其中既哲和腰臀比有那些價值觀, 要刪除兩個不同行。

最後建議,請您傳遞的東西,利用第一配方可以讓你檢查的代碼位,

data2$chol!=8.3 & data2$whr!=1.14 

,並檢查是否返回TRUE FALSE的矢量你希望