Как выполнить базовое выравнивание нескольких последовательностей в R? - PullRequest
8 голосов
/ 21 декабря 2010

(я пытался спросить об этом на BioStars , но из-за небольшого шанса, что кто-то из интеллектуального анализа текста посчитает, что есть лучшее решение, я также публикую это здесь)

Задача, которую я пытаюсь выполнить, - выровнять несколько последовательностей.

У меня нет базового шаблона для сопоставления. Все, что я знаю, это то, что «Истинный» паттерн должен иметь длину «30» и что последовательности, в которых у меня были пропущенные значения, вводились в них в случайных точках.

Вот пример таких последовательностей: слева мы видим реальное местоположение пропущенных значений, а справа мы видим последовательность, которую мы сможем наблюдать.

Моя цель состоит в том, чтобы восстановить левый столбец, используя только те последовательности, которые были у меня в правом столбце (основываясь на том факте, что многие буквы в каждой позиции одинаковы)

                     Real_sequence           The_sequence_we_see
1   CGCAATACTAAC-AGCTGACTTACGCACCG CGCAATACTAACAGCTGACTTACGCACCG
2   CGCAATACTAGC-AGGTGACTTCC-CT-CG   CGCAATACTAGCAGGTGACTTCCCTCG
3   CGCAATGATCAC--GGTGGCTCCCGGTGCG  CGCAATGATCACGGTGGCTCCCGGTGCG
4   CGCAATACTAACCA-CTAACT--CGCTGCG   CGCAATACTAACCACTAACTCGCTGCG
5   CGCACGGGTAAGAACGTGA-TTACGCTCAG CGCACGGGTAAGAACGTGATTACGCTCAG
6   CGCTATACTAACAA-GTG-CTTAGGC-CTG   CGCTATACTAACAAGTGCTTAGGCCTG
7   CCCA-C-CTAA-ACGGTGACTTACGCTCCG   CCCACCTAAACGGTGACTTACGCTCCG

Вот пример кода для воспроизведения приведенного выше примера:

ATCG <- c("A","T","C","G")
set.seed(40)
original.seq <- sample(ATCG, 30, T)
seqS <- matrix(original.seq,200,30, T)
change.letters <- function(x, number.of.changes = 15, letters.to.change.with = ATCG) 
{
    number.of.changes <- sample(seq_len(number.of.changes), 1)
    new.letters <- sample(letters.to.change.with , number.of.changes, T)
    where.to.change.the.letters <- sample(seq_along(x) , number.of.changes, F)
    x[where.to.change.the.letters] <- new.letters
    return(x)
}
change.letters(original.seq)
insert.missing.values <- function(x) change.letters(x, 3, "-") 
insert.missing.values(original.seq)

seqS2 <- t(apply(seqS, 1, change.letters))
seqS3 <- t(apply(seqS2, 1, insert.missing.values))

seqS4 <- apply(seqS3,1, function(x) {paste(x, collapse = "")})
require(stringr)
# library(help=stringr)
all.seqS <- str_replace(seqS4,"-" , "")

# how do we allign this?
data.frame(Real_sequence = seqS4, The_sequence_we_see = all.seqS)

Я понимаю, что если бы у меня была только строка и шаблон, я мог бы использовать

library(Biostrings)
pairwiseAlignment(...)

Но в случае, который я представляю, мы имеем дело со многими последовательностями для выравнивания друг с другом (вместо выравнивания их по одному шаблону).

Есть ли известный способ сделать это в R?

Ответы [ 4 ]

9 голосов
/ 21 декабря 2010

Написание алгоритма выравнивания в R кажется мне плохой идеей, но в алгоритме MUSCLE в пакете bio3d есть функция R (функция seqaln ( ) ). Помните о том, что сначала вам нужно установить этот алгоритм.

В качестве альтернативы, вы можете использовать любой из доступных алгоритмов (например, ClustalW , MAFFT , T-COFFEE ) и импортировать несколько последовательностей в R с помощью биокондуктор функциональность. См., Например, здесь. .

4 голосов
/ 12 июня 2017

Хотя это довольно старый поток, я не хочу упустить возможность упомянуть, что, начиная с Bioconductor 3.1, существует пакет 'msa', который реализует интерфейсы для трех различных алгоритмов выравнивания нескольких последовательностей: ClustalW, ClustalOmega и МЫШЦЫ. Пакет работает на всех основных платформах (Linux / Unix, Mac OS и Windows) и является автономным в том смысле, что вам не нужно устанавливать какое-либо внешнее программное обеспечение . Более подробную информацию можно найти по http://www.bioinf.jku.at/software/msa/ и http://www.bioconductor.org/packages/release/bioc/html/msa.html.

2 голосов
/ 13 декабря 2016

Вы можете выполнить множественное выравнивание в R с пакетом DECIPHER .

По вашему примеру это будет выглядеть примерно так:

library(DECIPHER)
dna <- DNAStringSet(all.seqS)
aligned_DNA <- AlignSeqs(dna)

Это быстро и, по крайней мере, так же точно, как и другие методы, перечисленные здесь (см. документ ). Я надеюсь, что это помогает!

0 голосов
/ 21 декабря 2010

Вы ищете алгоритм глобального выравнивания для нескольких последовательностей.Вы смотрели на Википедию, прежде чем спросить?

Сначала узнайте, что такое глобальное выравнивание , а затем найдите множественное выравнивание последовательностей .

Википедия не делаетдать много деталей об алгоритмах, но эта статья лучше.

...