利用DESeq2包及clusterProfiler包进行差异表达分析及GO分析

DESeq2差异分析与ClusterProfiler富集:挖掘基因表达变化背后的生物学通路
本文介绍了如何使用DESeq2包进行基因表达差异分析,详细步骤包括数据预处理、模型构建、结果筛选,并利用clusterProfiler进行基因富集研究。最终输出了显著差异表达基因并探讨其可能的功能注释。

DESeq2包进行差异分析

a<-read.table(file ="GEO13067.txt",
              sep="\t",
              header = T)
##读入表达矩阵
a<-a[,-1]
rownames(a)<-a[,1]
a<-as.data.frame(a)
a<-t(a)
a[1:3,1:3]
##整理成数据框,行名为样本名,列名为基因名
order(a$TP53)
a<-a[order(a$TP53),]
head(a$TP53)
##将TP53基因的表达量按照从低到高对样本排序
a<-t(a)
dim(a)
a<-a+1
###得到a为按照TP53表达量排序的表达矩阵
####下面进行差异分析
##BiocManager::install("DESeq2")
library(DESeq2)
##加载包
a<-(2^a)-1
a<-floor(a)
##表达矩阵数据需要count值,这里变回原始count值并且取整数
condition <- factor(c(rep("low",37),
                      rep("high",37)),
                    levels = c("low","high"))
condition
##构建分组,前37组为低表达组,后37组为高表达组
colData <- data.frame(row.names=colnames(a), condition)
colData
##得到样本名对应的分组信息
dds <- DESeqDataSetFromMatrix(a, colData, 
                              design= ~ condition )
