第六章 样本相似性可视化课堂练习

Author

kaka

1 案例数据

1.1 iris:鸢尾花数据集

  • R语言内置的 iris 数据集(鸢尾花数据集)是统计学和机器学习领域最经典的案例数据集之一,由英国统计学家 Ronald Fisher 在1936年首次提出。它包含了3种鸢尾花的测量数据,每个类别有50个样本,共150行数据。
变量名 数据类型 单位 说明
Sepal.Length numeric cm 花萼(萼片)长度,即花朵最外层绿色叶状结构的长度
Sepal.Width numeric cm 花萼(萼片)宽度
Petal.Length numeric cm 花瓣长度,即花朵内部彩色叶状结构的长度
Petal.Width numeric cm 花瓣宽度
Species factor - 鸢尾花种类(分类标签),包含3个水平:
setosa山鸢尾
versicolor变色鸢尾
virginica维吉尼亚鸢尾
  • setosa 类的花通常较小,花瓣短而宽,与其他两类差异明显;versicolorvirginica 在部分特征上有重叠,分类难度更高。

2 平行坐标图和雷达图

2.1 平行坐标图

  • ggplot(group=id)+geom_line+geom_point 绘图
  • Species 映射为颜色

2.1.1 图形观察和代码编写的心得体会

  • 图形观察
    平行坐标图展示了鸢尾花数据集中不同物种在四个测量指标上的分布。通过颜色区分物种,可以清晰地看到每个物种在各指标上的变化趋势。例如,setosa在花瓣宽度和长度上与其他两个物种差异明显,而versicolorvirginica在部分指标上有重叠,但整体趋势仍可区分。

    代码编写心得
    编写平行坐标图代码时,数据预处理是关键。使用pivot_longer将宽数据转换为长数据,便于ggplot2绘制。通过aes中的groupcolor参数,可以轻松区分不同类别。在调整图形主题和标签时,theme函数提供了极大的灵活性,使图形更加美观和易读。

2.2 雷达图

  • 采用ggiraphExtra::ggRadar 绘图

2.2.1 图形观察和代码编写的心得体会

  1. 特征对比:雷达图直观揭示三类鸢尾花的形态差异。setosa 的花萼宽度显著突出,花瓣尺寸(长度/宽度)最小;virginica 的花瓣特征最发达;versicolor 各指标居中,印证了其过渡特性。

  2. 分类边界:setosa 多边形与其他两类分离明显,而 versicolor 和 virginica 在花萼长度上有重叠,解释了分类模型在此处的混淆现象。

  3. 整体轮廓:setosa 呈紧凑星形,virginica 为扩张六边形,形态差异反映了生物学特性。

3 星图和脸谱图

3.1 星图

  • 采用stars 函数,对标准化数据绘制圆弧星图

  • 需要先将四个数值变量转化为矩阵,并将Species 作为矩阵的行名;

  • 设置图例在合适位置,能完整显示;将图形分为10行。

3.1.1 图形观察和代码编写的心得体会

图形观察
星图通过圆弧展示了每个物种在四个测量指标上的分布。每个星图代表一个样本,圆弧的长度表示指标值的大小。从图中可以观察到,setosa类别的星图在花瓣相关指标上较为短小,而virginica在部分指标上弧长较长,显示出更大的值。

代码编写心得
使用stars函数绘制星图时,数据的标准化处理确保了不同指标间的可比性。通过nrow参数控制图形布局,key.loc参数调整图例位置,使图形更加整洁。星图在展示多变量数据时,直观且富有信息量,但需注意图例和标签的清晰度。

3.2 脸谱图

  • 采用aplpack::faces 函数,作Species 三个类别的脸谱图
  • 需要先将四个数值变量转化为矩阵,并将Species 作为矩阵的行名;
  • 设置图例在合适位置,能完整显示;将图形分为12列。

