关系经济人类预测化学自然
自然科学
知识物理
化学生物
地理解释
预测理解
本质社会
人类现象
行为研究
经济政治
心理结构
关系指导
人文遗产

数据挖掘流程代码版方便抄袭

9月21日 飞虹谷投稿
  GEO数据挖掘流程代码版(方便抄袭)
  微信公众号:生信小知识
  关注可了解更多的教程及单细胞知识。问题或建议,请公众号留言;
  内容目录
  step0installpackagesstep1downloaddata1。背景知识2。关于GEO中的几个文件说明A。2种familyfile(s)B。SeriesMatrixFile(s)C。GSE64634RAW。tar3。关于下载镜像问题4。关于探针id转换idmap1包针对bioconductor包附加小功能对基因名字进行注释(annoGene)idmap2包万能芯片探针ID注释平台包(提取soft文件)idmap3包idmap1和idmap2都无法注释的平台AnnoProbe包5。整体代码这里抄step2checkstep3DEGstep4annogokegg真正代码detailedplot综合显示图(更推荐)step5annoGSEAstep6annoGSVAstep7visualization致谢
  step0installpackages
  简单安装R包和设置镜像代码:
  1镜像设置
  2if(T){
  3rm(listls())
  4options()repos
  5options()BioCmirror
  6options(BioCmirrorhttps:mirrors。ustc。edu。cnbioc)
  7options(reposc(CRANhttps:mirrors。tuna。tsinghua。edu。cnCRAN))
  8options()repos
  9options()BioCmirror
  10}11:12https:bioconductor。orgpackagesreleasebiochtmlGEOquery。html
  13BiocManager安装的R包
  14if(T){
  15if(!requireNamespace(BiocManager,quietlyTRUE))
  16install。packages(BiocManager)17:18pkgsc(KEGG。db,GSEABase,GSVA,clusterProfiler,GEOquery,limma,impute,genefu,org。Hs。eg。db,hgu133plus2。db)
  19for(pkginpkgs){
  20if(!requireNamespace(pkg,quietlyTRUE))
  21BiocManager::install(pkg,askF,updateF)
  22}
  23}24:25直接通过install。package函数安装的R包
  26if(T){
  27options()repos
  28pkgsc(FactoMineR,factoextra,WGCNA,ggplot2,pheatmap,ggpubr)
  29for(pkginpkgs){
  30if(!requireNamespace(pkg,quietlyTRUE))
  31install。packages(pkg)
  32}
  33}34:35
  36载入R包
  37if(T){
  38library(FactoMineR)
  39library(factoextra)
  40library(GSEABase)
  41library(GSVA)
  42library(clusterProfiler)
  43library(genefu)
  44library(ggplot2)
  45library(ggpubr)
  46library(hgu133plus2。db)
  47library(limma)
  48library(org。Hs。eg。db)
  49library(pheatmap)
  50}
  step1downloaddata
  1。背景知识
  这里通过使用GEOqueryR包来帮助我们下载数据,比手动登录GEO数据库一个个点击要方便很多!
  而且我发现,最近NCBI更新后,GEO数据库也更新了!
  点击后:
  点击后:
  可以看到官网的代码和我们目前用的代码基本一致。
  2。关于GEO中的几个文件说明
  下面一个个的来说吧!
  A。2种familyfile(s)
  也就是SOFTformattedfamilyfile(s)和MINiMLformattedfamilyfile(s),通过字面,我们可以理解这是2种不同格式的探针说明文件。为什么我会这样说呢?因为我下载了soft文件来查看:
  这时首行的内容:
  就是告诉你这个数据是GPL570这个平台测序得到的:
  中间有很多行关于GSM的,可能记录的是用到这个平台测序的sample:
  接着就是一系列探针信息了:
  我们可以通过在R种提取信息对我们得到的矩阵种探针做注释。
  B。SeriesMatrixFile(s)
  这里面包含了3部分资料:数据属性患者信息表达矩阵
  数据属性在最前面的几行,和患者信息之间有一个空行,但是他们都是以!开头:
  接下来是患者信息:
  紧接着患者信息下一行会有个提示:!seriesmatrixtablebegin,然后下面就是表达矩阵信息了:
  这个就是我们需要的表达矩阵信息了,矩阵中每一行是一个基因(也就是一个探针),每一列是一个样本(GSM)
  C。GSE64634RAW。tar
  这个我一开始不知道是什么东西,后来问了问jimmy,然后他给我发了个资料你要挖的公共数据集作者上传了错误的表达矩阵肿么办。大致瞅了瞅,知道这个应该是芯片的原始数据,然后也把这个文件给下载下来看了看:
  根据常识猜了猜想:
  X和Y应该代表着芯片上的位置,这个可能和探针有对应关系。
  MEAN是信号的平均值,STDV是信号的标准差。
  NPIXELS是像素点吧。
  既然知道了这是原始数据,jimmy又给发了代码,感觉不学习下有点对不起自己,那就跟着代码过一遍吧:
  1BiocManager::install(c(oligo),askF,updateF)
  2library(oligo)
  3BiocManager::install(c(pd。hg。u133。plus。2),askF,updateF)
  4library(pd。hg。u133。plus。2)
  5hr6读入cel文件数据
  7celFlist。celfiles(。,listGzippedT)
  8celFiles
  9affyRread。celfiles(celFiles)
  10提取矩阵并做normalization
  11rma(affyRaw)
  12eset
  13检查数据
  14datexprs(eset)
  15dim(dat)
  16boxplot(dat,las2)
  可以看到,整个过程非常的简单,就是利用了oligo这个R包而已。读入所有的cel文件后,利用rma()函数将数据进行了normalization,得到的是一个ExpressionSet对象!!
  后面会比较我们利用rawdata得到的结果和我们直接下载的SeriesMatrixFile(s)文件之间的区别!
  3。关于下载镜像问题
  jimmy曾经发表过GEO数据库中国区镜像横空出世推文,因为我每次下载都是用vpn,但是怕以后万一没有vpn了,所以还是学习下,以防万一嘛!再说了,可以学习下新知识,何乐而不为呢?
  通过学习,发现实际上jimmy是开发了一个R包,或者说包装了一个函数吧,如果不想了解具体原理,那么用法如下:
  1安装方法1:
  2library(devtools)
  3installgithub(jmzeng1314GEOmirror)
  4library(GEOmirror)
  5安装方法2:
  6source(http:raw。githubusercontent。comjmzeng1314GEOmirrormasterRgeoChina。R)
  7安装方法3(源码):
  8geoCfunction(gseGSE2546,mirrortercent){
  9suppressPackageStartupMessages(library(GEOquery))
  10options(download。file。methodlibcurl)
  11eSetgetGEO(GSE2546,destdir。,AnnotGPLF,getGPLF)
  12http:49。235。27。111GEOmirrorGSE2nnnGSE2546eSet。Rdata
  13gseGSE2546;mirrortercent
  14gsetoupper(gse)
  15downifelse(as。numeric(gsub(GSE,,gse))1000,
  16paste0(GEOmirrorGSEnnn,gse,
  17eSet。Rdata),
  18paste0(GEOmirror,
  19gsub(〔09〕〔09〕〔09〕,nnn,gse),,gse,
  20eSet。Rdata))21:22if(mirrortercent){
  23uphttp:49。235。27。111
  24}
  25tpfpaste0(gse,eSet。Rdata)
  26download。file(paste0(up,down),tpf,modewb)
  27suppressWarnings(load(tpf))
  28return(gset)
  29}
  具体用法也非常简单:
  1eSetgeoChina(GSE2345)
  通过安装方法3(源码)我们可以看出这个包的原理:
  通过访问下载http:49。235。27。111GEOmirrorGSE2nnnGSE2546eSet。Rdata
  所以可以猜到,应该是jimmy事先用循环的方式帮我们下载好了很多GEO数据,并做成了Rdata格式的文件!非常的良苦用心了!!
  4。关于探针id转换
  因为GEO数据矩阵中,横坐标都是探针的代号,如下图:
  我们只看这些代号并不能理解具体是什么基因,于是这就需要我们做id转换了:将探针的代号转为基因symbol。
  idmap1包针对bioconductor包
  这里又要提到jimmy开发的一个R包了:
  第一个万能芯片探针ID注释平台R包37个芯片平台
  老规矩,还是先学习下:
  一般重要的芯片在R的bioconductor里面都是有包的。但是需要我们单独下载对应的包。具体关系如下:
  (具体的R包名称是biocpackage后加。db)
  1gplbiocpackagetitle
  2GPL201hgfocus〔HGFocus〕AffymetrixHumanHGFocusTargetArray
  3GPL96hgu133a〔HGU133A〕AffymetrixHumanGenomeU133AArray
  4GPL571hgu133a2〔HGU133A2〕AffymetrixHumanGenomeU133A2。0Array
  5GPL97hgu133b〔HGU133B〕AffymetrixHumanGenomeU133BArray
  6GPL570hgu133plus2〔HGU133Plus2〕AffymetrixHumanGenomeU133Plus2。0Array
  7GPL13667hgu219〔HGU219〕AffymetrixHumanGenomeU219Array
  8GPL8300hgu95av2〔HGU95Av2〕AffymetrixHumanGenomeU95Version2Array
  9GPL91hgu95av2〔HGU95A〕AffymetrixHumanGenomeU95AArray
  10GPL92hgu95b〔HGU95B〕AffymetrixHumanGenomeU95BArray
  11GPL93hgu95c〔HGU95C〕AffymetrixHumanGenomeU95CArray
  12GPL94hgu95d〔HGU95D〕AffymetrixHumanGenomeU95DArray
  13GPL95hgu95e〔HGU95E〕AffymetrixHumanGenomeU95EArray
  14GPL887hgug4110bAgilent012097Human1AMicroarray(V2)G4110B(FeatureNumberversion)
  15GPL886hgug4111aAgilent011871Human1BMicroarrayG4111A(FeatureNumberversion)
  16GPL1708hgug4112aAgilent012391WholeHumanGenomeOligoMicroarrayG4112A(FeatureNumberversion)
  17GPL13497HsAgilentDesign026652Agilent026652WholeHumanGenomeMicroarray4x44Kv2(ProbeNameversion)
  18GPL6244hugene10sttranscriptcluster〔HuGene10st〕AffymetrixHumanGene1。0STArray〔transcript(gene)version〕
  19GPL11532hugene11sttranscriptcluster〔HuGene11st〕AffymetrixHumanGene1。1STArray〔transcript(gene)version〕
  20GPL6097illuminaHumanv1Illuminahuman6v1。0expressionbeadchip
  21GPL6102illuminaHumanv2Illuminahuman6v2。0expressionbeadchip
  22GPL6947illuminaHumanv3IlluminaHumanHT12V3。0expressionbeadchip
  23GPL10558illuminaHumanv4IlluminaHumanHT12V4。0expressionbeadchip
  24GPL6885illuminaMousev2IlluminaMouseRef8v2。0expressionbeadchip
  25GPL81mgu74av2〔MGU74Av2〕AffymetrixMurineGenomeU74AVersion2Array
  26GPL82mgu74bv2〔MGU74Bv2〕AffymetrixMurineGenomeU74BVersion2Array
  27GPL83mgu74cv2〔MGU74Cv2〕AffymetrixMurineGenomeU74Version2Array
  28GPL339moe430a〔MOE430A〕AffymetrixMouseExpression430AArray
  29GPL6246mogene10sttranscriptcluster〔MoGene10st〕AffymetrixMouseGene1。0STArray〔transcript(gene)version〕
  30GPL340mouse4302〔MOE430B〕AffymetrixMouseExpression430BArray
  31GPL1261mouse430a2〔Mouse4302〕AffymetrixMouseGenome4302。0Array
  32GPL8321mouse430a2〔Mouse430A2〕AffymetrixMouseGenome430A2。0Array
  因为很多时候,用户是找不到这些GPL平台对应的R包,或者下载安装困难,其实仅仅是需要探针与基因对应关系,没有必要去下载安装这几十个M的包。于是jimmy就开发了idmap1这个R包来帮我们:
  安装方法(这里好像只能用方法1,因为在载入包的同时附带有一个变量p2sdf加载,如果用方法2和3没办法得到这个变量):
  也可以直接下载:https:codeload。github。comjmzeng1314idmap1legacy。tar。gzmaster
  1安装方法1:
  2library(devtools)
  3installgithub(jmzeng1314idmap1)
  4library(idmap1)
  5安装方法2:
  6source(https:raw。githubusercontent。comjmzeng1314idmap1masterRgetIDs。R)
  7安装方法3(源码):
  8getIDfunction(gpl){
  9gplgpl570
  10gpltoupper(gpl)
  11if(!gplinunique(p2sdfgpl)){
  12stop(yourgplisnotinourannotationlist。)
  13}
  14return(p2sdf〔p2sdfgplgpl,〕)
  15}
  具体用法也非常简单:
  1idsgetIDs(gpl570)
  2head(ids)
  关于我们得到的ExpressionSet对象,可以通过gsetannotation得到我们需要的注释平台信息。
  前面说到了这个变量p2sdf,像我这么喜欢资源的人,当然也要保存一份在本地了。大家有兴趣的可以自己write到本地保存。哈哈哈哈哈哈哈哈哈哈(jimmy应该不会打我吧)!
  附加小功能对基因名字进行注释(annoGene)
  同样的,还是idmap1这个R包里的函数,如果安装过这个R包就无须再安装了,如果没有安装又想用这个功能,还真的没有办法,因为这些数据存在于这个包的自带变量中(humanGTF、mouseGTF、ratGTF):
  1安装方法2(无效):
  2source(https:raw。githubusercontent。comjmzeng1314idmap1masterRannoGene。R)
  3安装方法3(源码)(无效):
  4annoGfunction(IDs,IDtype,specieshuman,outfile){
  5if(length(unique(IDs))1){
  6stop(Youshouldgivemesomegenestobeannotated!!!)
  7}
  8if(!IDtypeinc(ENSEMBL,SYMBOL)){
  9stop(WeonlyacceptENSEMBLorSYMBOL!!!)
  10}
  11if(specieshuman){
  12GTFhumanGTF
  13}elseif(speciesmouse){
  14GTFmouseGTF
  15}elseif(speciesrat){
  16GTFratGTF
  17}else{
  18stop(Weonlyaccepthumanormouse,orrat,)
  19}
  20GTF〔eval(parse(textpaste0(GTF,IDtype)))inIDs,〕21:22missIIDs〔!(IDsineval(parse(textpaste0(res,IDtype))))〕
  23missIdsPercentageround((length(missIds)length(IDs))100,2)
  24if(length(missIds)!0){
  25warning(
  26paste0(missIdsPercentage,ofinputIDsarefailtoannotate。。。)
  275。29ofinputgeneIDsarefailtomap。。。
  28)
  29}
  30if(hasArg(outfile)){
  31resultsres
  32if(grepl(。html,outfile)){
  33Ehttps:asia。ensembl。orgHomosapiensGeneSummary?g
  34hrefpaste0(Ensemblprefix,resultsENSEMBL)
  35resultsENSEMBLpaste0(atargetblackhref,,resultsENSEMBL,)36:37http:www。ncbi。nlm。nih。govgene?term
  38hrefpaste0(symbolprefix,resultsSYMBOL)
  39resultsSYMBOLpaste0(atargetblackhref,,resultsSYMBOL,)40:41DT::datatable(results,escapeF,rownamesF)
  42DT::saveWidget(y,fileoutfile)
  43}elseif(grepl(。csv,outfile)){
  44write。csv(results,fileoutfile)
  45}else{
  46stop(Weonlyacceptcsvorhtmlformat!!!)
  47}48:49}
  50return(res)
  51}
  这里补充学习了2个函数:
  R语言parse函数与eval函数的字符串转命令行及执行操作:
  parse()函数能将字符串转换为表达式eval()函数能对表达式求解
  idmap2包万能芯片探针ID注释平台包(提取soft文件)
  第二个万能芯片探针ID注释平台R包有122个GPL
  这次是根据〔soft文件〕(A。2种familyfile(s))进行提取信息得到的!
  如果是我自己来处理这样的文件,我应该会分2步:
  用linux中的grepv命令将表头以和!开头的行去掉
  1grepv!GPL570。GPL570。txt
  用R读入数据
  1tmpread。table(dataGPL570。txt,headerT,sep,fillT)
  结果证明这样有错误,但是,具体原因有空再去找吧。下面看正确的读入方法借助GEOqueryR包工具:
  1library(GEOquery)
  2getGEO(GPL570,destdirdata)
  3GPLTable(gpl)
  一般来说,大家关心的其实就是探针的ID,以及基因的symbol列。有了这个变量后,就可以按照R语言基本操作来提取我们需要的信息了。
  注意:我检查了得到的结果,里面存在有的探针ID对应2个基因,如下图:
  虽然不知道这些代表着什么意思,但是,我将这个数据和bioconductor包里的hgu133plus2。db数据做了比较,结果是这样的:自己提取的结果中如果是一个ID对应2个基因,那么这个探针在bioconductor包里基本上找不到数据。而其他一个ID对应2个基因的结果均和bioconductor包一致。
  当然了,我这只是单独来看一个平台的探针,而在idmap2jimmy已经帮我们整理好了,直接用就行了!!
  安装方法:
  (比较慢)
  也可以直接下载:https:codeload。github。comjmzeng1314idmap2legacy。tar。gzmaster
  1library(devtools)
  2installgithub(jmzeng1314idmap2)
  3library(idmap2)
  使用方法:
  1library(idmap2)
  2idsgetsoftIDs(gpl570)
  查看支持的平台:
  1gpllist〔,1:4〕gpllist是R包自带的变量
  idmap3包idmap1和idmap2都无法注释的平台
  第三个万能芯片探针ID注释平台R包idmap1和idmap2都无法注释的平台
  如果我们拿到的soft注释文件中是序列信息,那么我们该怎么做呢?
  应该是先将序列比对到参考基因组上,然后通过提取基因注释文件中的数据得到基因symbol!
  img
  而在idmap3包中,jimmy已经帮我们做好了!!说他宠粉也是真的了!!我都懒得做,他居然还写了个循环来完成了这个事。
  安装方法:
  (比较慢)
  也可以直接下载:https:codeload。github。comjmzeng1314idmap3legacy。tar。gzmaster
  1library(devtools)
  2installgithub(jmzeng1314idmap3)
  3library(idmap3)
  使用方法:
  1library(idmap3)
  2idsidmap3::getpipeIDs(GPL21827)
  查看支持的平台:
  1gpllist〔,1:4〕gpllist是R包自带的变量
  AnnoProbe包
  芯片探针序列的基因注释已经无需你自己亲自做了一个汇总
  安装方法:
  https:codeload。github。comjmzeng1314AnnoProbelegacy。tar。gzmaster
  1library(devtools)
  2installgithub(jmzeng1314AnnoProbe)
  3library(AnnoProbe)
  使用方法:
  1gplGPL21827
  2probe2geneidmap(gpl,typepipe)
  5。整体代码这里抄
  1rm(listls())魔幻操作,一键清空
  2options(stringsAsFactorsF)
  3下面代码只需要修改file的名字
  4下载的文件会自动保存到。data下
  5得到的gset是一个ExpressionSet对象
  6hr7hr8只需要修改file的名字,即可下载得到相应的geo数据
  9获取患者信息,需要自行修改
  10fileGSE64634
  11https:www。ncbi。nlm。nih。govgeoqueryacc。cgi?accGSE6463412:13if(T){
  14数据下载
  15if(T){
  16library(GEOquery)
  17这个包需要注意两个配置,一般来说自动化的配置是足够的。
  18Settingoptions(download。file。method。GEOqueryauto)
  19Settingoptions(GEOquery。inmemory。gplFALSE)
  20fdatapaste0(file,eSet。Rdata)
  21fpathpaste0(data,fdata)
  22if(!file。exists(fpath)){
  23getGEO(file,destdirdata,
  24AnnotGPLF,注释文件
  25getGPLF)平台文件
  26gsetgset〔〔1〕〕
  27save(gset,filefpath)保存到本地
  28}
  29load(fpath)
  30}
  31gset32:33获取患者信息,这里需要自行修改
  34if(T){
  35pdpData(gset)根据diseasestate:ch1一列得知分组信息
  36grouplistc(rep(normal,4),rep(npc,12))nasopharyngealcarcinomaNPC鼻咽癌
  37table(grouplist)
  38}39:40对数据进行normalization
  41if(T){
  42datexprs(gset)
  43dim(dat)44:45dat〔1:4,1:4〕
  46boxplot(dat,las2)
  47datdat〔apply(dat,1,sd)0,〕去除都是0的探针
  48dat〔0〕1
  49boxplot(dat,las2)50:51datlog2(dat1)
  52boxplot(dat,las2)
  53library(limma)
  54datnormalizeBetweenArrays(dat)
  55boxplot(dat,las2)
  56}57:58
  59探针注释2种方法,推荐方法2
  60方法1:比较麻烦,而且不方便,一般不用这种方法
  61if(F){
  62library(GEOquery)
  63DownloadGPLfile,putitinthecurrentdirectory,andloadit:
  64getGEO(GPL570,destdirdata)
  65GPLTable(gpl)
  66colnames(GPL)
  67head(GPL〔,c(1,11)〕)youneedtocheckthis,whichcolumndoyouneed
  68probe2geneGPL〔,c(1,11)〕
  69head(probe2gene)
  70save(probe2gene,fileprobe2gene。Rdata)
  71}72:73方法2:用hgu133plus2。db这个R包比较方便
  74if(T){
  75library(hgu133plus2。db)
  76idstoTable(hgu133plus2SYMBOL)
  77head(ids)
  78idsids〔idssymbol!,〕
  79idsids〔idsprobeidinrownames(dat),〕过滤没法注释的探针80:81dat〔1:4,1:4〕
  82datdat〔idsprobeid,〕调整顺序,让dat的顺序和ids中的一致83:84idsmedianapply(dat,1,median)
  85idsids〔order(idssymbol,idsmedian,decreasingT),〕按照基因名、中位数大小排序
  86idsids〔!duplicated(idssymbol),〕只保留相同symbol中中位数最大的探针
  87datdat〔idsprobeid,〕调整顺序,让dat的顺序和ids中的一致
  88rownames(dat)idssymbolid转换
  89dat〔1:4,1:4〕
  90}
  91}92:93save(dat,grouplist,filedatastep1output。Rdata)
  step2check
  画PCA图时要求是行名时样本名,列名时探针名,因此此时需要转置。格式要求data。frame。
  关于scale:在基因表达量的数据中,有些基因表达量极低,有些基因表达量极高,因此把每个基因在不同处理和重复中的数据转换为平均值为0,方差为1的数据,所以在这里也需要先转置。
  1PCA检查
  2PCA,图会保存在picallsamplesPCA。png
  3if(T){
  4载入数据
  5if(T){
  6rm(listls())魔幻操作,一键清空
  7options(stringsAsFactorsF)8:9load(filedatastep1output。Rdata)
  10print(table(grouplist))
  11每次都要检测数据
  12dat〔1:4,1:4〕
  13}14:15PCA,图会保存在picallsamplesPCA。png
  16if(T){
  17exprSetdat
  18过滤标准
  19if(T){
  20dim(exprSet)
  21过滤标准需要修改,目前是保留每一个基因在5个人中表达量1
  22exprSetexprSet〔apply(exprSet,1,function(x)sum(1)5),〕
  23boxplot(apply(exprSet,1,mean))
  24dim(exprSet)
  25过滤标准需要修改,目前是去除每一个基因在5个人中表达量12
  26exprSetexprSet〔!apply(exprSet,1,function(x)sum(12)5),〕
  27dim(exprSet)
  28}
  29去除文库大小差异normalization,同时利用log做scale
  30exprSetlog(edgeR::cpm(exprSet)1)
  31datexprSet
  32datas。data。frame(t(dat))画PCA图时要求是行名时样本名,列名时探针名,因此此时需要转换。格式要求data。frame
  33library(FactoMineR)计算PCA
  34library(factoextra)画图展示35:36dat。PCA(dat,graphF)
  37fvizpcaind按样本fvizpcavar按基因
  38fvizpcaind(dat。pca,
  39geom。indpoint,c(point,text)2选1
  40col。indgrouplist,colorbygroups
  41palettec(00AFBB,E7B800),自定义颜色
  42addEllipsesT,加圆圈
  43legend。titleGroups图例名称
  44)
  45ggsave(picallsamplesPCA。png)
  46}
  47}48:49
  50挑选1000个SD最大的基因画表达量热图
  51结果图存放在picheatmaptop1000sd。png中
  52if(T){
  53载入数据
  54if(T){
  55rm(listls())
  56load(filedatastep1output。Rdata)
  57dat〔1:4,1:4〕
  58}59:60挑选1000个SD最大的基因画表达量热图
  61结果图存放在picheatmaptop1000sd。png中
  62if(T){
  63cgnames(tail(sort(apply(dat,1,sd)),1000))找到SD最大的1000个基因
  64library(pheatmap)
  65headmap。datdat〔cg,〕
  66把每个基因在不同处理和重复中的数据转换为平均值为0,
  67方差为1的数据,所以在这里也需要先转置(针对基因)。
  68headmap。datt(scale(t(headmap。dat)))
  69headmap。dat〔headmap。2〕2
  70headmap。dat〔headmap。2〕271:72分组信息设置
  73acdata。frame(groupgrouplist)
  74rownames(ac)colnames(headmap。dat)75:76可以看到TNBC具有一定的异质性,拿它来区分乳腺癌亚型指导临床治疗还是略显粗糙。
  77pheatmap(headmap。dat,showcolnamesT,showrownamesF,
  78annotationcolac,
  79filenamepicheatmaptop1000sd。png)
  80}
  81}82:83
  84过滤标准需要修改
  85利用top500mad基因画相关性热图热图
  86结果图存放在piccortop500mad。png中
  87if(T){
  88导入数据
  89if(T){
  90rm(listls())
  91load(filedatastep1output。Rdata)
  92dat〔1:4,1:4〕
  93exprSetdat
  94}95:96利用所有基因画相关性热图
  97if(T){
  98acdata。frame(groupgrouplist)
  99rownames(ac)colnames(exprSet)
  100pheatmap::pheatmap(cor(exprSet),
  101annotationcolac,
  102showrownamesF,
  103filenamepiccorallgenes。png)
  104}105:106过滤标准
  107if(T){
  108dim(exprSet)
  109过滤标准需要修改,目前是保留每一个基因在5个人中表达量1
  110exprSetexprSet〔apply(exprSet,1,function(x)sum(1)5),〕
  111boxplot(apply(exprSet,1,mean))
  112dim(exprSet)
  113过滤标准需要修改,目前是去除每一个基因在5个人中表达量12
  114exprSetexprSet〔!apply(exprSet,1,function(x)sum(12)5),〕
  115dim(exprSet)
  116}117:118数据normalization处理
  119if(T){
  120去除文库大小差异normalization,同时利用log做scale
  121exprSetlog(edgeR::cpm(exprSet)1)
  122取top500mad的基因画图
  123exprSetexprSet〔names(sort(apply(exprSet,1,mad),decreasingT)〔1:500〕),〕
  124}125:126利用top500mad基因画相关性热图热图
  127if(T){
  128Mcor(exprSet)
  129pheatmap::pheatmap(M,
  130showrownamesF,
  131annotationcolac,
  132filenamepiccortop500mad。png)
  133}
  134}
  allsamplesPCA。png
  heatmaptop1000sd。png
  cortop500mad。png
  step3DEG
  关于差异分析是否需要比较矩阵
  差异分析的统计学本质探究
  原始版火山图:plot(logFC,log10(P。Value))
  原始版MA图:plot(AveExpr,logFC)
  1载入数据,检查数据
  2if(T){
  3rm(listls())
  4options(stringsAsFactorsF)
  5library(ggpubr)
  6load(filedatastep1output。Rdata)
  7每次都要检测数据
  8dat〔1:4,1:4〕
  9table(grouplist)
  10boxplot(dat〔1,〕grouplist)按照grouplist分组画箱线图
  11hr12boxplot的美化版
  13bplotfunction(g){
  14dfdata。frame(geneg,stagegrouplist)
  15ggboxplot(df,xstage,ygene,
  16colorstage,palettejco,
  17addjitter)
  18Addpvalue
  19pstatcomparemeans()
  20}
  21}
  22利用定义好的函数检查数据
  23bplot(dat〔1,〕)
  24bplot(dat〔2,〕)
  25bplot(dat〔3,〕)
  26bplot(dat〔4,〕)
  27hr28hr29limma
  30library(limma)
  31方法1:不制作比较矩阵,简单
  32但是做不到随心所欲的指定任意两组进行比较
  33if(T){
  34designmodel。matrix(factor(grouplist))
  35fitlmFit(dat,design)
  36fit2eBayes(fit)
  37上面是limma包用法的一种方式
  38options(digits4)设置全局的数字有效位数为4
  39topTable(fit2,coef2,adjustBH)
  40}
  41hr42方法2:制作比较矩阵
  43可以随心所欲的指定任意两组进行比较
  44if(T){
  45model。matrix(0factor(grouplist))
  46colnames(design)levels(factor(grouplist))
  47head(design)
  48exprSetdat
  49rownames(design)colnames(exprSet)
  50design
  51hr52比较矩阵
  53这个矩阵声明,我们要把npc组跟Normal进行差异分析比较
  54contrast。makeContrasts(npcnormal,
  55levelsdesign)
  56contrast。matrix
  57hr58degfunction(exprSet,design,contrast。matrix){
  59step1
  60lmFit(exprSet,design)
  61step2
  62fit2contrasts。fit(fit,contrast。matrix)
  63hr64fit2eBayes(fit2)defaultnotrend!!!
  65eBayes()withtrendTRUE
  66hr67step3
  68有了比较矩阵后,coef1,而numberInf是把所有结果都打印出来
  69tempOutputtopTable(fit2,coef1,numberInf)
  70nrDEGna。omit(tempOutput)
  71write。csv(nrDEG2,limmanotrend。results。csv,quoteF)
  72head(nrDEG)
  73return(nrDEG)
  74}
  75hr76degdeg(exprSet,design,contrast。matrix)
  77hr78head(deg)
  79}
  80hr81hr82save(deg,filedatadeg。Rdata)
  83hr84load(filedatadeg。Rdata)
  85head(deg)
  86bplot(dat〔rownames(deg)〔1〕,〕)
  87forvolcanoandMAplot
  88结果存放在picvolcano。png和picMA。png
  89if(T){
  90nrDEGdeg
  91head(nrDEG)
  92attach(nrDEG)
  93原始版火山图
  94plot(logFC,log10(P。Value))
  95library(ggpubr)
  96dfnrDEG
  97dfylog10(P。Value)
  98ggscatter(df,xlogFC,yy,size0。5)
  99定义logFC2为阈值
  100dfstateifelse(dfP。V0。01,stable,
  101ifelse(dflogFC2,up,
  102ifelse(dflogFC2,down,stable))
  103)
  104table(dfstate)
  105dfnamerownames(df)
  106head(df)
  107ggscatter(df,xlogFC,yy,size0。5,colorstate)
  108ggscatter(df,xlogFC,yy,colorstate,size0。5,
  109labelname,repelT,
  110label。selectrownames(df)〔dfstate!stable〕,
  111label。selectc(TTC9,AQP3,CXCL11,PTGS2),挑选一些基因在图中显示出来
  112palettec(00AFBB,E7B800,FC4E07))
  113ggsave(picvolcano。png)114:115MA图
  116ggscatter(df,xAveExpr,ylogFC,size0。2)
  117dfpcifelse(dfP。V0。001,0。001,
  118ifelse(dfP。V0。01,0。0010。01,0。01))!0。01,
  119table(dfpc)
  120ggscatter(df,xAveExpr,ylogFC,colorpc,size0。2,
  121palettec(green,red,black))
  122ggsave(picMA。png)
  123}124:125forheatmap
  126if(T){
  127load(filedatastep1output。Rdata)
  128每次都要检测数据
  129dat〔1:4,1:4〕
  130table(grouplist)
  131xdeglogFC
  132names(x)rownames(deg)133:134cg中存放着变化上升和下降的前100个基因名
  135cgc(names(head(sort(x),100)),
  136names(tail(sort(x),100)))
  137library(pheatmap)
  138nt(scale(t(dat〔cg,〕)))139:140n〔2〕2
  141n〔2〕2
  142n〔1:4,1:4〕
  143pheatmap(n,showcolnamesF,showrownamesF)
  144acdata。frame(groupgrouplist)
  145rownames(ac)colnames(n)将ac的行名也就分组信息(是‘noTNBC’还是‘TNBC’)给到n的列名,即热图中位于上方的分组信息
  146pheatmap(n,showcolnamesF,
  147showrownamesF,
  148clustercolsF,
  149annotationcolac,filenamepicheatmaptop200DEG。png)列名注释信息为ac即分组信息150:151
  152}153:154write。csv(deg,filedatadeg。csv)
  volcano。png
  MA。png
  heatmaptop200DEG。png
  step4annogokegg
  关于基因名和ID之间的各种转换:bitr(geneID,fromType,toType,OrgDb,dropTRUE)例如:
  1head(unique(degsymbol))
  2〔1〕LOC388780SLC6A6RGS22AKR1D1AOC1FOXJ1
  3bitr(unique(degsymbol),fromTypeSYMBOL,
  4toTypec(ENTREZID),
  5OrgDborg。Hs。eg。db)
  这里将KEGG和GO富集分析函数自定义为3个函数runkegg、rungo、keggplot
  每次运行前先运行下面代码:
  1KEGGpathwayanalysis
  2具体结果数据在data下,图在pic下
  3function(geneup,genedown,geneListF,protest){
  4geneupunique(geneup)
  5genedownunique(genedown)
  6genediffunique(c(geneup,genedown))
  7overrepresentationtest
  8下面把3个基因集分开做超几何分布检验
  9首先是上调基因集。
  10kk。enrichKEGG(genegeneup,
  11organismhsa,
  12universegeneall,
  13pvalueCutoff0。9,
  14qvalueCutoff0。9)
  15head(kk。up)〔,1:6〕
  16kkkk。up
  17dotplot(kk)
  18barplot(kk)
  19kkDOSE::setReadable(kk,OrgDborg。Hs。eg。db,keyTypeENTREZID)
  20head(kk)
  21write。csv(kkresult,paste0(data,pro,kk。up。csv))
  22hr23首先是下调基因集。
  24kk。enrichKEGG(genegenedown,
  25organismhsa,
  26universegeneall,
  27pvalueCutoff0。9,
  28qvalueCutoff0。9)
  29head(kk。down)〔,1:6〕
  30kkkk。down
  31dotplot(kk)
  32barplot(kk)
  33kkDOSE::setReadable(kk,OrgDborg。Hs。eg。db,keyTypeENTREZID)
  34write。csv(kkresult,paste0(data,pro,kk。down。csv))
  35hr36最后是上下调合并后的基因集。
  37kk。enrichKEGG(genegenediff,
  38organismhsa,
  39pvalueCutoff0。05)
  40head(kk。diff)〔,1:6〕
  41kkkk。diff
  42dotplot(kk)
  43barplot(kk)
  44kkDOSE::setReadable(kk,OrgDborg。Hs。eg。db,keyTypeENTREZID)
  45write。csv(kkresult,paste0(data,pro,kk。diff。csv))
  46hr47hr48as。data。frame(kk。down)
  49as。data。frame(kk。up)
  50keggdowndt〔0。01,〕;downkegggroup1
  51keggupdt〔0。01,〕;upkegggroup1
  52画图设置,这个图很丑,大家可以自行修改。
  53keggplot(upkegg,downkegg)
  54hr55ggsave(gkegg,filenamepaste0(pic,pro,keggupdown。png))
  56hr57GSEA
  58if(geneList){
  59hr60GSEA算法跟上面的使用差异基因集做超几何分布检验不一样。
  61gseKEGG(geneListgeneList,
  62organismhsa,
  63nPerm1000,
  64minGSSize20,
  65pvalueCutoff0。9,
  66verboseFALSE)
  67head(kkgse)〔,1:6〕
  68gseaplot(kkgse,geneSetIDrownames(kkgse〔1,〕))
  69gseaplot(kkgse,hsa04110,titleCellcycle)
  70kkDOSE::setReadable(kkgse,OrgDborg。Hs。eg。db,keyTypeENTREZID)
  71tmpkkresult
  72write。csv(kkresult,paste0(pro,kegg。gsea。csv))
  73hr74hr75这里找不到显著下调的通路,可以选择调整阈值,或者其它。
  76kkgse〔0。05kkgseenrichmentS0,〕;downkegggroup1
  77kkgse〔0。050,〕;upkegggroup1!0。05
  78hr79gkeggkeggplot(upkegg,downkegg)
  80print(gkegg)
  81ggsave(gkegg,filenamepaste0(pro,kegggsea。png))
  82}
  83}
  84hr85GOdatabaseanalysis
  86具体结果数据在data下,图在pic下
  87function(geneup,genedown,protest){
  88geneupunique(geneup)
  89genedownunique(genedown)
  90genediffunique(c(geneup,genedown))
  91glistlist(geneupgeneup,
  92genedowngenedown,
  93genediffgenediff)
  94因为go数据库非常多基因集,所以运行速度会很慢。
  95if(T){
  96lapply(glist,function(gene){
  97lapply(c(BP,MF,CC),function(ont){
  98cat(paste(Nowprocess,names(gene),ont))
  99enrichGO(genegene,
  100universegeneall,
  101OrgDborg。Hs。eg。db,
  102ontont,
  103pAdjustMethodBH,
  104pvalueCutoff0。99,
  105qvalueCutoff0。99,
  106readableTRUE)107:108print(head(ego))
  109return(ego)
  110})
  111})
  112save(goenrichresults,filepaste0(data,pro,goenrichresults。Rdata))113:114}
  115只有第一次需要运行,就保存结果哈,下次需要探索结果,就载入即可。
  116load(filepaste0(data,pro,goenrichresults。Rdata))117:118n1c(geneup,genedown,genediff)
  119n2c(BP,MF,CC)
  120for(iin1:3){
  121for(jin1:3){
  122fnpaste0(pic,pro,dotplot,n1〔i〕,,n2〔j〕,。png)
  123cat(paste0(fn,))
  124png(fn,res150,width1080)
  125print(dotplot(goenrichresults〔〔i〕〕〔〔j〕〕))
  126dev。off()
  127}
  128}
  129}130:131132:133合并up和down的基因KEGG结果,放在一幅图里展示
  134function(upkegg,downkegg){
  135datrbind(upkegg,downkegg)
  136colnames(dat)
  137datpvaluelog10(datpvalue)
  138datpvaluedatpvaluedatgroup139:140datdat〔order(datpvalue,decreasingF),〕141:142ggplot(dat,aes(xreorder(Description,order(pvalue,decreasingF)),ypvalue,fillgroup))
  143geombar(statidentity)
  144scalefillgradient(lowblue,highred,guideFALSE)
  145scalexdiscrete(namePathwaynames)
  146scaleycontinuous(namelog10Pvalue)
  147coordflip()themebw()theme(plot。titleelementtext(hjust0。5))
  148ggtitle(PathwayEnrichment)
  149print(gkegg)
  150}
  真正代码
  1载入数据
  2if(T){
  3rm(listls())
  4options(stringsAsFactorsF)5:6load(filedatadeg。Rdata)
  7head(deg)
  8}9:10数据预处理
  11不同的阈值,筛选到的差异基因数量就不一样,后面的超几何分布检验结果就大相径庭。
  12logFCt1。5
  13预处理1
  14if(T){
  15deggifelse(degP。V0。05,stable,
  16ifelse(deglogFClogFCt,UP,
  17ifelse(deglogFClogFCt,DOWN,stable))
  18)
  19table(degg)
  20head(deg)
  21degsymbolrownames(deg)
  22library(ggplot2)
  23library(clusterProfiler)
  24library(org。Hs。eg。db)
  25bitr(unique(degsymbol),fromTypeSYMBOL,
  26toTypec(ENTREZID),
  27OrgDborg。Hs。eg。db)
  28head(df)
  29DEGdeg
  30head(DEG)31:32DEGmerge(DEG,df,by。ySYMBOL,by。xsymbol)
  33head(DEG)
  34save(DEG,filedataannoDEG。Rdata)
  35}
  36预处理2
  37if(T){
  38geneupDEG〔DEGgUP,ENTREZID〕
  39genedownDEG〔DEGgDOWN,ENTREZID〕
  40genediffc(geneup,genedown)
  41geneallas。character(DEG〔,ENTREZID〕)
  42data(geneList,packageDOSE)
  43head(geneList)
  44boxplot(geneList)
  45boxplot(DEGlogFC)46:47geneListDEGlogFC
  48names(geneList)DEGENTREZID
  49geneListsort(geneList,decreasingT)
  50}51:52detailedplot
  53if(T){
  54source(keggandgoupanddown。R)
  55runkegg(geneup,genedown,pronpcVSnormal)
  56需要多go数据库的3个条目进行3次富集分析,非常耗时。
  57rungo(geneup,genedown,pronpcVSnormal)
  58}59:60
  61综合显示图
  62if(F){
  63enrichGO(geneup,OrgDborg。Hs。eg。db,ontall)
  64library(ggplot2)
  65library(stringr)
  66barplot(go,splitONTOLOGY)facetgrid(ONTOLOGY。,scalefree)
  67barplot(go,splitONTOLOGY,font。size10)
  68facetgrid(ONTOLOGY。,scalefree)
  69scalexdiscrete(labelsfunction(x)strwrap(x,width50))
  70ggsave(picgeneupGOallbarplot。png)71:72enrichGO(genedown,OrgDborg。Hs。eg。db,ontall)
  73barplot(go,splitONTOLOGY,font。size10)
  74facetgrid(ONTOLOGY。,scalefree)
  75scalexdiscrete(labelsfunction(x)strwrap(x,width50))
  76ggsave(picgenedownGOallbarplot。png)
  77}
  detailedplot
  npcVSnormalkeggupdown。png(kegg结果还可以接受)
  GO系列结果过于冗余:
  npcVSnormaldotplotgenediffBP。png
  npcVSnormaldotplotgenediffCC。png
  npcVSnormaldotplotgenediffMF。png
  npcVSnormaldotplotgenedownBP。png
  npcVSnormaldotplotgenedownCC
  npcVSnormaldotplotgenedownMF。png
  npcVSnormaldotplotgeneupBP。png
  npcVSnormaldotplotgeneupCC。png
  npcVSnormaldotplotgeneupMF。png
  综合显示图(更推荐)
  genedownGOallbarplot。png
  geneupGOallbarplot。png
  step5annoGSEA
  GSEA数据下载网页:https:www。gseamsigdb。orggseadownloads。jsp
  msigdb。v7。0。symbols。gmt:https:www。gseamsigdb。orggseamsigdbdownloadfile。jsp?filePathresourcesmsigdb7。0msigdb。v7。0。symbols。gmt
  msigdb。v7。0。entrez。gmt:https:www。gseamsigdb。orggseamsigdbdownloadfile。jsp?filePathresourcesmsigdb7。0msigdb。v7。0。entrez。gmt
  所有打包gmt:https:www。gseamsigdb。orggseamsigdbdownloadfile。jsp?filePathresourcesmsigdb7。0msigdbv7。0filestodownloadlocally。zip
  1载入数据和R包
  2DEG为limma得到的差异分析结果
  3if(T){
  4rm(listls())
  5options(stringsAsFactorsF)
  6load(filedataannoDEG。Rdata)
  7library(ggplot2)
  8library(clusterProfiler)
  9library(org。Hs。eg。db)
  10}11:12
  13对MigDB中的全部基因集做GSEA分析。
  14按照FC的值对差异基因进行排序
  15http:www。bioinfotrainee。com2105。html
  16http:www。bioinfotrainee。com2102。html
  17自行修改存放gmt文件路径d
  18GSEA每个geneset的具体结果保存在gsearesults这个list中
  19而最终结果保存在gsearesultsdf数据框中
  20ddataGSEAgmtmsigdbv7。0filestodownloadlocallymsigdbv7。0GMTssymbols
  21if(T){
  22geneListDEGlogFC
  23names(geneList)DEGsymbol
  24geneListsort(geneList,decreasingT)
  25选择gmt文件(MigDB中的全部基因集)26:27gmtslist。files(d,patternall)
  28gmts29:30GSEA分析
  31library(GSEABase)BiocManager::install(GSEABase)
  32下面使用lapply循环读取每个gmt文件,并且进行GSEA分析
  33如果存在之前分析后保存的结果文件,就不需要重复进行GSEA分析。
  34fdatagsearesults。Rdata
  35if(!file。exists(f)){
  36lapply(gmts,function(gmtfile){
  37gmtfilegmts〔2〕
  38filepathpaste0(d,gmtfile)
  39read。gmt(filepath)
  40print(paste0(Nowprocessthe,gmtfile))
  41GSEA(geneList,TERM2GENEgeneset,verboseFALSE)
  42head(egmt)
  43gseaplot(egmt,geneSetIDrownames(egmt〔1,〕))
  44return(egmt)
  45})
  46上面的代码耗时,所以保存结果到本地文件
  47save(gsearesults,filef)
  48}
  49load(filef)
  50提取gsea结果,熟悉这个对象
  51lapply(gsearesults,function(x){
  52cat(paste(dim(xresult)),)
  53xresult
  54})
  55}
  56随便看几个结果图
  57dev。off()
  58do。call(rbind,gsearesultslist)
  59gseaplot(gsearesults〔〔2〕〕,geneSetIDNIKOLSKYBREASTCANCER7P15AMPLICON)
  60gseaplot(gsearesults〔〔2〕〕,RICKMANHEADANDNECKCANCERD)
  step6annoGSVA
  老实说,我对GSVA还不是很理解,但是知道在代码方面,做起来比较简单,有2个输入文件,一个是表达矩阵,一个是gmt文件即可。先把代码谢在这里,日后如果有需要,再仔细研究吧:
  1对MigDB中的全部基因集做GSVA分析。
  2还有ssGSEA,PGSEA
  3载入数据
  4if(T){
  5rm(listls())
  6options(stringsAsFactorsF)7:8library(ggplot2)
  9library(clusterProfiler)
  10library(org。Hs。eg。db)
  11load(filedatastep1output。Rdata)
  12每次都要检测数据
  13dat〔1:4,1:4〕
  14}15:16GSVA分析
  17存放geneset的文件路径需要具体修改
  18ddataGSEAgmtmsigdbv7。0filestodownloadlocallymsigdbv7。0GMTssymbols
  19if(T){
  20Xdat
  21table(grouplist)
  22MolecularSignaturesDatabase(MSigDb)
  23gmtslist。files(d,patternall)
  24gmts
  25library(GSVA)BiocManager::install(GSVA)
  26if(!file。exists(datagsvamsigdb。Rdata)){
  27lapply(gmts,function(gmtfile){
  28gmtfilegmts〔8〕;gmtfile
  29read。gmt(file。path(d,gmtfile))
  30es。gsva(X,geneset,
  31mx。diffFALSE,verboseFALSE,
  32parallel。sz1)
  33return(es。max)
  34})
  35adjPvalueC0。001
  36logFClog2(2)
  37lapply(esmax,function(es。max){
  38es。maxesmax〔〔1〕〕
  39table(grouplist)
  40dim(es。max)
  41model。matrix(0factor(grouplist))
  42colnames(design)levels(factor(grouplist))
  43rownames(design)colnames(es。max)
  44design
  45library(limma)
  46contrast。makeContrasts(paste0(unique(grouplist),collapse),levelsdesign)
  47contrast。makeContrasts(npcnormal,
  48levelsdesign)49:50contrast。matrix这个矩阵声明,我们要把progres。组跟stable进行差异分析比较51:52degfunction(es。max,design,contrast。matrix){
  53step1
  54lmFit(es。max,design)
  55step2
  56fit2contrasts。fit(fit,contrast。matrix)
  57这一步很重要,大家可以自行看看效果58:59fit2eBayes(fit2)defaultnotrend!!!
  60eBayes()withtrendTRUE
  61step3
  62decideTests(fit2,p。valueadjPvalueCutoff)
  63summary(res)
  64tempOutputtopTable(fit2,coef1,nInf)
  65nrDEGna。omit(tempOutput)
  66write。csv(nrDEG2,limmanotrend。results。csv,quoteF)
  67head(nrDEG)
  68return(nrDEG)
  69}70:71redeg(es。max,design,contrast。matrix)
  72nrDEGre
  73head(nrDEG)
  74return(nrDEG)
  75})
  76gmts
  77save(esmax,esdeg,filedatagsvamsigdb。Rdata)
  78}
  79}80:81画图展示,结果存放在pic下
  82if(T){
  83load(filedatagsvamsigdb。Rdata)
  84library(pheatmap)
  85lapply(1:length(esdeg),function(i){
  86i8
  87print(i)
  88datesmax〔〔i〕〕
  89dfesdeg〔〔i〕〕
  90dfdf〔dfP。V0。010。3,〕!0。01
  91print(dim(df))
  92if(nrow(df)5){
  93nrownames(df)
  94datdat〔match(n,rownames(dat)),〕
  95acdata。frame(ggrouplist)
  96rownames(ac)colnames(dat)
  97rownames(dat)substring(rownames(dat),1,50)
  98pheatmap::pheatmap(dat,
  99fontsizerow8,height11,
  100annotationcolac,showcolnamesF,
  101filenamepaste0(〔picgsva,strsplit(gmts〔i〕,〔。〕)〔〔1〕〕〔1〕,。pdf))102:103}
  104})105:106adjPvalueC0。001
  107logFClog2(2)
  108dfdo。call(rbind,esdeg)
  109esmatrixdo。call(rbind,esmax)
  110dfdf〔dfP。V0。010。5,〕!0。01
  111write。csv(df,filedataGSVADEG。csv)
  112}
  因为用到的这个样本用GSVA没有得到显著性结果,所以没有图出来,具体也没有深究,有需要日后再仔细研究吧
  step7visualization
  http:www。360doc。comconteant1803091833459258735717104。shtml
  1主要是关于KEGG方面的扩展图
  2主要是关于KEGG方面的扩展图
  3hr4载入数据
  5if(T){
  6rm(listls())
  7options(stringsAsFactorsF)
  8hr9library(ggplot2)
  10library(clusterProfiler)
  11library(org。Hs。eg。db)
  12load(filedataannoDEG。Rdata)13:14head(DEG)
  15}16:17preprocessdata
  18if(T){
  19geneupDEG〔DEGgUP,ENTREZID〕
  20genedownDEG〔DEGgDOWN,ENTREZID〕
  21genediffc(geneup,genedown)
  22geneallas。character(DEG〔,ENTREZID〕)
  23制作差异基因listL
  24boxplot(DEGlogFC)25:26geneListDEGlogFC
  27names(geneList)DEGENTREZID
  28geneListsort(geneList,decreasingT)
  29}30:31
  32KEGG富集分析得到结果
  33if(T){
  34if(!file。exists(dataenrichkk。rdata)){
  35genedown
  36geneup
  37enrichKKenrichKEGG(genegeneup,
  38organismhsa,
  39universegeneall,
  40pvalueCutoff0。1,
  41qvalueCutoff0。1)
  42save(enrichKK,filedataenrichkk。rdata)
  43}
  44load(filedataenrichkk。rdata)
  45查看KEGG结果
  46head(enrichKK)〔,1:6〕
  47打开网页看相关KEGG通路图
  48browseKEGG(enrichKK,hsa05150)49:50将数据中的entrzid变成symbol
  51更为易读
  52enrichKKDOSE::setReadable(enrichKK,OrgDborg。Hs。eg。db,keyTypeENTREZID)
  53enrichKK
  54}55:56
  57可视化
  58条带图
  59if(T){
  60par(mfrowc(2,1))
  61barplot(enrichKK,showCategory20)
  62ggsave(picbarplot。png)
  63}64:65气泡图
  66if(T){
  67dotplot(enrichKK)
  68ggsave(picdotplot。png)
  69}70:71下面的图需要映射颜色,设置和示例数据一样的geneList72:73展示top5通路的共同基因,要放大看。
  74GeneConceptNetwork
  75if(T){
  76cnetplot(enrichKK,foldChangegeneList,colorEdgeTRUE,circularF)
  77ggsave(piccnetplot。png)
  78cnetplot(enrichKK,foldChangegeneList,colorEdgeTRUE,circularT)
  79ggsave(piccnetplotcircular。png)
  80}81:82
  83EnrichmentMap
  84if(T){
  85emapplot(enrichKK)
  86ggsave(picEnrichmentMap。png)
  87}88:89(4)展示通路关系,仅仅是针对于GO数据库结果。
  90goplot(enrichKK)
  91(5)Heatmaplikefunctionalclassification
  92if(T){
  93heatplot(enrichKK,foldChangegeneList)
  94ggsave(picEnrichmentHeatmap。png)
  95}
  条带图:
  气泡图:
  GeneConceptNetwork图:每一个小蓝圈表示一个基因,其颜色表示FC值,每个KEGGterm圈的大小由里面包含基因的数目决定。
  成环:更炫酷了,但是感觉图形展示不方便
  不成环:信息展示更有力吧
  EnrichmentMap图:这里和上面的图类似,只不过不再显示具体的基因,而是直接画出每个term和term之间的关系,每个圆圈代表着一个term,圆圈大小代表着有多少个基因,颜色表示p值。
  如果term和term之间有共同的基因,那么就会连接起来,聚在一起。
  Heatmaplikefunctionalclassification:
  和我们常规的热图不太像,这里纵轴是每个KEGG通路,横轴是涉及到的基因。颜色表示FC值。
  致谢
  上面所有的代码都来自生信技能树曾老板jimmy的帮助,同时我在测试运行的过程中又进行了部分改进和增补。
  就用曾老板亲自编辑的感谢词来感谢吧:
  FatYangthankDr。JianmingZeng(UniversityofMacau),andallthemembersofhisbioinformaticsteam,biotrainee,forgenerouslysharingtheirexperienceandcodes!