head(dds)  #查看一下构建好的矩阵
dds <- DESeq(dds)
dds
res = results(dds, contrast=c("condition", "low", "high"))
res = res[order(res$pvalue),]
head
<think>我们正在处理GEO数据的分析流程,括下载、预处理、DESeq2差异分析、以及KEGG/GO富集分析。以下步骤将详细说明如何使用R语言完成这些任务。注意:GEO数据通常括微阵列数据和测序数据(如RNA-seq)。DESeq2通常用于RNA-seq数据的差异分析。如果数据是微阵列数据,我们通常使用limma。但用户明确提到使用DESeq,因此我们假设数据是RNA-seq数据(尽管GEO中大部分是微阵列,但RNA-seq数据也越来越多)。如果数据是微阵列,则不能使用DESeq2,需要改用limma。这里我们按照RNA-seq数据来处理,因为用户要求DESeq。步骤概述:1.下载GEO数据(使用GEOquery2.数据预处理(括质量控制和标准化)3.使用DESeq2进行差异表达分析4.进行KEGG和GO富集分析(使用clusterProfiler)注意:由于GEO数据集的异质性,具体步骤可能需要根据数据情况调整。详细步骤:###1.下载GEO数据使用GEOquery从GEO数据库下载数据。假设用户已经知道GEOaccessionnumber(例如GSE12345)。 ```r#安装必要的(如果尚未安装)if(!require("BiocManager",quietly =TRUE))install.packages("BiocManager") BiocManager::install(c("GEOquery", "DESeq2","clusterProfiler", "org.Hs.eg.db", "ggplot2")) #加载library(GEOquery) library(DESeq2) library(clusterProfiler) library(org.Hs.eg.db)library(ggplot2) #下载GEO数据集(这里以GSE12345为例,替换为实际编号)gse<-getGEO("GSE12345", GSEMatrix= TRUE)#注意:对于RNA-seq数据,GEO中可能存储的是处理后的表达矩阵,也可能是原始数据(如SRA文件)。这里假设我们下载的是表达矩阵。 #如果数据是原始数据(如SRA文件),则需要先下载原始数据,然后用其他工具(如salmon,kallisto)进行定量,再导入R。但GEOquery通常下载的是处理后的矩阵。#提取表达矩阵和表型数据expression_data <-exprs(gse[[1]])#假设第一个GPLpheno_data <-pData(gse[[1]])#查看表型数据,确定分组信息head(pheno_data) ```###2.数据预处理预处理括过滤低表达基因、归一化等。对于DESeq2,我们使用原始计数数据(countdata)。但注意:GEO中的RNA-seq数据可能已经标准化,不是原始计数。因此,如果数据不是原始计数,我们可能需要从原始数据开始。如果无法获得原始计数,则不能使用DESeq2(它要求整数计数)。在这种情况下,用户可能需要考虑使用limma(针对标准化后的数据)。假设我们下载的是原始计数矩阵(或从其他途径获得原始计数),我们可以进行以下预处理:```r#创建DESeqDataSet对象#假设分组信息在pheno_data的"group"列中(用户需要根据实际情况调整) dds <-DESeqDataSetFromMatrix(countData =expression_data,colData =pheno_data,design= ~group)#这里group是表型数据中的一个列,代表分组#预处理步骤:过滤低表达基因(例如,至少在一组中有足够多的样本表达) keep<- rowSums(counts(dds) >=10) >=min(table(pheno_data$group))#调整阈值dds <-dds[keep,]#运行DESeq2标准分析流程dds<- DESeq(dds)``` ###3.差异表达分析使用DESeq2进行差异分析,提取结果。```r#获取结果,例如比较组"group"中的"treatment"组相对于"control"组res <-results(dds,contrast =c("group","treatment", "control"))#将结果按调整p值排序resOrdered<- res[order(res$padj),]#将结果转换为数据框res_df <-as.data.frame(resOrdered) #保存结果write.csv(res_df,file ="DESeq2_results.csv") #查看显著差异表达基因(例如,调整p值小于0.05,且|log2FC|>1)sig_genes <-subset(res_df,padj<0.05 &abs(log2FoldChange)>1)``` ###4. KEGG和GO富集分析使用clusterProfiler进行富集分析。注意:差异分析结果中的基因标识符需要转换(通常为EntrezID或SYMBOL)。这里假设我们使用基因Symbol。```r#提取显著差异基因的基因Symbol(假设行名为Symbol) gene_list<- rownames(sig_genes) #如果行名不是Symbol,而是其他标识符(如Ensembl ID),则需要转换#这里假设行名是Symbol,但为了通用性,我们使用mapIds进行转换(如果必要) #将基因Symbol转换为Entrez ID(因为富集分析需要Entrez ID) gene_entrez<- mapIds(org.Hs.eg.db,keys =gene_list,column ="ENTREZID",keytype ="SYMBOL",multiVals ="first") #去除NA值gene_entrez <-na.omit(gene_entrez) #GO富集分析(生物过程BP) go_enrich <-enrichGO(gene=gene_entrez,OrgDb=org.Hs.eg.db,keyType="ENTREZID",ont="BP",#也可以是"CC","MF"或"ALL"pAdjustMethod ="BH",pvalueCutoff=0.05,qvalueCutoff=0.2) #可视化GO结果dotplot(go_enrich, title="GOEnrichment (BP)") #KEGG富集分析kegg_enrich <-enrichKEGG(gene=gene_entrez,organism= 'hsa',#人类:'hsa',其他物种需调整pvalueCutoff =0.05)#可视化KEGG结果dotplot(kegg_enrich, title= "KEGG Enrichment") #保存结果write.csv(as.data.frame(go_enrich),"GO_enrichment.csv") write.csv(as.data.frame(kegg_enrich), "KEGG_enrichment.csv")``` ###注意事项-上述流程假设数据为人类数据。如果是其他物种,需要更改org.db和KEGG的organism参数。-如果数据不是RNA-seq原始计数,而是微阵列数据,则不能使用DESeq2,应该使用limma进行差异分析。- GEO数据集的异质性可能导致某些步骤需要调整,用户需根据实际情况修改。§§相关问题§§1.如何处理GEO中的微阵列数据与RNA-seq数据?2.如果GEO数据提供的是原始测序数据(如SRA文件),如何进行处理? 3.差异分析中如何选择正确的分组信息?4.富集分析结果如何进一步可视化(如通路图)? 5.如何对GEO数据进行质量控制(QC)?</think>### GEO数据分析流程:从下载到富集分析 以下步骤基于R语言实现GEO数据下载、预处理、DESeq2差异分析及KEGG/GO富集分析。流程以人类转录组数据为例(其他物种需调整参数): --- ### **1. GEO数据下载与加载** ```r # 安装依赖 if (!require("BiocManager", quietly = TRUE)) install.packages("BiocManager") BiocManager::install(c("GEOquery", "DESeq2", "clusterProfiler", "org.Hs.eg.db")) # 加载 library(GEOquery) library(DESeq2) library(clusterProfiler) library(org.Hs.eg.db) # 下载GEO数据集(示例:GSE12345) gse <- getGEO("GSE12345", GSEMatrix = TRUE, getGPL = TRUE) # 提取表达矩阵和样本信息 expr_data <- exprs(gse[[1]]) # 表达矩阵 pheno_data <- pData(gse[[1]]) # 样本表型数据 ``` > **注意**: > - 替换`GSE12345`为实际GEO编号 > - 检查`pheno_data`中的分组列(如`"group"`或`"disease_state"`)用于后续差异分析[^3] --- ### **2. 数据预处理** ```r # 过滤低表达基因(保留在>50%样本中表达量>10的基因) keep <- rowSums(expr_data > 10) > ncol(expr_data)*0.5 expr_filtered <- expr_data[keep, ] # 标准化(DESeq2要求原始整数计数,若非原始计数需转换) # 若数据为FPKM/TPM,需用tximport转换(此处假设为原始计数) dds <- DESeqDataSetFromMatrix( countData = round(expr_filtered), colData = pheno_data, design = ~ group # 根据表型定义分组变量 ) # 预过滤 dds <- dds[rowSums(counts(dds)) >= 10, ] ``` > **关键点**: > - 微阵列数据需用`limma`而非DESeq2 > - 确认数据是否为**原始计数**(DESeq2必需)[^1] --- ### **3. DESeq2差异分析** ```r # 运行差异分析 dds <- DESeq(dds) res <- results(dds, contrast = c("group", "treatment", "control")) # 定义比较组 # 提取显著差异基因(adj.p<0.05, |log2FC|>1) sig_genes <- subset(res, padj < 0.05 & abs(log2FoldChange) > 1) write.csv(sig_genes, "diff_genes.csv") ``` > **参数说明**: > - `contrast`参数需匹配表型数据中的分组列名和水平 > - 可视化:`plotMA(res)`或`ggplot2`火山图[^1] --- ### **4. KEGG/GO富集分析** ```r # 转换基因ID(Symbol → Entrez ID) entrez_ids <- mapIds( org.Hs.eg.db, keys = rownames(sig_genes), keytype = "SYMBOL", column = "ENTREZID" ) # 去除NA值 entrez_ids <- na.omit(entrez_ids) # GO富集分析(生物过程) go_bp <- enrichGO( gene = entrez_ids, OrgDb = org.Hs.eg.db, ont = "BP", # BP:生物过程, CC:细胞组分, MF:分子功能 pAdjustMethod = "BH", pvalueCutoff = 0.05 ) # KEGG通路富集 kegg <- enrichKEGG( gene = entrez_ids, organism = "hsa", # 人类代码'hsa',小鼠为'mmu' pvalueCutoff = 0.05 ) # 可视化 dotplot(go_bp, title = "GO Biological Process") dotplot(kegg, title = "KEGG Pathways") ``` > **注意**: > - 非模式生物需用`enrichr`等替代工具 > - 结果保存:`write.csv(as.data.frame(go_bp), "GO_results.csv")`[^1] --- ### **常见问题处理** 1. **非原始计数数据**: - 若GEO提供FPKM/TPM,需通过SRA下载原始FASTQ,用`salmon`或`kallisto`定量后导入DESeq22. **多平台数据**: - 使用`GEOquery::getGEOSuppFiles()`下载原始文件,用`read.delim()`手动整合。 3. **批次效应**: - 添加`design = ~ batch + group`或在预处理阶段用`sva::ComBat()`校正。 > 完整代码示例见:[GEO差异分析GitHub仓库](https://github.com/your-repo)[^3]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值