大数跨境
0
0

生信复习,GEO数据差异分析!

生信复习,GEO数据差异分析! 芒果师兄
2025-12-01
2
导读:GEO数据复现。
生信分析和数据挖掘,无论是GENT2、GEPIA差异表达平台,还是TISIDB、TIMER免疫浸润平台,抑或是K-M Plotter、PrognoScan生存分析平台,都无需R编写代码,容易上手。在线平台的数据分析虽然简单,但体现了生信分析的思路,适合小白入门!高段位的生信分析,R语言是基础。我们以GEO数据处理展开进阶教程的分享。
在一系列的生信分析和数据挖掘过程中,差异分析往往是第一步,|FoldChange| >2,p<0.05是我们做分析想要的结果。即使是用R 处理GEO、TCGA和CCLE等平台的数据做分析,甚至是用R 处理自测芯片或测序的数据做分析,没有差异也是枉然。
其实,很多数据库都可以做差异分析,只是侧重点不同。我们借助AQP9与肾透明细胞癌的关系,用在线工具和R两种方式展示差异表达。
GEPIA的数据源于GTEx和TCGA数据库RNA_Seq的数据,以箱线图展示。根据分析结果,AQP9在肾透明细胞癌中的表达升高,但并不显著,这可能是由于其筛选标准是 |Log2FC| >1, p <0.01(而不是0.05)造成的。
UALCAN的数据源于TCGA数据库RNA_Seq的数据,以箱线图展示,p value一般会给出具体数值,配色也很惊艳。UALCAN中的数据是处理好的,原始数据可下载。

CAMOIP的数据主要来自TCGA,可用于分析ICI-Treated和TCGA临床队列的表达数据。通过该数据库,可以探索TCGA和ICI-Treated中基因表达的差异。此处,我们采用TCGA Cohort的数据展示KIRC患者中AQP9与相关基因的表达情况。

当然,还有其他的在线分析平台,用于分析AQP9在肾透明细胞癌KIRC的表达差异,如GENT2、KM-Plotter、TIMER、CCLE等。这部分内容,我们不再做更多介绍,本次以R下载和处理展示GEO数据为主。
在论文Fig1中,作者通过TCGA、GEO和HPA数据库的在线数据,从转录水平和蛋白水平展示AQP9在肾透明细胞癌和癌旁组织中的表达差异。我们在分析肾透明细胞癌时,可以选择同样的数据集;在分析其他肿瘤类型时,可以选择类似的展示方式。

我们以GSE15111的数据为例复现,从数据下载、数据分组,到差异可视化展示。

