win10下的RNA测序(二)

写在前面

这部分讲的是根据上游得到的counts数做差异分析以及通路富集

读入文件

options(stringsAsFactors = F)
rm(list = ls())
pwd = "E:\\process\\"
setwd(pwd)
library(readr)
library(dplyr)
data = read.csv("exp.txt",header = T,sep = "\t",
                fill=T,stringsAsFactors=F,skip = 1)
data = data[,c(1,7:15)]# 提取探针以及bam文件对应的counts数

先将探针转换为基因ID

这边转化ID,刚好之前写了个教程https://editor.csdn.net/md/?articleId=115487976,本着用代码处理的原则,则尝试了新方法

library("clusterProfiler")
library(dplyr)
gene = data$Geneid# %>% as.data.frame()
df = data.frame(gene)
#BiocManager::install("AnnotationDbi")
library("AnnotationDbi")
library("org.Mm.eg.db")
df$symbol <- mapIds(org.Mm.eg.db,
                    keys=gene,
                    column="SYMBOL",
                    keytype="ENSEMBL",
                    multiVals="first")
df = na.omit(df)

提取有对应基因的表达谱

如果一个基因对应多个探针的话,取最大值


## 2.1 subset the probe correspondant  to gene_symbols 
data = subset(data,Geneid%in%df$gene)
rownames(data) = data$Geneid 
df = df[match(df$gene,rownames(data)),]
data = data[,-1]
## 2.2 a gene correspondant different probe,you can choose mean or max 
data_finally = apply(data,2,function(x){
  tapply(x,df$symbol,max)
})

差异分析

# 加载包
library(edgeR)
library(limma)

# 设定组别
group_list = c(rep("PBS",3),rep("yangxing",3),rep("yinxing",3))
design <- model.matrix(~0+factor(group_list))
colnames(design)=levels(factor(group_list))

## 3.1 filter some low express counts and transform to log2
dge <- DGEList(counts=data_finally)
keep <- filterByExpr(dge, design)
dge <- dge[keep,,keep.lib.sizes=FALSE]
dge <- calcNormFactors(dge)
logCPM <- cpm(dge, log=TRUE, prior.count=3)
rownames(design)=colnames(dge)

## 3.2 construct contrast matrix and search degs  
contrast_class=c("yangxing-PBS","yinxing-PBS","yangxing-yinxing")

## 3.3 define function to search degs 
search_limma_degs=function(data_subset,group_list,contrast_class){
    design <- model.matrix(~0+factor(group_list))
    colnames(design)=levels(factor(group_list))
    head(design)
    exprSet=as.matrix(data_subset)
    mode(exprSet)="numeric"
    rownames(design)=colnames(exprSet)
    head(design)
    
    # 2.2 contrast.matrix
    
    contrast.matrix<-makeContrasts(contrasts = contrast_class,
                                   levels = design)
    
    # 3.search the degs 
    # 3.1 degs 
    ##step1,lmfit起过滤的手续
    fit <- lmFit(exprSet,design)
    ##step2
    fit2 <- contrasts.fit(fit, contrast.matrix)
    fit2 <- eBayes(fit2)  ## default no trend !!!
    ##eBayes() with trend=TRUE
    
    data_degs=list()
    for (i in 1:length(contrast_class)){
      print(i)
      tempOutput1 = topTable(fit2, coef=i, number =Inf)
      data_degs[[i]] = na.omit(tempOutput1) 
    }
    return(data_degs)
  }
# search degs 
data_degs=search_limma_degs(data_subset = logCPM,group_list,contrast_class)
deg_yangxing_PBS = data_degs[[1]]
deg_yinxing_PBS = data_degs[[2]]
deg_yangxing_yinxing = data_degs[[3]]

通路富集与火山图以及相应图表的保存

