日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

測序了,然后呢(四)OrgDb與富集分析

 生物_醫(yī)藥_科研 2019-01-22

  今天是生信星球陪你的第256天


   大神一句話,菜鳥跑半年。我不是大神,但我可以縮短你走彎路的半年~

   就像歌兒唱的那樣,如果你不知道該往哪兒走,就留在這學(xué)點(diǎn)生信好不好~

   這里有豆豆和花花的學(xué)習(xí)歷程,從新手到進(jìn)階,生信路上有你有我!

豆豆寫于19.1.20-21

為什么要搞全基因組測序(一)

測序了,然后呢(二)基因功能注釋

測序了,然后呢(三)功能注釋整合流程

要進(jìn)行GO或者KEGG富集分析,就需要知道每個(gè)基因?qū)?yīng)什么樣的GO/KEGG分類,OrgDb就是存儲(chǔ)不同數(shù)據(jù)庫基因ID之間對(duì)應(yīng)關(guān)系,以及基因與GO等注釋的對(duì)應(yīng)關(guān)系的 R 軟件包

如果自己研究的物種不在http:///packages/release/BiocViews.html#___OrgDb 之列,很大可能就需要自己構(gòu)建OrgDb,然后用clusterProfiler分析

所以本次的內(nèi)容都是基于非模式生物

--------------------------------------------------------------------------

發(fā)推送的時(shí)候花花和豆豆就在看我們十二期的學(xué)員們?cè)诤啎谄咛斓母邢?,看的好感?dòng),謝謝你們的支持,看到你們真的沒有白付出,我們很欣慰。
今天其實(shí)很累,但是寫推送讓我重回活力,我愛寫推送,我愛和你們交流
感謝所有關(guān)注我們的小伙伴,我們會(huì)更加努力,招財(cái)貓送你們好運(yùn)!??!

分類

非模式生物要想找到自己的注釋包,又分成兩類:

  • 一類是在AnnotationHub(https:///packages/release/bioc/html/AnnotationHub.html)中存在的,例如棉鈴蟲

  • 另一類是在AnnotationHub也不存在相應(yīng)物種,就需要用AnnotationForge( https:///packages/release/bioc/html/AnnotationForge.html )來自己構(gòu)建

第一類:利用AnnotationHub得到org.db

下面我以棉鈴蟲為例

首先下載并加載AnnotationHub

options('repos'= c(CRAN='https://mirrors.tuna./CRAN/'))
options(BioC_mirror='http://mirrors.ustc.edu.cn/bioc/')

if (!requireNamespace('BiocManager', quietly = TRUE))
    install.packages('BiocManager')
BiocManager::install('AnnotationHub', version = '3.8')
library(AnnotationHub)

然后加載現(xiàn)有的物種database

hub <>#這一步受限于網(wǎng)速,不成功的話多試幾次
# 調(diào)用圖形界面查看物種
display(hub) 
# 或者根據(jù)物種拉丁文名稱查找
query(hub,'helicoverpa')
#   'object[['AH66950']]' 

            title                                      
  AH66950 | org.Helicoverpa_armigera.eg.sqlite         
  AH66951 | org.Heliothis_(Helicoverpa)_armigera.eg....
# 這里AH66950是我們需要的
# 然后下載這個(gè)sqlite數(shù)據(jù)庫
ha.db <>'AH66950']]
#查看前幾個(gè)基因(Entrez命名)
head(keys(ha.db))
#查看包含的基因數(shù)
length(keys(ha.db)) 
#查看包含多少種ID
columns(ha.db)
#查看前幾個(gè)基因的ID
select(ha.db, keys(ha.db)[1:3], 
       c('REFSEQ''SYMBOL'), #想獲取的ID
       'ENTREZID')
#得到結(jié)果
  ENTREZID         REFSEQ SYMBOL