effect of variables:
 modified item       Var           
 "height of face   " "Sepal.Length"
 "width of face    " "Sepal.Width" 
 "structure of face" "Petal.Length"
 "height of mouth  " "Petal.Width" 
 "width of mouth   " "Sepal.Length"
 "smiling          " "Sepal.Width" 
 "height of eyes   " "Petal.Length"
 "width of eyes    " "Petal.Width" 
 "height of hair   " "Sepal.Length"
 "width of hair   "  "Sepal.Width" 
 "style of hair   "  "Petal.Length"
 "height of nose  "  "Petal.Width" 
 "width of nose   "  "Sepal.Length"
 "width of ear    "  "Sepal.Width" 
 "height of ear   "  "Petal.Length"

3.2.1 图形观察和代码编写的心得体会

图形观察
脸谱图通过面部特征展示了每个物种在四个测量指标上的分布。每个脸谱图代表一个样本,面部特征的变化表示指标值的大小。从图中可以观察到,不同物种的脸谱图在面部特征上有明显差异,如眼睛大小、嘴巴形状等,直观地展示了物种间的区别。

代码编写心得
使用faces函数绘制脸谱图时,数据的标准化处理同样重要。通过ncol.plot参数控制图形布局,确保每个类别的脸谱图都能清晰展示。脸谱图在展示多变量数据时,既有趣又直观,但需注意图形布局和标签的清晰度,以便更好地传达信息。

4 聚类图和热图

4.1 系统聚类树状图

  • 采用factoextra::fviz_dend 函数,对标准化后数据作图;
  • 需要先将四个数值变量转化为矩阵,并将Species 作为矩阵的行名;
  • 要求分为3类,观察分类结果和Species 的差异;树状图的外观为圆形。

4.1.1 图形观察和代码编写的心得体会

图形观察
系统聚类树状图展示了鸢尾花数据集中样本的层次聚类结果。通过圆形树状图,可以清晰地看到样本被分为三个主要类别,与实际的Species分类基本一致。树状图揭示了样本间的相似性和差异性,为进一步分析提供了基础。

代码编写心得
使用fviz_dend函数绘制系统聚类树状图时,数据的标准化处理和距离计算是关键。通过k参数控制分类数,type参数调整树状图的外观。图形主题和标签的设置同样重要,确保图形信息清晰传达。系统聚类树状图在展示层次聚类结果时,直观且富有信息量。

4.1.2 K-menas聚类主成分图

  • 采用factoextra::fviz_cluster 函数,对标准化后数据作图;

  • 需要先将四个数值变量转化为矩阵,并将1:150 作为矩阵的行名;

  • 要求分为3类,类别轮廓为正态分布,观察哪些观察值比较异常。

4.1.3 图形观察和代码编写的心得体会

图形观察
K-means聚类主成分图通过第一和第二主成分展示了鸢尾花数据集中样本的聚类结果。图中可以清晰地看到三个主要类别,与实际的Species分类基本一致。正态置信椭圆展示了每个类别的分布范围,有助于识别异常值。

代码编写心得
使用fviz_cluster函数绘制K-means聚类主成分图时,数据的标准化处理和聚类数是关键。通过ellipse.type参数控制类别轮廓形状,repel参数避免标签重叠。图形主题和标签的设置同样重要,确保图形信息清晰传达。K-means聚类主成分图在展示聚类结果时,直观且富有信息量。

4.2 热图

4.2.1 heatmap

  • 采用gplots::heatmap.2 函数,对原始数据绘制热力图

  • 需要先将四个数值变量转化为矩阵,并将Species 作为矩阵的行名;

  • 要求横轴和纵轴均添加聚类树状图

4.2.2 图形观察和代码编写的心得体会

4.2.3 热图心得体会

图形观察
热图通过颜色深浅展示了鸢尾花数据集中四个测量指标的分布。图中可以清晰地看到样本间的相似性和差异性,以及指标间的相关性。聚类树状图在横轴和纵轴上展示了样本和指标的层次聚类结果,为进一步分析提供了基础。

代码编写心得
使用heatmap.2函数绘制热图时,数据的标准化处理和调色板选择是关键。通过dendrogram参数控制聚类树状图的显示,trace参数避免显示跟踪线。图形主题和标签的设置同样重要,确保图形信息清晰传达。热图在展示多变量数据时,直观且富有信息量,但需注意图形布局和标签的清晰度。