搜索 投诉 评论 转载

如何锻炼阴茎能持久性针对男士而言,健壮的人体也会让自身在夫妻生活中维持耐受性,而在平常里,大伙儿也可根据锻练的方法而让自身的生殖器勃起更长久,下边就跟着我一起来掌握一下吧。男士勃起时间短的缘……男孩的性发育从哪些方面能看出来呢男孩的性发育就像一个技术高超的魔术师,它可以使混沌未开的孩子变成魁梧健壮的小伙子或婀娜多姿的姑娘。这些变化都是体内两性激素急剧升高的结果,那么男孩的性发育从哪些方面能看出来呢?……朝鲜族的礼俗禁忌朝鲜族有热情待客、尊老爱幼的传统。客人进门前,要先干咳一声,或以在家吗?向主人示问;脱鞋进门,进门上炕;对长者起立让坐,为长者让路;让客人吃饱吃好;客人吃饱,汤匙应放在桌上,或……石斑鱼多少钱一斤石斑鱼价格行情分析石斑鱼多少钱一斤?北京大洋路农副产品批发市场青石斑鱼:85元斤2019石斑鱼价格行情分析近年来,海南东方市板桥镇利用区位优势,因地制宜大力发展特色水产养殖业,……数据挖掘流程代码版方便抄袭GEO数据挖掘流程代码版(方便抄袭)微信公众号:生信小知识关注可了解更多的教程及单细胞知识。问题或建议,请公众号留言;内容目录step0installp……软银孙正义下一个投资会投在哪11月19日,首届世界互联网大会今日在浙江乌镇开幕,在19日下午的连接未来智慧共享移动互联让生活更美好分论坛上,日本软银集团的董事长孙正义指出,所以很多人现在问我,你下一个投资……绣球花烂根怎么办绣球花烂根的原因及解救方法如果平时对绣球花的养护不当,可能会出现烂根的现象,一些花友可能不知道绣球花烂根怎么办,只要找到原因,对症下药就能很快的解决。绣球花烂根的原因大多是浇水不当施肥过多引起的,只要合……武汉大学年起将推行按学分收费制度记者从武汉大学获悉,从今年9月起,武汉大学将推行按学分收费制度,本科生学费将直接与所修学分挂钩。这是武汉大学本科教学改革中的一项重要内容,也是我国高校学分制改革的一项探索。……解决体育美育师资之困光靠兼职还不够日前教育部印发了《学校体育美育兼职教师管理办法》,明确了学校体育美育兼职教师选聘的范围是校外体育艺术专业人员,而非本校内的其他学科教师或人员的兼任。《办法》提出将体育美育兼职教……星座情感下半年爱情不顺的星座星座情感:下半年爱情不顺的星座第五名:金星在水瓶座太恨,情感被玩弄!在下半年,你特别会对成熟达练的男人产生恋爱憧憬哦!他目光深邃,举止优雅,男人味十足,就这么出现在……苏珊米勒年月天蝎座运势完整版苏珊米勒2018年10月天蝎座运势完整版正文天蝎座的生日就要到了,而太阳在天秤座的行运也即将在10月23日结束,思考一下,从这个生日到下个生日这一年时间里,你想要达……观赏鱼天不喂会饿死吗喂什么饲料好观赏鱼如果是成鱼的话,10天不喂是不会饿死的,幼鱼就不好说了。如果一段时间内不能给鱼儿喂食,最好准备一个自动喂食器,这样可以定期投喂饲料,保证鱼儿的生存。平时投喂的饲料主要有三……
吸烟竟然会导致阳痿烟民要当心啦如何分辨出一个渣男的原型穴位埋线疗法治疗痛经效果相当不错熬夜给男性带来的六大身体透支关注交强险不是糊涂人别算糊涂账朵玫瑰代表什么七里香怎么养四级火箭助力创业到规模商业的用户增长老板的文化就是企业文化的上限吗凤尾竹据调查六成毕业生青睐铁饭碗三成选择二线城市年月日黄历查询今日万年历黄历吉日一览表
小学我的爸爸300字作文跑鞋会越穿越大吗会变松一点竞选体育委员发言稿fresh黑茶眼霜什么时候用最好?馥蕾诗黑茶眼霜怎么样?无线网络密码泄露有什么影响美德在我身边红楼梦第七十二回原文及赏析兰州儿童煤气中毒事件后续急救中心:正跟进调查热评聚热点网 我们怎么样能够让自己的收入最大化,又怎么样能够去防止同行炸群寄东洲和尚西涧庵居传动造句用传动造句大全老北京的夏天,大蒲扇,小竹车,它们承载了无数北京人的美好回忆

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找菏泽德阳山西湖州宝鸡上海茂名内江三亚信阳长春北海西安安徽黄石烟台沧州湛江肇庆鹤壁六安韶关成都钦州