1  9977712 YP_004021052.1   COX1
2  9977713 YP_004021053.1   COX2
3  9977714 YP_004021054.1   ATP8
#保存到文件
saveDb(ha.db, 'Harms-AH66950.sqlite')
#之后再使用直接加載進(jìn)來
maize.db <>'Harms-AH66950.sqlite')
annotation_hub圖形界面

參考:https://mp.weixin.qq.com/s/lHKZtzpN2k9uPN7e6HjH3w

第二類:利用AnnotationForge得到org.db

通過上次的推送(功能注釋整合流程),我們知道了怎樣利用eggnog-mapper去人工構(gòu)建注釋、富集橋梁

上次選取的是一個(gè)病毒的小例子,這次可以用芝麻(Sesame)做演示

先下載蛋白序列

wget http://www./SesameFG/BLAST_search/G608_contig_2014-08-29.FgeneSH.pep.rar
# 解壓后上傳

因?yàn)榻y(tǒng)計(jì)了下有38406條序列,因此使用diamond來進(jìn)行功能注釋

# 前提是自己安裝好eggnog-mapper并且下載好相應(yīng)的數(shù)據(jù)庫
emapper.py -m diamond \
           -i sesame.fa \
           -o diamond \
           --cpu 19
# 得到如下信息,然后進(jìn)行處理,只保留表頭query_name這一行的注釋信息,去掉頭尾的# 等信息
sed -i '/^# /d' diamond.emapper.annotations 
sed -i 's/#//' diamond.emapper.annotations 
sesame-diamond

關(guān)于結(jié)果解釋:https://github.com/jhcepas/eggnog-mapper/wiki/Results-Interpretation

其中關(guān)于COG的介紹:倒數(shù)第二列

COG functional categories: COG functional category inferred from best matching OG 【會(huì)給出一個(gè)大寫字母,每一個(gè)大寫字母都有自己的解釋:COG_explanation】

STEP1:自己構(gòu)建的話,首先需要讀入文件

egg_f <>'diamond.emapper.annotations'
egg <>'\t')
egg[egg=='']<>NA #這個(gè)代碼來自花花的指導(dǎo)(將空行變成NA,方便下面的去除)

STEP2: 從文件中挑出基因query_name與eggnog注釋信息

gene_info <- egg %>%
        dplyr::select(GID = query_name, GENENAME = `eggNOG annot`) %>% na.omit()

STEP3-1:挑出query_name與GO注釋信息

gterms <- egg %>%
        dplyr::select(query_name, GO_terms) %>% na.omit()

STEP3-2:我們想得到query_name與GO號(hào)的對(duì)應(yīng)信息

# 先構(gòu)建一個(gè)空的數(shù)據(jù)框(弄好大體的架構(gòu),表示其中要有GID =》query_name,GO =》GO號(hào), EVIDENCE =》默認(rèn)IDA)
# 關(guān)于IEA:就是一個(gè)標(biāo)準(zhǔn),除了這個(gè)標(biāo)準(zhǔn)以外還有許多。IEA就是表示我們的注釋是自動(dòng)注釋,無需人工檢查http://wiki./index.php/Inferred_from_Electronic_Annotation_(IEA)
# 兩種情況下需要用IEA:1. manually constructed mappings between external classification systems and GO terms; 2.automatic transfer of annotation to orthologous gene products.
gene2go <>
                         GO = character(),
                         EVIDENCE = character())

# 然后向其中填充:注意到有的query_name對(duì)應(yīng)多個(gè)GO,因此我們以GO號(hào)為標(biāo)準(zhǔn),每一行只能有一個(gè)GO號(hào),但query_name和Evidence可以重復(fù)
for (row in 1:nrow(gterms)) {
        gene_terms <>'GO_terms'], ',', simplify = FALSE)[[1]]  
        gene_id <>'query_name'][[1]]
        tmp <>
                              GO = gene_terms,
                              EVIDENCE = rep('IEA', length(gene_terms)))
        gene2go <>
    }  

STEP4-1: 挑出query_name與KEGG注釋信息

gene2ko <- egg %>%
        dplyr::select(GID = query_name, KO = KEGG_KOs) %>%
        na.omit()

