如何在R中执行基本的多序列比对?

时间:2010-12-21 09:19:29

标签: r alignment sequence bioinformatics text-alignment

(我已尝试在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 个答案:

答案 0 :(得分:9)

在R中编写对齐算法对我来说看起来不错,但MUSCLE包中的bio3d算法有一个R接口(函数seqaln())。请注意,您必须先安装此算法。

或者,您可以使用任何可用的算法(例如ClustalWMAFFTT-COFFEE)并使用bioconductor功能导入R中的多个序列alignemts。 See eg here.

答案 1 :(得分:4)

虽然这是一个很老的线程,但我不想错过机会提及,因为Bioconductor 3.1,有一个包'msa'实现了三种不同的多序列比对算法的接口:ClustalW ,ClustalOmega和MUSCLE。该软件包可在所有主要平台(Linux / Unix,Mac OS和Windows)上运行,并且在无需安装任何外部软件的意义上是自包含的。可以在http://www.bioinf.jku.at/software/msa/http://www.bioconductor.org/packages/release/bioc/html/msa.html找到更多信息。

答案 2 :(得分:2)

您可以使用DECIPHER包在 R 中执行多重对齐。

按照您的示例,它看起来像:

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

它快速且至少与此处列出的其他方法一样准确(参见paper)。我希望有所帮助!

答案 3 :(得分:0)

您正在寻找多个序列的全局比对算法。 在询问之前你是否看过维基百科?

首先了解global alignment是什么,然后查找multiple sequence alignment

维基百科没有提供很多关于算法的细节,但this paper更好。