state.x77 数据集为例

概念

热图是相当常用的一类统计图,其原理就是将矩阵每个位置的数值大小映射为颜色深浅,并排列在对应的位置上

由热图,可以对数据进行聚类

注意绘制热图的数据格式一定是矩阵

绘图包选择

一不使用自带的 heatmap 作图,常使用 pheatmap

标准化与中心化

有时,由于数据单位等原因,不同数据间的差距可能很大,比如:州面积与文盲率。而在这往往导致其他数据间的差距被掩盖,比如:文盲率与谋杀率

在未标准化、中心化前,对数据集作热图如下,可见就”面积”一列最红,而其他数值差距很不明显。面积显然最大,这样的图没有意义

before scale() 使用 scale() 函数可以对一个数值矩阵进行标准化和中心化,解决以上问题

heatmap(scale(state.x77)) 

scale() 处理后的图如下所示: after scale() 由此,差异便相当明显了。比如新墨西哥州的谋杀和文盲率就很高

聚类分析

热图中每行每列的排列并不是随机的。在可视化数值大小的同时,R 进行了对数据的聚类,并将相似的数据排在了一起

注意到热图周边的树形图,它表示的就是行列间的相似性。节点的含义如下表

元素含义
叶子节点代表单个数据点(一行或一列)
内部节点代表两个或多个子簇的合并点,位置高度表示合并时的距离(不相似性)
分支长度反映两个簇之间的差异程度,长度 ∝ 不相似性。

比如,由矩阵与相关性中的结果可得到如下相关性图,注意到文盲率谋杀率相关性最高。在热图中,它们也被放置在了相邻的位置