我是R的新手,我正试图从子集中删除异常值以改善GLM。我正在使用的代码是:
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 ...
DATA2:
'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 ...
答案 0 :(得分:0)
要对数据进行子集化,可以将一个TRUE FALSE向量传递给行。
您的数据框是data2 [line,columns]
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))
我的猜测是你没有chol和whr都有这些值的行, 你想删除两个不同的行。
最后的建议,检查你传递的是什么,使用第一个公式可以检查那段代码,
data2$chol!=8.3 & data2$whr!=1.14
并检查是否会返回您期望的假为
的向量