R语言数据可视化-- boxplot 异常点选取原理讲解

本次详解boxplot原理,同时需要使用到《机械学习与R语言》中的数据包‘usedcars.csv’。可以到网上自行搜索下载or到我github里下载:https://github.com/HAI2018/MLwR/   到第二版第二章,点进usedcars.csv -> 再点击 raw -> 右键另存为 

Boxplot一直都是我们对数据异常点观测的一个简单且直接有效的方式,虽然它并不能详细告诉我们哪些点是异常点以及异常点的详细数据。 但是boxplot却总能让我们很直观地了解数值变量的中心和分散程度。如下例所示:

读取usedcars.csv文档后,我们尝试画一下boxplot:

usedcars <- read.csv("usedcars.csv", stringsAsFactors = FALSE)
boxplot(usedcars$price, main="Boxplot of Used Car Prices",
        ylab="Price ($)", las=T)

画出的是price的boxplot图:


大家都知道,从下到上分别是MIN,Q1,  MEDIAN,  Q3, MAX. 而掉在外面的点便是outliers,也就是异常点。这些点是怎么来的?

既然最下和最上已经是最小和最大点了,为什么还会有点比最小还小,最大还大?这便要涉及到R里面boxplot内置逻辑了,这也是boxplot为什么可以区别异常点的原因。

在boxplot的function里面其实还有许多内置变量,我们可以通过?boxplot查询。 总体而言,R中boxplot outliers的判断是根据Q1- 1.5(Q3-Q1)[记为值A]以及Q3+ 1.5(Q3-Q1)[记为值B]。 Q3-Q1 便是四分位距离, 可以使用IQR()function 计算, 如:

IQR(usedcars$Price)

比值A还小,或者比值B还大的值,便显示为异常值。当然我们可以通过调整方程中的arguement来改变AB值的设定,如:

boxplot(usedcars$price, main="Boxplot of Used Car Prices",
        ylab="Price ($)",las=T,range=1)

如上图,异常值变多了,因为我们改变了range,设为range=1(默认为1.5),显然这个改变会增加异常值。

如果我们不需要表现异常值(尽管这种情况是很少见到),可以通过如下设定:

boxplot(usedcars$price, main="Boxplot of Used Car Prices",
        ylab="Price ($)",las=T,outline=F)

可见,异常点消失了。


猜你喜欢

转载自blog.csdn.net/clintlong/article/details/80970182