Анализ генной онтологии (GO) для списка генов (с ENTREZID) в R?
Я очень новичок в анализе GO, и я немного запутался, как это сделать, мой список генов.
У меня есть список генов (n=10):
gene_list
SYMBOL ENTREZID GENENAME
1 AFAP1 60312 actin filament associated protein 1
2 ANAPC11 51529 anaphase promoting complex subunit 11
3 ANAPC5 51433 anaphase promoting complex subunit 5
4 ATL2 64225 atlastin GTPase 2
5 AURKA 6790 aurora kinase A
6 CCNB2 9133 cyclin B2
7 CCND2 894 cyclin D2
8 CDCA2 157313 cell division cycle associated 2
9 CDCA7 83879 cell division cycle associated 7
10 CDCA7L 55536 cell division cycle associated 7-like
и я просто хочу найти их функцию, и мне предложили использовать инструменты GO-анализа. Я не уверен, что это правильный способ сделать это. вот мое решение:
x <- org.Hs.egGO
# Get the entrez gene identifiers that are mapped to a GO ID
xx<- as.list(x[gene_list$ENTREZID])
Итак, у меня есть список с EntrezID, который назначен нескольким терминам GO для каждого гена. например:
> xx$`60312`
$`GO:0009966`
$`GO:0009966`$GOID
[1] "GO:0009966"
$`GO:0009966`$Evidence
[1] "IEA"
$`GO:0009966`$Ontology
[1] "BP"
$`GO:0051493`
$`GO:0051493`$GOID
[1] "GO:0051493"
$`GO:0051493`$Evidence
[1] "IEA"
$`GO:0051493`$Ontology
[1] "BP"
Мой вопрос: как я могу найти функцию для каждого из этих генов более простым способом, и я также задавался вопросом, правильно ли я это делаю или? потому что я хочу добавить функцию в список gene_list как столбец function/GO.
Заранее спасибо,
1 ответ
РЕДАКТИРОВАТЬ: есть новый Биоинформатика SE (в настоящее время в бета-режиме).
Я надеюсь, что получу то, что вы нацеливаете здесь.
Кстати, по темам, связанным с биоинформатикой, вы также можете взглянуть на биостар, который имеет ту же цель, что и SO, но для биоинформатики
Если вы просто хотите получить список каждой функции, связанной с геном, вы можете запросить базу данных, такую как ENSEMBl, через пакет bioconductor biomaRt, который представляет собой API для запросов к базе данных biomart. Вам понадобится интернет, хотя, чтобы сделать запрос.
Bioconductor предлагает пакеты для исследований в области биоинформатики, и эти пакеты, как правило, идут вместе с хорошими виньетками, которые помогают вам пройти через различные этапы анализа (и даже подчеркнуть, как вы должны разрабатывать свои данные или какие будут некоторые из подводных камней).
В вашем случае непосредственно из виньетки biomaRt - задача 2, в частности:
Примечание: есть несколько более быстрый способ, чем тот, о котором я сообщил ниже:
# load the library
library("biomaRt")
# I prefer ensembl so that the one I will query, but you can
# query other bases, try out: listMarts()
ensembl=useMart("ensembl")
# as it seems that you are looking for human genes:
ensembl = useDataset("hsapiens_gene_ensembl",mart=ensembl)
# if you want other model organisms have a look at:
#listDatasets(ensembl)
Вам необходимо создать свой запрос (ваш список идентификаторов ENTREZ). Чтобы увидеть, какие фильтры вы можете запросить:
filters = listFilters(ensembl)
И тогда вы хотите получить атрибуты: ваш номер GO и описание. Чтобы увидеть список доступных атрибутов
attributes = listAttributes(ensembl)
Для вас запрос будет выглядеть примерно так:
goids = getBM(
#you want entrezgene so you know which is what, the GO ID and
# name_1006 is actually the identifier of 'Go term name'
attributes=c('entrezgene','go_id', 'name_1006'),
filters='entrezgene',
values=gene_list$ENTREZID,
mart=ensembl)
Сам запрос может занять некоторое время.
Тогда вы всегда можете свернуть информацию в два столбца (но я не буду рекомендовать ее для чего-либо еще, что для целей отчетности).
Go.collapsed<-Reduce(rbind,lapply(gene_list$ENTREZID,function(x)
tempo<-goids[goids$entrezgene==x,]
return(
data.frame('ENTREZGENE'= x,
'Go.ID'= paste(tempo$go_id,collapse=' ; '),
'GO.term'=paste(tempo$name_1006,collapse=' ; '))
)
Редактировать:
Если вы хотите запросить предыдущую версию базы данных ensembl:
ens82<-useMart(host='sep2015.archive.ensembl.org',
biomart='ENSEMBL_MART_ENSEMBL',
dataset='hsapiens_gene_ensembl')
и тогда запрос будет:
goids = getBM(attributes=c('entrezgene','go_id', 'name_1006'),
filters='entrezgene',values=gene_list$ENTREZID,
mart=ens82)
Однако, если вы намеревались провести анализ обогащения GO, ваш список генов слишком короткий.