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

Author

221527107杨怡婕

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.2 图形观察和代码编写的心得体会

2.3 雷达图

  • 采用ggiraphExtra::ggRadar 绘图

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

  • 心得体会: 雷达图能直观展示多维数据的特征差异,但需注意变量顺序和量纲统一。通过rescale=TRUE自动标准化各变量至相同尺度,配合清晰图例(如区分物种的⭕标记)和主题定制(如蓝色坐标轴文字),使图形更具可读性。代码编写时,先聚合数据(aggregate计算物种均值)再绘图,并采用分层语法(+连接主题和标题),既保持逻辑清晰又便于后期调整。观察发现setosa在Petal.Width上显著区别于其他两类,验证了该物种的独特性。

3 星图和脸谱图

3.1 星图

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

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

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

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

  • 心得体会: 星图通过多边形的形状和面积直观呈现多维数据特征,特别适合比较不同类别的整体模式。代码中使用scale()标准化数据确保各变量可比性,draw.segments=TRUE生成扇形区域比传统射线更易解读。注意修正代码中的拼写错误(如mfrom应为mfrowTabels应为labels),这提醒我们在可视化过程中要仔细检查参数名称。通过调整key.loc参数优化图例位置,避免遮挡关键信息。观察发现setosa的星图呈现明显紧凑的扇形结构,印证了该物种在特征上与其他两类的高度差异性。标准化处理和矩阵转换(as.matrix())的预处理步骤为后续分析奠定了良好基础。

3.3 脸谱图

  • 采用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.4 图形观察和代码编写的心得体会

  • 心得体会: 脸谱图(Chernoff Faces)通过人脸特征来编码多维数据,这种拟人化的呈现方式能激发直观联想,但需注意不同面部特征对应变量的合理映射。代码中通过summarise计算物种均值简化图形复杂度,ncol.plot=3的布局使三类对比一目了然。观察发现setosa的脸型明显更圆润(可能对应较小的Petal.Width),而virginica的五官更舒展(反映较大特征值),这种视觉差异与鸢尾花物种特性高度吻合。不过需注意:1)拼写错误(如包名ap1pack应为aplpack);2)变量名标准化(Sepa1→Sepal);3)脸谱解释需搭配图例说明各面部特征对应的具体变量,否则易导致主观误读。

4 聚类图和热图

4.1 系统聚类树状图

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

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

  • 心得体会: 圆形树状图通过环形布局直观展示层次聚类结构,比传统树状图更节省空间且具视觉吸引力。代码中标准化数据(scale())和Ward方法(method="ward.D2")的选用,有效提升了类间分离度。但需修正三处关键错误:1)颜色代码格式错误(如"W2E9FDF"应为"#2E9FDF");2)字符串引号混用('0ray30'应为"gray30");3)+操作符换行导致断裂。观察发现setosa能完美聚为一类,而versicolor和virginica存在少量交叉,这与鸢尾花物种间真实生物学差异一致。建议添加silhouette分析量化聚类质量,并通过cutree(hc, k=3)与原始标签对比验证分类准确性。图形配色和标签角度(如angle=45)的微调可进一步提升可读性。

4.2.1 K-menas聚类主成分图

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

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

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

  cluster size ave.sil.width
1       1   50          0.64
2       2   53          0.39
3       3   47          0.35

异常观测点(轮廓系数<0):
  观测编号
1      112
2      128

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

  • 心得体会: K-means聚类主成分图通过降维可视化高维数据的聚类结构,配合轮廓系数分析可有效评估聚类质量。代码中set.seed(123)确保结果可复现,nstart=25避免局部最优解,而ellipse.type="norm"的正态分布椭圆直观展示类别的分布范围。但需修正以下问题:1)theme_minima1()拼写错误(应为theme_minimal());2)管道操作符%>%误写为/>;3)si1变量名不一致(应为sil)。异常点检测(轮廓系数<0)通过红色标记突出显示分类不确定的样本,如versicolor和virginica交界处的样本。建议补充聚类结果与真实物种的交叉表(table(iris$Species, km_res$cluster)),可发现K-means能较好区分setosa,但对另两类存在误分,这与鸢尾花特征的自然重叠一致。图形中椭圆重叠区域恰好反映了这种生物学连续性。

4.4 热图

4.4.1 heatmap

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

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

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

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

  • 心得体会: 热图通过颜色梯度直观展示数据矩阵中的模式,结合行列聚类树状图能同时揭示样本和变量的关联性。代码中scale="row"的标准化处理凸显了不同物种在各特征上的相对差异,红-黄-绿渐变色阶(colorRampPalette)符合直觉认知。但需修正以下关键问题:1)管道操作符%s%应为%>%;2)聚类函数nclust不存在(应为hclust);3)代码不完整缺少闭合括号。观察发现:1)setosa样本在Petal.Width上呈现显著绿色(高值),与生物学特性一致;2)Sepal.Length与Sepal.Width在列聚类中被归为同一分支,反映其相关性。建议添加labRow=rownames(mat)显式标注行名,并通过ColSideColors参数添加物种分类的颜色侧边栏。热图边缘留白(margins)和标签旋转(如srtCol=45)的调整可优化可视化效果。