####----GSE11151_ccRCC----####rm(list = ls())getwd()
#library(GEOquery)
#data <- getGEO("GSE46699",destdir = ".",AnnotGPL = F, getGPL = F)
exprset <- read.table(file = "GSE11151_series_matrix.txt.gz",                      sep = "\t",                      header = T,                      quote = '""',                      fill=T,                      comment.char = "!")
rownames(exprset) <- exprset[,1]exprset <- exprset[,-1]
####----002_Expression_log2_transform----####ex <- exprsetqx <- as.numeric(quantile(ex, c(0., 0.25, 0.5, 0.75, 0.99, 1.0), na.rm=T))LogC <- (qx[5] > 100) ||  (qx[6]-qx[1] > 50 && qx[2] > 0) ||  (qx[2] > 0 && qx[2] < 1 && qx[4] > 1 && qx[4] < 2)
if (LogC) {   ex[which(ex <= 0)] <- NaN  exprset <- log2(ex)  print("log2 transform finished")}else{    print("log2 transform not needed")}
library(limma) boxplot(exprset,outline=FALSE, notch=T, las=2)exprSet=normalizeBetweenArrays(exprset)boxplot(exprSet,outline=FALSE, notch=T, las=2)exprSet <- as.data.frame(exprSet)
####----003_probe_ID_translation----####platformMap <- data.table::fread("platformMap.txt",data.table = F)
index <-"GPL570"
paste0(platformMap$bioc_package[grep(index,platformMap$gpl)],".db")
if(!requireNamespace("hgu133plus2.db")){  options(BioC_mirror="https://mirrors.ustc.edu.cn/bioc/")  BiocManager::install("hgu133plus2.db",update = F,ask = F)
library("hgu133plus2.db")ids <- toTable(get("hgu133plus2SYMBOL"))ids <- idslength(unique(ids$probe_id))length(unique(ids$symbol))tail(sort(table(ids$symbol)))table(sort(table(ids$symbol)))plot(table(sort(table(ids$symbol))))
####----004_probe_ID_to_Expression----####library(dplyr)library(tibble)
exprSet <- exprSet %>%  rownames_to_column("probe_id")%>%  inner_join(ids,by="probe_id"%>%  select(-probe_id) %>%    select(symbol,everything()) %>%    mutate(rowMean =rowMeans(.[,-1])) %>  arrange(desc(rowMean)) %>  distinct(symbol,.keep_all = T) %>  select(-rowMean) %>  column_to_rownames("symbol")
save(exprSet,file = "exprSet11151.Rdata")exprSet <- as.data.frame(exprSet)
####----Sample_group (all the samples included)----####Normal <- data.table::fread("GSE15111_N.txt",data.table = F)Normal <- as.character(Normal)write(Normal,file = "Normal_sample.txt")
Tumor <- data.table::fread("GSE11151_T.txt",data.table = F)Tumor <- as.character(Tumor)write(Tumor,file = "Tumor_sample.txt")
library(dplyr)library(ggplot2)
DEGs <- select(exprSet,c("GSM281311""GSM281312""GSM281314""GSM281315""GSM281316",                         "GSM281285""GSM281286""GSM281287""GSM281288""GSM281289""GSM281290""GSM281291""GSM281292""GSM281293""GSM281294""GSM281295""GSM281296""GSM281297""GSM281298""GSM281299""GSM281300""GSM281301""GSM281302""GSM281303""GSM281304""GSM281305""GSM281306""GSM281307""GSM281308""GSM281309""GSM281310"))
group1 <- c(rep("normal",5),rep("cancer",26)) group1 <- factor(group1,levels = c("normal","cancer"))
design <- model.matrix(~0 + group1)colnames(design) <- levels(group1)designcontrast.matrix <- makeContrasts( "cancer - normal", levels = design)
fit1 <- lmFit(DEGs,design)fit1 <- contrasts.fit(fit1, contrast.matrix) fit2 <- eBayes(fit1)allDiff=topTable(fit2,adjust='fdr',coef=1,number=10000write.table(allDiff,file="alldiff.xls",sep="\t",quote=F)
allLimma=allDiffallLimma=allLimma[order(allLimma$logFC),]allLimma=rbind(Gene=colnames(allLimma),allLimma)write.table(allLimma,file="GSE15111_limmaTab.txt",sep="\t",quote=F,col.names=F)
上述为常规操作,下载数据,数据标准化,分组和差异分析。接下来绘制火山图和热图。
logFoldChange=1adjustP=0.05diffSig <- allDiff[with(allDiff, (abs(logFC)>logFoldChange & adj.P.Val < adjustP )), ]write.table(diffSig,file="diff.xls",sep="\t",quote=F)diffUp <- allDiff[with(allDiff, (logFC>logFoldChange & adj.P.Val < adjustP )), ]write.table(diffUp,file="up.xls",sep="\t",quote=F)diffDown <- allDiff[with(allDiff, (logFC<(-logFoldChange) & adj.P.Val < adjustP )), ]write.table(diffDown,file="down.xls",sep="\t",quote=F)
hmExp=DEGs[rownames(diffSig),]diffExp=rbind(id=colnames(hmExp),hmExp)write.table(diffExp,file="diffExp.txt",sep="\t",quote=F,col.names=F)
xMax=max(-log10(allDiff$adj.P.Val))   yMax=max(abs(allDiff$logFC))library(ggplot2)allDiff$change <- ifelse(allDiff$adj.P.Val < 0.05 & abs(allDiff$logFC) > 1,                         ifelse(allDiff$logFC > 1,'UP','DOWN'),                         'NOT')
ggplot(data= allDiff, aes(x = -log10(adj.P.Val), y = logFC, color = change)) +  geom_point(alpha=0.8, size = 1) +  theme_bw(base_size = 15) +  theme(plot.title=element_text(hjust=0.5),   #  标题居中        panel.grid.minor = element_blank(),        panel.grid.major = element_blank()) + # 网格线设置为空白  geom_hline(yintercept= 0 ,linetype= 2 ) +  scale_color_manual(name = ""                     values = c("red""green""black"),                     limits = c("UP""DOWN""NOT")) +  xlim(0,xMax) +   ylim(-yMax,yMax) +  labs(title = 'Volcano'x = '-Log10(adj.P.Val)'y = 'LogFC')
topDEGs = DEGs[rownames(diffSig)[1:15],]annotation_col = data.frame(group = group1)rownames(annotation_col) = colnames(DEGs)library(pheatmap)
pheatmap(topDEGs,annotation_col = annotation_col,         color = colorRampPalette(c("blue""gray""red"))(50),         fontsize  = 7)
最后,我们需要提取AQP9在肿瘤和癌旁的分组及表达信息,然后用ggplot2()绘图即可,绘图的类型包括箱线图、小提琴图和散点图等,展示方式是可以自己选择的。
####----Plot_for_Target_Genes----####TarDEGs <- as.data.frame(t(DEGs))
DF1 <- select(TarDEGs,c("AQP9"))group <- as.data.frame(c(rep("normal",5),rep("cancer",26)))names(group)[1] <- "group"DF2 <- cbind(DF1,group)
library(ggplot2)
ggplot(data = DF2,aes(x=group,y=AQP9,fill=group))+  geom_boxplot()+  geom_point()+  theme_bw()
# Basic violin plotggplot(data = DF2,aes(x=group,y=AQP9,fill=group)) +   geom_violin()
# Basic dot plotggplot(data = DF2,aes(x=group,y=AQP9,fill=group)) +  geom_dotplot(binaxis='y', stackdir='center')
上述绘图再加上p值或者优化即可用于文章发表。一起学习,共同成长,遇见更好的自己!

【声明】内容源于网络
0
0
芒果师兄
内容 1109
粉丝 0
芒果师兄
总阅读65
粉丝0
内容1.1k