Воспользуйтесь пакетом с аннотацией генов человека org.Hs.eg.db.
Найдите ENSEMBL
и UNIPROT
идентификаторы для
генов STAT1 и SERPINE1. Что это за гены - посмотрите на
GENENAME
? Опишите ваши находки.
select(org.Hs.eg.db, c("STAT1", "SERPINE1"), c("ENSEMBL", "UNIPROT", "GENENAME"), "SYMBOL")
## 'select()' returned 1:many mapping between keys and columns
## SYMBOL ENSEMBL UNIPROT
## 1 STAT1 ENSG00000115415 P42224
## 2 SERPINE1 ENSG00000106366 A0A024QYT5
## 3 SERPINE1 ENSG00000106366 P05121
## GENENAME
## 1 signal transducer and activator of transcription 1
## 2 serpin family E member 1
## 3 serpin family E member 1
После многих практикумов по биоинфе я научился делать выводы по табличкам со случайными циферками и буковками. * Для гена STAT1 найдена одна запись в UniProt. Это ген преобразователя сигнала и активатора транскрипции 1 (в душе не чаю, что это значит). * Для гена SERPINE1 найдено две записи в UniProt. Это ген член 1 семейства серпинов Е (не уверен, что слово член стоит на своём месте).
Воспользуйтесь пакетом с аннотацией генов человека org.Hs.eg.db.
Переведите все содержащиеся в org.Hs.eg.db
ENTREZ
-идентификаторы генов в символьные названия
SYMBOL
и ENSEMBL
идентификаторы с помощью
функции AnnotationDbi::select()
.
Произошла ли однозначная конвертация идентификаторов? Если нет, то у скольких генов возникла такая проблема?
genes <- keys(org.Hs.eg.db)
df <- select(org.Hs.eg.db, genes, c("SYMBOL", "ENSEMBL"), "ENTREZID")
## 'select()' returned 1:many mapping between keys and columns
df %>%
filter(duplicated(df$ENTREZID)) %>%
dplyr::select("ENTREZID") %>%
base::unique() %>%
nrow()
## [1] 2419
Однозначная конвертация идентификаторов не удалась. У 2419 генов возникли дубликаты.
BioMart отлично справляется с конвертацией идентификаторов генов, например, человека, однако он может быть еще полезен при конвертации идентификатров между разными организмами (определении ортологов).
Допустим, вы нашли интересную статью, где результаты были получены с использованием мышиной модели. Вы же работате с человеческими клеточными линиями, но все же хотели бы проверить выводы статьи на ваших данных. В таком случае вам нужно идентификаторы генов мыши перевести в идентификаторы генов человека.
Для решения такой задачи удобнее всего создать два mart объекта - для
мыши и человека. А затем с помощью функции getLDS()
получить информацию из двух связанных объектов.
Если вы получаете следующую ошибку, попробуйте при создании mart
объектов указать параметр host
: например,
host = "https://jul2023.archive.ensembl.org/"
.
Error: biomaRt has encountered an unexpected server error.
Consider trying one of the Ensembl mirrors (for more details look at ?useEnsembl)
mouse_genes <- c("Hdac2", "Timeless", "Prkcg", "Hlf", "Sin3a", "Ogt", "Id3", "Csnk1d", "Cdk5", "Ep300", "Cipc", "Relb")
mart_mus <- useMart("ENSEMBL_MART_ENSEMBL", "mmusculus_gene_ensembl", host = "https://dec2021.archive.ensembl.org")
mart_homo <- useMart("ENSEMBL_MART_ENSEMBL", "hsapiens_gene_ensembl", host = "https://dec2021.archive.ensembl.org")
getLDS(attributes = "external_gene_name",
filters = "external_gene_name",
values = mouse_genes,
mart = mart_mus,
attributesL = "external_gene_name",
martL = mart_homo)
## Gene.name Gene.name.1
## 1 Cipc CIPC
## 2 Ep300 EP300
## 3 Ogt OGT
## 4 Timeless TIMELESS
## 5 Hdac2 HDAC2
## 6 Sin3a SIN3A
## 7 Hlf HLF
## 8 Relb RELB
## 9 Cdk5 CDK5
## 10 Prkcg PRKCG
## 11 Id3 ID3
## 12 Csnk1d CSNK1D
Высокоинтелектуально, но у человека гены называются так же, как у мыши, только регист другой. (Мне вообще раньше казалось, что у млекопитающих специально ортологи одинаково в разных организмах называют, но, возможно, бывают исключения.)
P.S.
АХАХАХАХАХАХ, хост не работает, и другой тоже и третий. На форуме биокондуктора (https://support.bioconductor.org/p/129636/) сказано, что если зеркала не работают, то нужно написать вот такую функцию (она ещё и с вложенными циклами, хотя на парах нам говорили, что использовать циклы в R крайне не прилично). И знаете что? А ничто. Ссылка по которой должна скачиваться табличка с генами человека и мыши просто не работает. А знаете что работает? Википедия. В ней есть статьи про эти гены, более того, в ней даже есть все идентификаторы.
UPD: Если продолжить перебирать все хосты из списка
(listEnsemblArchives()
), то можно наткнуться на
рабочий.
#функция с форума
library(dplyr)
mouse_human_genes = read.csv("http://www.informatics.jax.org/downloads/reports/HOM_MouseHumanSequence.rpt",sep="\t") #нерабочая ссылка
convert_mouse_to_human <- function(gene_list){
output = c()
for(gene in gene_list){
class_key = (mouse_human_genes %>% filter(Symbol == gene & Common.Organism.Name=="mouse, laboratory"))[['DB.Class.Key']]
if(!identical(class_key, integer(0)) ){
human_genes = (mouse_human_genes %>% filter(DB.Class.Key == class_key & Common.Organism.Name=="human"))[,"Symbol"]
for(human_gene in human_genes){
output = append(output,human_gene)
}
}
}
return (output)
}
#P.S. этот чанк не должен исполняться, это просто пример кода
Давайте обратимся к базе данных генов человека Ensembl версии 98 (это можно сделать как с помощью biomaRt, так и с помощью AnnotationHub - выбирайте по своему вкусу) и изучим характеристики всех генов разных биотипов (белок-кодирующие, lncRNA и т.д.). Получите значения длин генов и постройте графики распределения для разных биотипов.
#я не очень понимаю зачем, но этот пакет создал на компе папку размером 125MB (надеюсь R не планирует скачать геном человека)
ah <- AnnotationHub()
query(ah, c("EnsDb", "hsapiens", "98"))
## AnnotationHub with 1 record
## # snapshotDate(): 2023-10-20
## # names(): AH75011
## # $dataprovider: Ensembl
## # $species: Homo sapiens
## # $rdataclass: EnsDb
## # $rdatadateadded: 2019-05-02
## # $title: Ensembl 98 EnsDb for Homo sapiens
## # $description: Gene and protein annotations for Homo sapiens based on Ensem...
## # $taxonomyid: 9606
## # $genome: GRCh38
## # $sourcetype: ensembl
## # $sourceurl: http://www.ensembl.org
## # $sourcesize: NA
## # $tags: c("98", "AHEnsDbs", "Annotation", "EnsDb", "Ensembl", "Gene",
## # "Protein", "Transcript")
## # retrieve record with 'object[["AH75011"]]'
#а вот вообще вечность что-то скачивает (видимо действительно геном человека) UPD: оно внатуре сожрало гигабайт
hs_ens98 <- ah[["AH75011"]]
## downloading 1 resources
## retrieving 1 resource
## loading from cache
## require("ensembldb")
df1 <- select(hs_ens98, keys(hs_ens98), c("GENEBIOTYPE"))
df2 <- as.data.frame(ranges(genes(hs_ens98))) %>%
transmute(GENEID = names, len = width)
df <- left_join(df1, df2, by = "GENEID")
head(df)
## GENEID GENEBIOTYPE len
## 1 ENSG00000000003 protein_coding 12884
## 2 ENSG00000000005 protein_coding 14950
## 3 ENSG00000000419 protein_coding 23689
## 4 ENSG00000000457 protein_coding 44637
## 5 ENSG00000000460 protein_coding 192074
## 6 ENSG00000000938 protein_coding 23122
#АХТУНГ логарифмическая шкала
df %>%
ggplot() +
aes(x = GENEBIOTYPE, y = len, colour = GENEBIOTYPE) +
geom_boxplot() +
labs(title = "Распределение длин генов для разных биотипов",
x = "Биотип", y = "Длина") +
scale_y_log10(labels = scales::label_number()) +
theme_bw() +
theme(legend.position = "none",
legend.title = element_text(hjust = 0.5),
plot.title = element_text(hjust = 0.5),
axis.text.x = element_text(angle = 90, hjust = 1))