valcano_pathway = function(nrDEG,i,contrast_class){
df=nrDEG
attach(nrDEG)
df$y= -log10(adj.P.Val)
df$state=ifelse(df$adj.P.Val>0.05,'NO',
                ifelse( df$logFC >2,'UP',
                        ifelse( df$logFC < -2,'DOWN','NO') )
)
a = table(df$state)
df$state1<-factor(df$state,
                      levels = names(a),
                      labels = paste(names(a),as.numeric(a)))
df$name=rownames(df)
head(df)
library(ggplot2)
library(ggpubr)

# valcano 
ggplot(df,aes(x=logFC,y=y))+
    geom_point(aes(color=state1))+
    labs(x="log2FC",y="-log10FDR")+
    #增加阈值线:分别对应FDR=0.05,|log2FC|=1
    geom_hline(yintercept=-log10(0.05),linetype=4)+
    geom_vline(xintercept=c(-2,2),linetype=4)+
    theme_classic() + ggtitle(contrast_class[i]) +
    theme(plot.title = element_text(hjust = 0.5)) +
  labs(color="Pvalue<0.05\n|log2FC|>2")
ggsave(filename = paste(contrast_class[i],"valcano.png"))
write.csv(df,file = paste(contrast_class[i],".csv"))
# pathway
if (T) {
  df$ENTREZID <- bitr(df$name, fromType = "SYMBOL",
             toType = c( "ENTREZID"),
             OrgDb = org.Mm.eg.db)$ENTREZID
  gene_up= df[df$state == 'UP','ENTREZID'] 
  gene_down=df[df$state == 'DOWN','ENTREZID'] 
  ##### up 
  
  go <- enrichGO(gene_up, OrgDb = "org.Mm.eg.db", ont="all") 
  library(ggplot2)
  library(stringr)
  barplot(go, split="ONTOLOGY",font.size =10)+ 
    facet_grid(ONTOLOGY~., scale="free") + 
    scale_x_discrete(labels=function(x) str_wrap(x, width=50))+
    ggsave(filename = paste(contrast_class[i],".gene_up_GO_all_barplot.png"))
  
  
  enrichKK <- enrichKEGG(gene         =  gene_up,
                         organism     = 'mmu',
                         pvalueCutoff = 0.1,
                         qvalueCutoff =0.1)
  enrichKK=DOSE::setReadable(enrichKK, OrgDb='org.Mm.eg.db',keyType='ENTREZID')
  barplot(enrichKK,showCategory=20)
  ggsave(filename = paste(contrast_class[i],".gene_up_kegg_all_barplot.png"))
  dotplot(enrichKK)
  ggsave(filename = paste(contrast_class[i],".gene_up_kegg_all_dotplot.png"))
  write.csv(go@result,file = paste(contrast_class[i],"gene_up_GO.csv"))
  write.csv(enrichKK@result,file = paste(contrast_class[i],"gene_up_KEGG.csv"))
  
  ###### down 
  go <- enrichGO(gene_down, OrgDb = "org.Mm.eg.db", ont="all") 
  library(ggplot2)
  library(stringr)
  barplot(go, split="ONTOLOGY",font.size =10)+ 
    facet_grid(ONTOLOGY~., scale="free") + 
    scale_x_discrete(labels=function(x) str_wrap(x, width=50))+
    ggsave(filename = paste(contrast_class[i],".gene_down_GO_all_barplot.png"))
  
  enrichKK <- enrichKEGG(gene         =  gene_down,
                         organism     = 'mmu',
                         pvalueCutoff = 0.1,
                         qvalueCutoff =0.1)
  enrichKK=DOSE::setReadable(enrichKK, OrgDb='org.Mm.eg.db',keyType='ENTREZID')
  barplot(enrichKK,showCategory=20)
  ggsave(filename = paste(contrast_class[i],".gene_down_kegg_all_barplot.png"))
  dotplot(enrichKK)
  ggsave(filename = paste(contrast_class[i],".gene_down_kegg_all_dotplot.png"))
  write.csv(go@result,file = paste(contrast_class[i],"gene_down_GO.csv"))
  write.csv(enrichKK@result,file = paste(contrast_class[i],"gene_down_KEGG.csv"))
  
  
  
}
}
valcano_pathway(nrDEG = deg_yangxing_PBS,1,contrast_class = contrast_class)
valcano_pathway(nrDEG = deg_yinxing_PBS,2,contrast_class = contrast_class)
valcano_pathway(nrDEG = deg_yangxing_yinxing,3,contrast_class = contrast_class)

结果展示

在这里插入图片描述
请添加图片描述
请添加图片描述

通路富集的另外食用方法

通路富集也可以通过kobas使用
http://kobas.cbi.pku.edu.cn/retrieve/visualization/?taskid=c74679b1b6e04162bf1dccbf43672018&app=gene_list使用

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值