dxy logo
首页丁香园病例库全部版块
搜索
登录

【step by step】菜鸟学TCGA(4)-用edgeR做差异表达分析

医疗行业从业者 · 发布于 2017-10-13 · IP 重庆重庆
4.6 万 浏览
这个帖子发布于 8 年零 26 天前,其中的信息可能已发生改变或有所发展。

大家好,工作太忙,太久没有更新了,哎,泪……

有的同学问我要代码,有的发了,后面的还没有发,一个一个发好累啊,大家有建议吗?

感觉某宝的这个课程也不贵,300多,有经济能力的小伙伴可以自己买,学得快些~

这次讲的是用一个叫edgeR的包,在R中使用,做差异表达分析,做了之后可以相应的做火山图和热图。

大家关于代码有什么疑问,可以在R中输入“?+软件包名字”

如侵犯版权,请告诉我,我把帖子撤了: )

img

img

img

#source("http://bioconductor.org/biocLite.R")   #source("https://bioconductor.org/biocLite.R")#如果第一个不行,用第二个#

#biocLite("edgeR")

#install.packages("gplots")


foldChange=1#6,7行表示的是过滤的标准,fold change=1意思是差异是两倍,padj=0.05意思是矫正后P值小于0.05,如果得到的差异基因过多,则增大foldchange,减小padj#

padj=0.05


setwd("C:\\Users\\YunGu\\Desktop\\TCGA\\video\\TCGA07")  #设置工作目录,意思是在给自己做的事划定一个地盘,如果输入的数据已经在这个地盘,输出的file想放在这个地盘,后面的文件不用单独在输入路径,如果输入输出的位置与这个路径不一致,那么还需要重新输#

library("edgeR")

rt=read.table("mRNA.symbol.txt",sep="\t",header=T,check.names=F)  #读取矩阵文件,这是输入的数据路径,改成自己的文件名#

rt=as.matrix(rt) #转化为矩阵#

rownames(rt)=rt[,1] #第一列作为行名#

exp=rt[,2:ncol(rt)] #第二列到最后一列是表达的数据#

dimnames=list(rownames(exp),colnames(exp))

data=matrix(as.numeric(as.matrix(exp)),nrow=nrow(exp),dimnames=dimnames)#15,16行意思是将带引号的数据转换成数值#

data=avereps(data) #有的基因出现过多行,把出现多行的gene取平均值#

data=data[rowMeans(data)>1,] #去除低表达的数据#



group=c(rep("normal",4),rep("tumor",178)) #定义比较组,按照癌症和正常样品数目修改#

design <- model.matrix(~group) #把group设置成一个model matrix#

y <- DGEList(counts=data,group=group) #group哪些是正常,哪些是癌症样本,让edgeR可以识别#

y <- calcNormFactors(y) #对因子矫正#

y <- estimateCommonDisp(y)#25,26估计变异系数,即估计方差;估计内部差异程度,看组间差异是否比内部差异大,如果大,可选为差异基因#

y <- estimateTagwiseDisp(y)

et <- exactTest(y,pair = c("normal","tumor"))

topTags(et)

ordered_tags <- topTags(et, n=100000) #显示排名前十万的#


allDiff=ordered_tags$table

allDiff=allDiff[is.na(allDiff$FDR)==FALSE,]

diff=allDiff

newData=y$pseudo.counts


write.table(diff,file="edgerOut.xls",sep="\t",quote=F)#先把所有差异表达,输入这个叫edgerOut的文件#

diffSig = diff[(diff$FDR < padj & (diff$logFC>foldChange | diff$logFC<(-foldChange))),]#筛选有显著差异的#

write.table(diffSig, file="diffSig.xls",sep="\t",quote=F)#输出有显著差异表达的到diffSig这个文件#

diffUp = diff[(diff$FDR < padj & (diff$logFC>foldChange)),]#foldchange>0是上调,foldchange<0是下调#

write.table(diffUp, file="up.xls",sep="\t",quote=F)#39-42把上调和下调分别输入up和down两个文件#

diffDown = diff[(diff$FDR < padj & (diff$logFC<(-foldChange))),]

write.table(diffDown, file="down.xls",sep="\t",quote=F)


normalizeExp=rbind(id=colnames(newData),newData)

write.table(normalizeExp,file="normalizeExp.txt",sep="\t",quote=F,col.names=F)   #输出所有基因校正后的表达值(normalizeExp.txt)

diffExp=rbind(id=colnames(newData),newData[rownames(diffSig),])

write.table(diffExp,file="diffmRNAExp.txt",sep="\t",quote=F,col.names=F)  #输出差异基因校正后的表达值(diffmRNAExp.txt),以后可以和其他数据,比如差异基因表达联合分析#


heatmapData <- newData[rownames(diffSig),]#此处使用的是校正后基因的表达量#


#volcano

pdf(file="vol.pdf") #注意输出的火山图的路径#

xMax=max(-log10(allDiff$FDR))+1

yMax=12

plot(-log10(allDiff$FDR), allDiff$logFC, xlab="-log10(FDR)",ylab="logFC",

     main="Volcano", xlim=c(0,xMax),ylim=c(-yMax,yMax),yaxs="i",pch=20, cex=0.4)

diffSub=allDiff[allDiff$FDR<padj & allDiff$logFC>foldChange,]

points(-log10(diffSub$FDR), diffSub$logFC, pch=20, col="red",cex=0.4)

diffSub=allDiff[allDiff$FDR<padj & allDiff$logFC<(-foldChange),]

points(-log10(diffSub$FDR), diffSub$logFC, pch=20, col="green",cex=0.4)

abline(h=0,lty=2,lwd=3)

dev.off()


#heatmap

hmExp=log10(heatmapData+0.001)

library('gplots')

hmMat=as.matrix(hmExp)

pdf(file="heatmap.pdf",width=60,height=90)#注意输出的热图的储存路径#

par(oma=c(10,3,3,7))

heatmap.2(hmMat,col='greenred',trace="none")

dev.off()

这是输出路径中得到的结果

img

img

img


53 186 23

全部讨论(0)

默认最新
avatar
53
分享帖子
share-weibo分享到微博
share-weibo分享到微信
认证
返回顶部