You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用R绘制图表可视化并分组相似耐药模式?

耐药模式相似性分组与可视化实现方案

1. 数据预处理

首先统一所有样本的耐药模式长度(部分样本如G只有5位,需补全到最长的9位,默认补S):

library(tidyverse)
library(stringr)
library(dendextend)
library(pheatmap)

# 读取原始数据
dat <- read.table(text="Id  Resistance.Pattern    
A   SSRRSSSSR     
B   SSSRSSSSR  
C   RRRRSSRRR 
D   SSSSSSSSS     
E   SSRSSSSSR  
F   SSSRRSSRR
G   SSSSR     
H   SSSSSSRRR    
I   RRSSRRRSS", header=TRUE)

# 补全耐药模式至9位,右侧补S
dat <- dat %>%
  mutate(Resistance.Pattern = str_pad(Resistance.Pattern, width = 9, side = "right", pad = "S"))

2. 转换为二进制矩阵

将耐药模式拆分为单个位点,把S转为0、R转为1,构建数值矩阵用于计算相似性:

resist_matrix <- dat %>%
  separate_rows(Resistance.Pattern, sep = "") %>%
  filter(Resistance.Pattern != "") %>%
  group_by(Id) %>%
  mutate(position = row_number()) %>%
  ungroup() %>%
  pivot_wider(names_from = position, values_from = Resistance.Pattern) %>%
  column_to_rownames("Id") %>%
  mutate(across(everything(), ~ifelse(. == "R", 1, 0)))

3. 计算相似性并聚类

用汉明距离衡量样本间耐药模式的差异(距离越小,模式越相似),再通过层次聚类分组:

# 计算标准化汉明距离
resist_dist <- dist(resist_matrix, method = "manhattan") / ncol(resist_matrix)

# 层次聚类(ward.D2方法优化组内方差)
resist_clust <- hclust(resist_dist, method = "ward.D2")

# 绘制聚类树状图
dend <- as.dendrogram(resist_clust)
plot(dend, main = "耐药模式相似性聚类树状图", xlab = "样本ID")

4. 可视化相似性热图

结合聚类结果绘制热图,直观展示每个样本的耐药模式及分组关系:

pheatmap(resist_matrix,
         clustering_distance_rows = resist_dist,
         clustering_method = "ward.D2",
         main = "耐药模式相似性热图",
         labels_row = rownames(resist_matrix),
         show_colnames = FALSE,
         color = c("#FFFFFF", "#E63946"), # 白色=敏感S,红色=耐药R
         treeheight_row = 20)

说明

  • 汉明距离适合二进制(二元)数据的相似性度量,能精准反映两个耐药模式的位点差异
  • ward.D2聚类方法会优先合并组内方差最小的类,让分组更合理
  • 热图+树状图的组合既能看到单个样本的耐药情况,也能清晰分辨相似模式的分组

内容的提问来源于stack exchange,提问作者YASIR AA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 23:05:31