哦,走开,你这个可恶的离群值

1.离群值是啥子

这个帖子里有张图,画得非常清楚:https://www.jianshu.com/p/ec3802b490ed

2.如何找出离群值

大概搜了一下,找到了好多种办法,其中有一个基于箱线图的,一看就爱了

2.1先画个热图看看

一个正常的热图长这样:

rm(list = ls())
library(pheatmap)
set.seed(10086)
n = matrix(rnorm(80),nrow = 5)
pheatmap(n)

一个有离群值的热图长这样:

n2 = n
n2[1,2:3] = n2[1,2:3] +7
pheatmap(n2)

2.2箱线图会画出离群值

直接拿矩阵画图,那就一列是一个箱线,那么图上的离群值就是每一列的离群值;也可以拿全部数据来画,图上的离群值就是全部数据的离群值咯

boxplot(n2)
boxplot(as.numeric(n2))

2.3明确找出离群值是哪几个

箱线图里藏着答案:找整个矩阵的和每一列的离群值,都可以。

boxplot(n2,plot = F)$out
##  [1] -2.744959  7.254794  9.105554 -1.023663  2.171476 -2.003527  1.595089
##  [8] -2.264267  1.432397 -1.627069  1.074236 -1.580355
outlier = boxplot(as.numeric(n2),plot = F)$out;outlier
## [1] -2.744959  7.254794  9.105554  2.491033

3.知道谁是离群值,能让热图活起来

在这一篇里,我们已经知道可以用breaks参数来设置热图颜色分配范围。

可以计算除了离群值之外的最大最小值,将这两个值作为颜色分配范围;这样,离群值只会被标记成最深的颜色,不会影响其他数据的颜色分配了。

r = range(n[! n  %in% outlier]);r
## [1] -2.264267  2.171476
pheatmap(n,breaks = seq(r[1],r[2],length.out = 100))

也可以给range的值取个整,作为颜色分配范围;再调一调,也没问题。

r2 = c(floor(r[1]),ceiling(r[2]))
pheatmap(n,breaks = seq(r2[1],r2[2],length.out = 100))
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容