1.離群值是啥子
這個帖子里有張圖其掂,畫得非常清楚:http://www.reibang.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箱線圖會畫出離群值
直接拿矩陣畫圖,那就一列是一個箱線护蝶,那么圖上的離群值就是每一列的離群值华烟;也可以拿全部數(shù)據(jù)來畫,圖上的離群值就是全部數(shù)據(jù)的離群值咯
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.知道誰是離群值负饲,能讓熱圖活起來
在這一篇里堤魁,我們已經(jīng)知道可以用breaks參數(shù)來設(shè)置熱圖顏色分配范圍喂链。
可以計(jì)算除了離群值之外的最大最小值,將這兩個值作為顏色分配范圍妥泉;這樣椭微,離群值只會被標(biāo)記成最深的顏色,不會影響其他數(shù)據(jù)的顏色分配了盲链。
r = range(n[! n %in% outlier]);r
## [1] -2.264267 2.171476
pheatmap(n,breaks = seq(r[1],r[2],length.out = 100))
也可以給range的值取個整蝇率,作為顏色分配范圍;再調(diào)一調(diào),也沒問題刽沾。
r2 = c(floor(r[1]),ceiling(r[2]))
pheatmap(n,breaks = seq(r2[1],r2[2],length.out = 100))