当前位置: 首页 > news >正文

RNA-seq分析之共识聚类分析

这个主要是用来对RNA-seq的数据进行划分(例如肿瘤细分),根据划分结果分组,进行分析,常见于冷热肿瘤

# 肿瘤样本共识聚类分析(ConsensusClusterPlus)
setwd("G:/cold_hot tumor/parting")  # 设置工作目录# 安装并加载所需包
if (!require("BiocManager", quietly = TRUE)) install.packages("BiocManager")
if (!require("ConsensusClusterPlus", quietly = TRUE)) {BiocManager::install("ConsensusClusterPlus")
}
library(ConsensusClusterPlus)# 读取表达数据(行=基因,列=样本)
expr_data <- read.delim("G:/cold_hot tumor/Preliminarily processed data/Count.txt",header = TRUE,check.names = FALSE,  # 保留原始样本名格式row.names = 1         # 第一列作为行名(基因名)
)# 数据预处理
## 检查数据基本信息
cat("原始数据维度(基因数×样本数):", dim(expr_data), "\n")
if (any(is.na(expr_data))) {stop("数据中存在缺失值,请先处理缺失值!")
}## 筛选高变基因(取前5000个MAD最大的基因,提高聚类效率)
mads <- apply(expr_data, 1, mad)  # 计算每行(基因)的中位数绝对偏差
expr_filtered <- expr_data[rev(order(mads))[1:5000], ]  # 按MAD降序取前5000个基因## 行中心化(每个基因减去其中位数,减少基线差异影响)
expr_scaled <- sweep(expr_filtered, 1, apply(expr_filtered, 1, median, na.rm = TRUE),  # 按行减中位数FUN = "-"
)# 共识聚类分析
## 转换为矩阵(ConsensusClusterPlus要求输入矩阵格式)
expr_matrix <- as.matrix(expr_scaled)## 运行聚类(关键参数:maxK=20尝试最多20个聚类,reps=1000次重复)
cc_result <- ConsensusClusterPlus(d = expr_matrix,          # 输入矩阵maxK = 20,                # 最大聚类数reps = 1000,              # 重复次数(越大结果越稳定)pItem = 0.8,              # 每次抽样保留80%样本pFeature = 1,             # 保留所有特征基因clusterAlg = "hc",        # 聚类算法:层次聚类distance = "pearson",     # 距离度量:皮尔逊相关系数title = "consensus_clusters",  # 结果保存文件夹名plot = "png",             # 输出聚类相关图表(png格式)writeTable = FALSE        # 不重复写入中间文件
)# 计算并可视化聚类一致性(帮助确定最佳聚类数k)
icl_result <- calcICL(cc_result, title = "icl_results", plot = "png")# 提取聚类结果(根据实际情况选择最佳k值,这里以k=3为例)
best_k <- 3  # 请根据一致性矩阵和ICL图调整最佳k值
cluster_info <- cc_result[[best_k]]$consensusClass  # 样本-聚类对应关系
cat("\n最佳聚类数k=", best_k, "时的样本分布:\n")
print(table(cluster_info))  # 展示每个聚类的样本数量# 整理并保存结果
## 构建样本-分组数据框
group_df <- data.frame(sample = names(cluster_info),cluster = paste0("Cluster", cluster_info),  # 聚类命名为Cluster1,2,...row.names = names(cluster_info),check.names = FALSE
)## 合并聚类信息与原始表达数据(可选,按需使用)
expr_with_cluster <- rbind(Cluster = group_df$cluster,  # 首行添加聚类信息expr_data  # 原始表达数据
)## 保存结果文件
# 1. 样本聚类信息
write.table(group_df,file = "sample_clusters.txt",sep = "\t",row.names = TRUE,col.names = TRUE,quote = FALSE
)# 2. 带聚类信息的表达矩阵(可选)
write.table(expr_with_cluster,file = "expr_with_clusters.txt",sep = "\t",row.names = TRUE,col.names = NA,  # 避免列名偏移quote = FALSE
)cat("\n分析完成!结果文件已保存至工作目录:\n")
cat("1. 样本聚类信息:sample_clusters.txt\n")
cat("2. 带聚类信息的表达矩阵:expr_with_clusters.txt\n")

http://www.dtcms.com/a/391707.html

相关文章:

  • Linux开发——ARM介绍
  • Force Dimension Sigma力反馈设备远程遥操作机械臂外科手术应用
  • 泛函驻点方程与边界条件的推导:含四阶导数与给定边界
  • C#开发USB报警灯服务,提供MES或者其它系统通过WebAPI调用控制报警灯
  • Docker基础篇08:Docker常规安装简介
  • 【软考-系统架构设计师】软件架构分析方法(SAAM)
  • 广西保安员考试题库及答案
  • 【Vue】Vue 项目中常见的埋点方案
  • 投稿之前去重还是投稿之后去重?
  • 【包教包会】CocosCreator3.x全局单例最优解
  • 为什么要使用dynamic_cast
  • 随机过程笔记
  • OpenHarmony:NDK开发
  • Dify 从入门到精通(第 87/100 篇):Dify 的多模态模型可观测性(高级篇)
  • 5种获取JavaScript时间戳函数的方法
  • Redis 三种集群模式
  • 初识kotlin协程
  • 多线程——内存可见性问题和指令重排序问题(volatile详解)
  • Linux第十八讲:应用层协议Http
  • 【C++】速识map与set
  • 多层感知机(MLP)
  • Linux系统诊断——拷贝日志系统
  • python中 ​实例方法​(普通方法)和 ​类方法​ 的核心差异
  • Sping AI接入deepseek-本地部署大模型-第二期
  • 数据分析-数据指标体系搭建及应用
  • 计算机专业课《大数据技术》课程导览:开启数据智能时代
  • dumpsys battery 简介
  • 从 CNN 基础到 AlexNet:计算机视觉的破局之路
  • 苏州自动化工厂1台服务器如何5人并发SolidWorks设计
  • 固态硬盘数据恢复一般多少钱?费用分析+恢复教程