美文网首页
哦,走开,你这个可恶的离群值

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

作者: 小洁忘了怎么分身 | 来源:发表于2020-12-04 17:07 被阅读0次

    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))
    

    相关文章

      网友评论

          本文标题:哦,走开,你这个可恶的离群值

          本文链接:https://www.haomeiwen.com/subject/hysiwktx.html