STEP4-2: 得到pathway2name, ko2pathway

這一步不需要管代碼什么意思,只需要知道它可以幫我們得到以上兩個(gè)文件就好

if(F){
    # 需要下載 json文件(這是是經(jīng)常更新的)
    # https://www./kegg-bin/get_htext?ko00001
    # 代碼來自:http://www./course/225/task/4861/show
    library(jsonlite)
    library(purrr)
    library(RCurl)

    update_kegg <>function(json = 'ko00001.json') {
        pathway2name <>
        ko2pathway <>

        kegg <>

        for (a in seq_along(kegg[['children']][['children']])) {
            A <>'children']][['name']][[a]]

            for (b in seq_along(kegg[['children']][['children']][[a]][['children']])) {
                B <>'children']][['children']][[a]][['name']][[b]] 

                for (c in seq_along(kegg[['children']][['children']][[a]][['children']][[b]][['children']])) {
                    pathway_info <>'children']][['children']][[a]][['children']][[b]][['name']][[c]]

                    pathway_id <>'ko[0-9]{5}')[1]
                    pathway_name <>' \\[PATH:ko[0-9]{5}\\]''') %>% str_replace('[0-9]{5} ''')
                    pathway2name <>

                    kos_info <>'children']][['children']][[a]][['children']][[b]][['children']][[c]][['name']]

                    kos <>'K[0-9]*')[,1]

                    ko2pathway <>
                }
            }
        }

        save(pathway2name, ko2pathway, file = 'kegg_info.RData')
    }

    update_kegg(json = 'ko00001.json')

}

STEP5:  利用GO將gene與pathway聯(lián)系起來,然后挑出query_name與pathway注釋信息

load(file = 'kegg_info.RData')
gene2pathway <- gene2ko %>% left_join(ko2pathway, by = 'KO') %>% 
        dplyr::select(GID, Pathway) %>%
        na.omit()

STEP6: 制作自己的Orgdb

# 查詢物種的Taxonomy,例如要查sesame
# https://www.ncbi.nlm./taxonomy/?term=sesame
tax_id = '4182'
genus = 'Sesamum' 
species = 'indicum'

makeOrgPackage(gene_info=gene_info,
                   go=gene2go,
                   ko=gene2ko,
                   pathway=gene2pathway,
                   version='0.0.1',
                   outputDir = '.',
                   tax_id=tax_id,
                   genus=genus,
                   species=species,
                   goTable='go')
sesame.orgdb <>'org.', str_to_upper(str_sub(genus, 11)) , species, '.eg.db', sep = '')

有了Orgdb就可以做富集分析了

# enrichGO最主要的目的就是將基因編號(hào)轉(zhuǎn)換成GO號(hào)
ego <>
                #模式物種
                #OrgDb = org.Mm.eg.db,
                #非模式物種,例如芝麻
                OrgDb = sesame.orgdb,
                ont = 'BP'#或MF或CC
                pAdjustMethod = 'BH',
                #pvalueCutoff  = 0.01,
                qvalueCutoff  = 0.01
# 同理也能做enrichKEGG

剩下的可以參考:http:///packages/release/bioc/vignettes/clusterProfiler/inst/doc/clusterProfiler.html#supported-organisms

最后,如果不想構(gòu)建orgdb還想做富集分析

滿足需求永遠(yuǎn)是第一生產(chǎn)力,如果你只想用一次,那么clusterProfiler的enricher可以學(xué)習(xí)一下

主要的兩個(gè)參數(shù)需要注意:gene 是基因ID,TERM2GENE 是GO/KEGG terms與基因ID的對(duì)應(yīng),例如上面圖片中的GO_terms、KEGG_KOs等eggnog-mapper結(jié)果,提取出來就好。對(duì)于沒有對(duì)應(yīng)terms的基因ID,那我們就把它們?nèi)サ簟?/p>

參考:http://guangchuangyu./2015/05/use-clusterprofiler-as-an-universal-enrichment-analysis-tool/


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多