# 加载必要的包
library(DESeq2)
library(ggplot2)
# 自定义函数:多组样本差异分析
multi_group_deseq_analysis <- function(exprSet, group, save_dir = "DESeq2_Results") { # 创建保存结果的目录 save_dir <- paste0(save_dir, "/") dir.create(save_dir, showWarnings = FALSE) # 创建分组信息 colData <- data.frame(row.names = colnames(exprSet), group = factor(group)) # 确保分组是因子 # 构建 DESeq2 数据集 dds <- DESeqDataSetFromMatrix(countData = exprSet, colData = colData, design = ~ group) # 过滤低表达基因 dds <- dds[rowSums(counts(dds)) > 10, ]
# 差异分析
dds <- DESeq(dds) # 获取所有对比的结果名称 results_names <- resultsNames(dds) cat("Available contrasts:\n", results_names, "\n") # 遍历所有对比组,生成差异结果 for (i in 2:length(results_names)) { res_name <- results_names[i] cat("Processing contrast:", res_name, "\n") # 获取差异分析结果 res <- results(dds, name = res_name) res_lfc <- lfcShrink(dds, coef = i, res = res, type = "apeglm") # 保存结果到 CSV 文件 write.csv(as.data.frame(res), file = paste0(save_dir, res_name, "_results.csv")) write.csv(as.data.frame(res_lfc), file = paste0(save_dir, res_name, "_lfcShrink_results.csv")) # 绘制 MA 图 png(filename = paste0(save_dir, res_name, "_MA_plot.png"), width = 800, height = 800) plotMA(res, ylim = c(-3, 3), main = paste0(res_name, " MA Plot")) dev.off() png(filename = paste0(save_dir, res_name, "_MA_plot_lfcShrink.png"), width = 800, height = 800) plotMA(res_lfc, ylim = c(-3, 3), main = paste0(res_name, " MA Plot (LFC Shrink)")) dev.off() } cat("Analysis completed. Results saved in:", save_dir, "\n")}# 示例调用# 表达矩阵 (基因 x 样本)# exprSet <- matrix(rpois(1000, lambda = 10), nrow = 100, ncol = 10)# 分组信息 (样本分组)# group <- c("A", "A", "B", "B", "C", "C", "D", "D", "E", "E")# 运行分析# multi_group_deseq_analysis(exprSet, group, save_dir = "MultiGroup_DESeq_Results")
本站原创,如若转载,请注明出处:https://www.ouq.net/3709.html