YuLab-SMU / DOSE

:mask: Disease Ontology Semantic and Enrichment analysis
https://yulab-smu.top/biomedical-knowledge-mining-book/
116 stars 36 forks source link

update doid-doid data and doid-gene data #67

Closed huerqiang closed 2 years ago

huerqiang commented 2 years ago

老师,我先把DOSE数据更新的一些东西做个PR,对gson的修改我将在另外的PR中进行。此次PR共涉及三个包:分别是DOSE、DOyulab.db 和 GOSemSim。

每个包更新的内容:

DOyulab.db包:用于取代DO.db。

包含如下数据:

> ls("package:DOyulab.db")
 [1] "DO"          "DO_dbconn"   "DO_dbfile"   "DO_dbInfo"   "DO_dbschema" "DOALIAS"     "DOANCESTOR"  "DOCHILDREN"  "DOMAPCOUNTS" "DOOFFSPRING" "DOPARENTS"   "DOSYNONYM"   "DOTERM" 

我使用DO.db自带的Human.obo进行处理后生成DOyulab.db,将它与DO.db进行对比,DO id的数目以及DO id的祖先节点信息都完全相同,富集分析和语义相似性分析也完全相同,证明DOyulab.db的处理方式是正确的,除了更新数据外没有产生副作用。

与DO.db的区别: (1)DOTERM数据,DO.db是多列,前两列是do id(完全一样),第三列是Term, 第四列和第五列是同义词/别名,并且第四列包含了第五列。

> head(toTable(DO.db::DOTERM))
         do_id        do_id                            Term                                                   Synonym Secondary
1 DOID:0001816 DOID:0001816                    angiosarcoma                                "hemangiosarcoma" EXACT []          
2 DOID:0001816 DOID:0001816                    angiosarcoma                                                  DOID:267  DOID:267
3 DOID:0001816 DOID:0001816                    angiosarcoma                                                 DOID:4508 DOID:4508
4 DOID:0002116 DOID:0002116                       pterygium                                                      <NA>      <NA>
5 DOID:0014667 DOID:0014667           disease of metabolism "metabolic disease " EXACT [SNOMEDCT_2005_07_31:75934005]          
6 DOID:0050004 DOID:0050004 seminal vesicle acute gonorrhea                                                      <NA>      <NA>

我感觉这样弄转成data.frame后信息有些冗余,因此只保留了do_id和Term两列。其他信息分别放在了DOALIAS(别名)和DOSYNONYM(同义词)中。这样每个数据转成data.frame后都是两列,便于后续处理。 (2)DOOFFSPRING数据,DO.db在转成list之后list的name与DOANCESTOR保持一致,而实际上有祖先节点的节点比有子孙节点的多得多,因此DOOFFSPRING就会有很多NA。在DOyulab.db里我去除了全为NA的DOid。不过在实际使用中是否去除NA是没有任何影响的。 image

与DO.db的数据差异: (1)比较节点数目:新增4518个,删除85个。剩下6485保持不变。 (2)比较父子关系对数目:新增5173对,删除1057对。剩下5860对保持不变。 (3)# 比较祖先关系对数目:新增29253对,删除4816对。剩下37515对保持不变。

GOSemSim包

将使用DO.db改为使用DOyulab.db

DOSE包

主要更新以下几点: (1)由依赖DO.db改为依赖DOyulab.db。代码基本都不需要修改,只有一处:

prepare_relation_df <- function() {
    gtb <- toTable(DOTERM)
    # gtb <- gtb[,2, drop=FALSE]
    gtb <- gtb[,1, drop=FALSE]

DO.db::DOTERM转为data.frame后前两列都是doid(完全一样),您这里取的是第二列。DOyulab.db::DOTERM的第一列是doid,第二列是name,因此我这里将2改成了1。 (2)对parse-obo.R做了一些修改,增加了对同义词和别名信息的提取。 (3)修改computeIC()。之前对docount计算的是同义词+ 别名的数量,这里改成计算注释到的基因数量,与GO的语义相似性计算保持一致。

# doids <- toTable(DOTERM)
    # doterms <- doids$do_id
    # docount <- table(doterms)
    if (!exists(".DOSEEnv")) {
        .initial()
    }
    DOSEEnv <- get(".DOSEEnv", envir = .GlobalEnv)

    if (!exists("DO2EG", envir=DOSEEnv)) {
        tryCatch(utils::data(list="DO2EG", package="DOSE"))
        assign("DO2EG", DO2EG, envir = DOSEEnv)
        DO2EG <- get("DO2EG")
        rm(DO2EG, envir = .GlobalEnv)
    }
    DO2EG <- get("DO2EG", envir = DOSEEnv)
    docount <- unlist(lapply(DO2EG, length))

(4)更新DOid-gene关联信息。 在更新数据后,有26836新增,41451删除。5126不变。考虑到新旧数据差异太大,并且来源不同,并不是普通的迭代更新,因此我将两者进行了合并。

更新使用的数据来源:

HumanDO.obo来源与DO官网的推荐地址:https://github.com/DiseaseOntology/HumanDiseaseOntology/tree/main/src/ontology。 更新频率较高,最近一次更新是 2022/07/06。 doid-gene关联信息来源于https://fms.alliancegenome.org/download/DISEASE-ALLIANCE_COMBINED.tsv.gz。 这套数据是整合了多个物种的疾病-基因关联信息,应该是把从别的生物获取的疾病-基因关联信息也作为人类的关联信息。更新频率也很高,最近一次更新是2022-06-15 16:38,版本是5.2.1。这套数据中每一个doid-gene对都提供了来源: image

The founding database members of the Alliance are Flybase, Mouse Genome Database (MGI), Rat Genome Database (RGD), Saccharomyces Genome Database (SGD), WormBase, and the Zebrafish Information Network (ZFIN).

GuangchuangYu commented 2 years ago
  1. parse_obo放到HDO.db包里。
  2. 等HDO.db包进入cran/bioc之后,再更新DOSE和GOSemSim.
huerqiang commented 2 years ago

好的,老师。

huerqiang commented 2 years ago

老师, DOSE已完成HDO.db的适配,功能测试均正常。