R语言KEGG分析

作者: 余绕 | 来源:发表于2020-04-17 15:41 被阅读0次

#install.packages('R2HTML')
library('R2HTML')
rm(list=ls())
setwd('D:/Bioinormatics Learning/Plantech 教程资料/Protein analysis/3.KEGG/Rice KEGG')


#读取背景基因(所有注释到KEGG的基因)和差异基因列表,以K号表示


allgene=read.delim('Rice_all_gene_KOs.txt',header=F,sep="\t",stringsAsFactors = F)#读取水稻所有pathways

head(allgene) #展示allgene数据

deggene=read.delim('Degs_KOs.txt',header=F,sep="\t",stringsAsFactors = F) #取差异基因的pathway信息

head(deggene) #展示deggene数据


pathinfo=read.delim('kegg.pathway.id',header=T,sep="\t",stringsAsFactors = F) #取所有的pathway信息

head(pathinfo) #展示pathinfo数据

#读取背景基因(所有注释到KEGG的基因)和差异基因列表,以K号表示


pathway=unique(pathinfo[,c('PID','PATHWAY')]) #unique()去除重复函数,获得单一的Pathway用于后面for循环计数每个pathway的Ko数目

head(pathway) #展示pathway数据

allgene=unique(allgene$V1)   #unique()去除重复函数,获得单一的Pathway用于后面for循环计数每个pathway的Ko数目

head(allgene) #展示allgene数据

deggene=unique(deggene$V1)   #unique()去除重复函数,获得单一的Pathway用于后面for循环计数每个pathway的Ko数目

head(deggene)  #展示deggene数据

#==============设定输出的文件名称============


outfile="kegg.enrichment"

#=======将基因与Pathway中有注释的基因取交集========




deginfo=pathinfo[pathinfo[,1]%in%deggene,] #相当于merge

head(deginfo)#展示deginfo数据

allinfo=pathinfo[pathinfo[,1]%in%allgene,]  #相当于merge

head(allinfo) #展示allinfo数据

k=length(unique(deginfo[,1]))  #差异基因总数,length函数求基因数目

k  #展示K数据

N=length(unique(allinfo[,1]))  #总基因数   #length函数求基因数目

N  #展示N数据

#=========对每个通路基于超几何分布计算富集p值=======


p<-data.frame() #新建data frame用于储存KO数目


urlColor<-NULL # used to color the genes in pathway
geneLink<-NULL # used to set hyperlink to DEGs in pathway

#通过循环计算每个KEGGpathways上的Ko号

for (i in seq(1,nrow(pathway))) {
 
  pid=pathway[i,'PID'] #获取Pathway的KO号码,例如:pathway[1,'PID']=》 "ko00010";pathway[1,'PID']=》"ko00020"等
  
  allInPath=allinfo[allinfo[,'PID']%in%pid,] #获得每一个pathway所有的KO数目,具体见备注
  
  m=length(unique(allInPath[,1]))  #计算i Pathway基因总数
  
  degInPath=deginfo[deginfo[,'PID']%in%pid,] #获得每一个pathway所有的KO数目
  
  x=length(unique(degInPath[,1]))  #计算i Pathway中差异基因数
  
  p[i,1]=x #数据框p的第i行,第一列值
  p[i,2]=m #数据框p的第i行,第二列值
  p[i,3]=phyper(x-1,m,N-m,k,lower.tail=FALSE)  #lower.tail=FALSE,计算的是P[X>(x-1)]的概率,其中x-1:某一pathway中差异基因数目(或KO数),m:背景数(或KO数),N:所有基因数(或KO数),K:所有差异数(或KO数)
  
  urlColor[i]=apply(as.matrix(paste("/",t(degInPath[,1]),'%09red',sep="")),2,paste,collapse="")
  Link=paste('<a href=', shQuote(paste('https://www.kegg.jp/dbget-bin/www_bget?ko:',degInPath[,1],sep="")),'/','>', degInPath[,1],'</a>',sep="")
  if(x==0){
    geneLink[i]="--"
  }else{
    geneLink[i]=apply(as.matrix(Link),2,paste,collapse=", ")
  }
}

#============计算FDR,整理结果==============

fdr=p.adjust(p[,3],method="BH") #利用第三列的p值计算FDR值,!!!可以借鉴!!!!

output=cbind(pathway,p,fdr)#合并数据库框,产生新的数据框,因为for循环按照pathway内容从上到下依次运行的,所以顺序是相同的,可以进行列合并

head(output)#展示数据内容

colnames(output)=c('ID','Pathway','DEGsInPathway','GenesInPathway','Pvalue','FDR') #重新给数据框命名

ind=order(output[,"Pvalue"])#按照P值从小到大对结果排序
output=output[ind,]       #用于输出到表格文件
urlColor=urlColor[ind]
DEGs=geneLink[ind]

output2=cbind(output,DEGs) #用于输出到HTML文件

#==============导出到表格文件================

write.table(output,file=paste(outfile,".xls",sep=""),quote = F,row.names = F,col.names = T,sep="\t")

#==============导出结果到HTML文件============

#==============导出结果到HTML文件============
urlTitles <- output[,'ID']
url=paste('https://www.genome.jp/kegg-bin/show_pathway?',gsub("ko", "map", urlTitles),urlColor,sep="")

htmlOUT <- transform(output2, ID = paste('<a href = ', shQuote(url),'/','>', urlTitles, '</a>'))

target <- HTMLInitFile(Title = "KEGG Pathway Ernichment Results",outdir=getwd(),filename=outfile, BackGroundColor="#f8f8f8",useGrid = T,useLaTeX = F,HTMLframe = F)
write("<style>table{border-collapse:collapse;width:1280px;}a:link,a:visited {color: #3366FF;text-decoration: none; }a:hover,a:active {color: #ff3366;text-decoration: none; };</style>",target,append = T)
HTML(as.title("KEGG Pathway Ernichment Results"),file=target)
HTML(htmlOUT,file=target,innerBorder = 1,row.names = F,digits=3)
HTMLEndFile()
#============================================

<big>#------------------备注-------------------<big>

#------------------备注-------------------
pid=pathway[2,'PID']#获得第二个pathway

pid #pid内容

allInPath=allinfo[allinfo[,'PID']%in%pid,]#计算第二个pathway中所有背景Ko号

allInPath #展示allInPath内容



备注:超几何分布


image.png

参照Plantech 植物生物信息综合课程
详细信息可以观看https://ke.qq.com/course/1645755

相关文章

网友评论

    本文标题:R语言KEGG分析

    本文链接:https://www.haomeiwen.com/subject/knlyvhtx.html