批次效应差异分析,文氏图富集

本文介绍了如何使用R语言中的各种包,如GEOquery、limma等,对GEO数据库的GSE116959数据集进行下载、预处理、表达矩阵标准化、分组、差异表达分析以及基因富集网络分析的过程。
摘要由CSDN通过智能技术生成

if (!requireNamespace("BiocManager", quietly = TRUE))
  install.packages("BiocManager")
BiocManager::install("GEOquery")
rm(list=ls())  #清空环境内变量
options(stringsAsFactors = F)  #避免自动将字符串转换为R语言因子
suppressMessages(library(GEOquery))
library(stringr)
library(ggplot2)
library(reshape2)
library(limma)
gset = getGEO('GSE116959', destdir=".", AnnotGPL = F, getGPL = F)  #设置后两个为T比较耗时,而且作用不大
exp<-exprs(gset[[1]])  #exp即为表达矩阵
#使用pData()函数提取临床信息
pdata<-pData(gset[[1]]) 
#临床信息中哪一列提供了分组信息需要自己去鉴别
#采用字符串分隔函数按空格进行分隔取第三位
group_list<-str_split(pdata$characteristics_ch1.4,' ',simplify = T)[,3]

#设置样本分组
group_list = factor(group_list,levels = c("Normal","Tumor"))  #设置为因子变量
table(group_list)
library(limma) 
exp=normalizeBetweenArrays(exp)  #limma中的校正函数

exp_LL=melt(exp)     #melt表示拆分数据
colnames(exp_LL)=c('probe','sample','value') #设置拆分后列名
exp_LL$group=rep(group_list,each=nrow(exp))  #获得其分组
head(exp_LL)
pp=ggplot(exp_LL,aes(x=sample,y=value,fill=group))+  
  geom_boxplot()+
  ggtitle("校正后数据分布")+  #标题
  theme(plot.title = element_text(hjust = 0.5)) +  #标题居中
  #theme(axis.text.x = element_blank()  #隐去x轴文字
  theme(axis.text.x=element_text(angle=90,hjust = 1,size=7)  #调整x轴名称文字属性
  )#绘制箱线图
print(pp)

range(exp) #查看表达矩阵的取值范围,一般而言,范围在20以内的表达值基本已经经过了log对数转换。
library(FactoMineR)
library(factoextra)
dat=as.data.frame(t(exp))
dat.pca <- PCA(dat, graph = FALSE)
fviz_pca_ind(dat.pca,
             geom.ind = "point",
             col.ind = group_list,
             addEllipses = TRUE,
             palette = "jco", 
             legend.title = "Groups"
)
gpl <- getGEO('GPL17077', destdir=".")
colnames(Table(gpl))
head(Table(gpl)[,c(1,7)]) ## 选择自己需要的列
probe2gene=Table(gpl)[,c(1,7)]
probe2gene<-subset(probe2gene,GENE_SYMBOL!='')
ids<-probe2gene
head(probe2gene)
library(devtools)
#install_github("jmzeng1314/idmap3") #安装方法
library(idmap3)
ids=idmap3::get_pipe_IDs('GPL17077')
head(ids) 
library(tidyverse)
exp <- as.data.frame(exp) #也可以直接加到管道操作中
#id匹配
library(dplyr)
exp <- exp %>% 
  mutate(probe_id=rownames(exp)) %>% 
  inner_join(ids,by="probe_id") %>%
  select(probe_id, symbol, everything())

exp <- exp[!duplicated(exp$symbol),]  #去除重复
rownames(exp) <- exp$symbol
exp <- exp[,-(1:2)] #去掉第一列和第二列
exp[1:5,1:4]  #这里得到处理完成后最终的表达矩阵
design=model.matrix(~group_list)
fit=lmFit(exp,design)
fit=eBayes(fit)
deg=topTable(fit,coef=2,number = Inf)  #提取所有基因的差异分析结果
colnames(deg)
##设置logFC值和P值来标记上下调基因
logFC=1
P.Value = 0.05
#type1 = (deg$P.Value < P.Value)&(deg$logFC < -logFC)
#type2 = (deg$P.Value < P.Value)&(deg$logFC > logFC)
#deg$Group = ifelse(type1,"Down",ifelse(type2,"Up","Not-Sig"))
#table(deg$Group)
# 直接索引
deg2 <- deg[deg$P.Value < P.Value&(abs(deg$logFC) > logFC), ]
write.csv(deg2[0], "deg2.csv")

library(org.Hs.eg.db)
library(AnnotationDbi) 
library(DOSE)
library(clusterProfiler)
gene_symbol=read.csv("deg1.1.csv",header=FALSE)
#install.packages("VennDiagram") 
library(VennDiagram)
venn.plot<-venn.diagram(x=list(前=gene_symbol$V1,后=gene_symbol$V2),
                        filename ="venntu.png", #输出的图片名称,可以选不同的图片格式,如png,tiff等
                        fill=c("cornflowerblue","red"),##圆圈颜色
                        col = "transparent",alpha = 0.50,cex = 1.0,fontface = "bold", ##透明度调整与字体调整等
                        cat.col = c("darkblue", "darkgreen"), ##字体颜色调整
                        cat.cex = 1.5,cat.dist = 0.07,margin = 0.2) ##字体大小调整

entrez_id = mapIds(x = org.Hs.eg.db, keys = gene_symbol$V1, keytype = "SYMBOL", column = "ENTREZID")
result2=enrichDO(gene = entrez_id,ont = "DO",pvalueCutoff = 0.05,qvalueCutoff = 0.05)
barplot(result2)
cnetplot(result2,categorySize="pvalue")
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值