美文网首页R
KEGG的翻车之旅

KEGG的翻车之旅

作者: 佳名 | 来源:发表于2019-12-01 22:32 被阅读0次

    7,744的基因集竟然一个通路都没有富集出来。

    kegg <- enrichKEGG(gene= testdata$entrezgene_id, 
                       organism = "hsa", 
                       keyType = "kegg")
    

    于是使用在线富集

    kegg <- enrichKEGG(gene= testdata$entrezgene_id, 
                       organism = "hsa", 
                       keyType = "kegg", 
                       use_internal_data = TRUE)
    

    结果提示没有安装KEGG.db,于是安装。

    BiocManager::install('KEGG.db')
    

    重新富集

    kegg <- enrichKEGG(gene= testdata$entrezgene_id, 
                       organism = "hsa", 
                       keyType = "kegg", 
                       use_internal_data = TRUE)
    

    富集结果为13个通路,修改参数,重新富集

    kegg <- enrichKEGG(gene= testdata$entrezgene_id, 
                       organism = "hsa", 
                       keyType = "kegg", maxGSSize =100000,
                       pvalueCutoff = 0.5,
                       use_internal_data = TRUE)
    

    富集结果为49个通路

    testdata1 <- data.frame(testdata$log2FoldChange)
    testdata1
    row.names(testdata1) <- testdata$entrezgene
    

    结果报错:

    Error in `.rowNamesDF<-`(x, value = value) : 不允许有重复的'row.names'
    In addition: Warning message:
    non-unique values when setting 'row.names':  
    

    重新ID转换

    human <- useMart("ensembl","hsapiens_gene_ensembl")
    geneID <- getBM(attributes=c("external_gene_name","entrezgene_description","entrezgene_id"),
                    filters = "external_gene_name",values = resdata[,1], mart = human)
    

    行名一直有重复项,换clusterProfiler

    ENTREZID<- bitr(resdata[,1], fromType = "SYMBOL", toType=c("ENTREZID","GENENAME"),
                    OrgDb = org.Hs.eg.db, drop = TRUE)
    

    成功了,但是ID转换没有getBM多,仔细比对,原来像MT-ND这种线粒体上的基因,bitr函数不识别,bitr识别的是ND。biomaRt比较坑的是,许多ID转换出来是错的,如“SMN1”和“SMN2"这两个基因得到的entrezgene_id都是6606,甚至毫无相干的两个基因,TRIM74和STAG3L3得到的都是378108,连entrezgene_description都是一样的。
    使用HTseq的时候,列名为gene_name,出现27353个统计单位;
    列名为gene_id,出现58884个统计单位,也就是说gene_name和gene_id并不是一一对应的关系。使用gene_id遇到的情况是ID转换时出现两个gene_name。
    ID转换的时候使用clusterProfiler的bitr函数。

    使用两份数据进行测试,一份是小鼠,一份是人
    Note:resdata1[,1]为数据框第一列,即我要转换的ID,小鼠20009个ID,人 18732个ID。

    1 小鼠

    1.1 使用biomaRt包

    library('biomaRt')
    mart <- useMart("ensembl","mmusculus_gene_ensembl")
    ENTREZID <- getBM(attributes=c("external_gene_name",
                                   "entrezgene_description",
                                   "ensembl_gene_id",
                                   "entrezgene_id"),
                      filters = "ensembl_gene_id",
                      values = resdata1[,1], mart = mart)
    #去除重复的ENSEMBL
    ENTREZID=ENTREZID[!duplicated(ENTREZID$ensembl_gene_id),]
    #为了和resdata1合并,需要重新组成数据框
    data <- data.frame(Row.names=ENTREZID$ensembl_gene_id,
                       entrezgene_id,
                       gene_name=ENTREZID$external_gene_name,
                       description=ENTREZID$entrezgene_description)
    #合并
    data1 <-merge(data,resdata1,by="Row.names")
    #测试
    testdata <-subset(data1,entrezgene_id!= 'NA')
    nrow(testdata)
    #[1] 14519
    

    1.2 使用bitr函数

    library('clusterProfiler') 
    library('org.Mm.eg.db')#version=3.10.0
    ENTREZID<- bitr(resdata1[,1], fromType = "ENSEMBL", 
                    toType=c('SYMBOL',"ENTREZID","GENENAME"),
                    OrgDb = org.Mm.eg.db, drop = FALSE)
    #去除重复的ENSEMBL
    ENTREZID=ENTREZID[!duplicated(ENTREZID$ENSEMBL),]
    data <- data.frame(Row.names=ENTREZID$ENSEMBL,
                       SYMBOL=ENTREZID$SYMBOL,
                       entrezgene_id=ENTREZID$ENTREZID,
                       description=ENTREZID$GENENAME)
    #合并
    data1 <-merge(data,resdata1,by="Row.names")
    #测试
    testdata <-subset(data1,entrezgene_id!= 'NA')
    nrow(testdata)
    #[1] 15554
    

    2 人类

    2.1 使用biomaRt包

    library('biomaRt')
    mart <- useMart("ensembl","hsapiens_gene_ensembl")
    ENTREZID <- getBM(attributes=c("external_gene_name",
                                   "entrezgene_description",
                                   "ensembl_gene_id",
                                   "entrezgene_id"),
                      filters = "ensembl_gene_id",
                      values = resdata1[,1], mart = mart)
    #去除重复的ENSEMBL
    ENTREZID=ENTREZID[!duplicated(ENTREZID$ensembl_gene_id),]
    data <- data.frame(Row.names=ENTREZID$ensembl_gene_id,
                       entrezgene_id,
                       gene_name=ENTREZID$external_gene_name,
                       description=ENTREZID$entrezgene_description)
    #合并
    data1 <-merge(data,resdata1,by="Row.names")
    #测试
    testdata <-subset(data1,entrezgene_id!= 'NA')
    nrow(testdata)
    #[1] 13472
    

    2.2 使用bitr函数

    library('clusterProfiler') 
    library('org.Hs.eg.db')#version=3.10.0
    ENTREZID<- bitr(resdata1[,1], fromType = "ENSEMBL", 
                    toType=c('SYMBOL',"ENTREZID","GENENAME"),
                    OrgDb = org.Hs.eg.db, drop = FALSE)
    #去除重复的ENSEMBL
    ENTREZID=ENTREZID[!duplicated(ENTREZID$ENSEMBL),]
    data <- data.frame(Row.names=ENTREZID$ENSEMBL,
                       SYMBOL=ENTREZID$SYMBOL,
                       entrezgene_id=ENTREZID$ENTREZID,
                       description=ENTREZID$GENENAME)
    #合并
    data1 <-merge(data,resdata1,by="Row.names")
    #测试
    testdata <-subset(data1,entrezgene_id!= 'NA')
    nrow(testdata)
    #[1] 14896
    

    相关文章

      网友评论

        本文标题:KEGG的翻车之旅

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