Frage

(Ich habe versucht zu fragen diese auf BioStars , aber für die geringe Chance, dass jemand von Text Mining würde denken, es eine bessere Lösung ist, habe ich auch das hier bin reposting)

Die Aufgabe, die ich bin versucht zu erreichen, mehrere Sequenzen auszurichten.

Ich habe nicht ein Grundmuster zu entsprechen. Alles, was ich weiß, ist, dass die „True“ Muster der Länge „30“, und dass die Sequenzen sein sollte ich gehabt haben Werte eingeführt, um sie an zufälligen Punkten fehlt.

Hier ist ein Beispiel für eine solche Sequenzen, waren auf der linken Seite sehen wir, was die wirkliche Lage der fehlenden Werte ist, und auf der rechten Seite sehen wir die Folge, dass wir in der Lage sein wird, zu beobachten.

Mein Ziel ist es, die linke Spalte zu rekonstruieren nur die Sequenzen I auf der rechten Spalte habe (basierend auf der Tatsache, dass viele der Buchstaben in jeder Position sind gleich)

                     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

Hier ist ein Beispielcode das obige Beispiel zu reproduzieren:

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)

Ich verstehe, dass, wenn alles, was ich habe, war eine Schnur und ein Muster würde ich in der Lage sein zu verwenden,

library(Biostrings)
pairwiseAlignment(...)

Aber im Fall stellt ich uns mit vielen Sequenzen auszurichten miteinander zu tun haben (anstatt sie zu einem Muster ausrichten).

Gibt es ein bekanntes Verfahren hierfür in R tun?

War es hilfreich?

Lösung

Obwohl dies durchaus einen alten Thread ist, will ich nicht die Gelegenheit verpassen, das zu erwähnen, da Bioconductor 3.1 gibt es ein Paket ‚msa‘, dass Geräte-Schnittstellen zu drei verschiedenen multiples Sequenz-Alignment-Algorithmen: ClustalW, ClustalOmega und MUSKEL. Das Paket läuft auf allen wichtigen Plattformen (Linux / Unix, Mac OS und Windows) und ist in dem Sinne, in sich geschlossene, dass Sie benötigen keine externe Software installieren . Weitere Informationen finden Sie auf http://www.bioinf.jku.at/software/msa finden / und http://www.bioconductor.org/ packages / release / bioc / html / msa.html .

Andere Tipps

Das Schreiben eines Alignment-Algorithmus in R sieht aus wie eine schlechte Idee zu mir, aber es gibt eine R-Schnittstelle zum MUSCLE Algorithmus in der bio3d Paket (Funktion seqaln () ). Seien Sie sich der Tatsache bewusst, dass Sie diesen Algorithmus installieren zuerst.

Alternativ können Sie eine der verfügbaren Algorithmen verwenden (zB ClustalW , MAFFT , T-COFFEE ) und importieren die multiples Sequenz alignemts in R mit Bioconductor Funktionalität. Siehe hier zum Beispiel. .

Sie können in multiplen Alignment durchführen R mit dem DECIPHER Paket.

Ihr Beispiel folgend, würde es in etwa so aussehen:

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

Es ist schnell und zumindest so genau wie die anderen Methoden hier aufgelistet (siehe Papier ). Ich hoffe, das hilft!

Sie suchen einen globalen Alignment-Algorithmus auf mehreren Sequenzen. Haben Sie bei Wikipedia zu suchen, bevor fragen?

Zuerst lernen, was globale Ausrichtung ist, dann suchen Sie nach multiples Sequenz-Alignment .

ist Wikipedia nicht viele Details über Algorithmen geben, aber dieses Papier ist besser.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top