matlab wolfram-mathematica bioinformatics dna-sequence

matlab - ¿Cómo trazar un gráfico de genes para una secuencia de ADN, dice ATGCCGCTGCGC?



wolfram-mathematica bioinformatics (6)

Necesito generar una caminata aleatoria basada en la secuencia de ADN de un virus, dada su secuencia de pares de bases de 2k pares de bases. La secuencia se ve como "ATGCGTCGTAACGT". El camino debe girar a la derecha para una A, a la izquierda para una T, ir hacia arriba para una G y hacia abajo para una C. ¿Cómo puedo usar Matlab, Mathematica o SPSS para este propósito?


Esta pregunta parece haber sido bien respondida ya, pero pensé que agregaría que lo que describes ha sido publicado previamente bajo el lema de ADN camina entre una colección de métodos de representación numérica para secuencias de ADN, que se discuten en nuestra preprint .

Resulta que las caminatas de ADN no son muy útiles en la práctica, pero permiten una visualización intuitiva. No lo tengo a mano, pero me imagino que a mi colega le encantaría proporcionar el código Matlab utilizado para generar la figura siguiente.


No conocía el blog de Mark McClure sobre la representación de secuencias de genes en el juego Caos, pero me recordó un artículo de José Manuel Gutiérrez (The Mathematica Journal Vol 9 Issue 2), que también proporciona un algoritmo de caos para un IFS ( las cuatro bases de) secuencias de ADN. Una descripción detallada se puede encontrar here (el artículo original).

El método puede usarse para producir gráficas como las siguientes. Solo por el placer de hacerlo, he incluido (en los paneles de RHS) las gráficas generadas con la cadena de ADN complementaria correspondiente (ADNc).

  • ADN mitocondrial de ratón (LHS) y su cadena complementaria (cDNA) (RHS).

Estas representaciones se generaron a partir del identificador GenBank gi | 342520. La secuencia contiene 16295 bases.

(Uno de los ejemplos utilizados por José Manuel Gutiérrez. Si alguien está interesado, se pueden generar parcelas para el equivalente humano a partir de gi | 1262342).

  • Región Beta Globina humana (LHS) y su ADNc (RHS)

Generado a partir de gi | 455025 | (el ejemplo usó mi Mark McClure). La secuencia contiene 73308 bases

¡Hay tramas bastante interesantes! La naturaleza (a veces) fractal de tales gráficos es conocida, pero la simetría obvia en las versiones LHS vs RHS (cDNA) fue muy sorprendente (al menos para mí).

Lo bueno es que tales tramas para cualquier secuencia de ADN pueden generarse fácilmente mediante la importación directa de la secuencia (desde, por ejemplo, Genbank), y luego utilizando el poder de Mma.
¡Todo lo necesitas el número de acceso! (Es posible que haya que eliminar los nucleótidos "desconocidos", como "R") (estoy usando Mma v7).

La interpretación original (ligeramente modificada) (por José Manuel Gutiérrez)

Actualización importante

Por consejo de Mark McClure, he cambiado Point/@Orbit[s, Union[s]] a Point@Orbit[s, Union[s]] .

Esto acelera las cosas muy considerablemente. Ver el comentario de Mark a continuación .

Orbit[s_List, {a_, b_, c_, d_}] := OrbitMap[s /. {a -> {0, 0}, b -> {0, 1}, c -> {1, 0}, d -> {1, 1}}]; OrbitMap = Compile[{{m, _Real, 2}}, FoldList[(#1 + #2)/2 &, {0, 0}, m]]; IFSPlot[s_List] := Show[Graphics[{Hue[{2/3, 1, 1, .5}], AbsolutePointSize[2.5], Point @ Orbit[s, Union[s]]}], AspectRatio -> Automatic, PlotRange -> {{0, 1}, {0, 1}}, GridLines -> {Range[0, 1, 1/2^3], Range[0, 1, 1/2^3]}]

Esto da una trama azul. Para verde, cambie Hue [] a Hue [{1 / 3,1,1, .5}]

El siguiente código ahora genera el primer gráfico (para el ADN mitocondrial del ratón)

IFSPlot[Flatten@ Characters@ Rest@Import[ "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=/ nucleotide&id=342520&rettype=fasta&retmode=text", "Data"]]

Para obtener un trazado de ADNc, utilicé las siguientes reglas de transformación (y también cambié la configuración de Tono)

IFSPlot[ .... "Data"] /. {"A" -> "T", "T" -> "A", "G" -> "C", "C" -> "G"}]

Gracias a Sjoerd C. de Vries y telefunkenvf14 por su ayuda en la importación directa de secuencias del sitio de NCBI.

Dividir las cosas un poco, por el bien de la claridad.

Importar una secuencia

mouseMitoFasta=Import["http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=nucleotide&id=342520&rettype=fasta&retmode=text","Data"];

El método dado para importar secuencias en el artículo original de Mathematica J. está fechado.

Un buen cheque

Primero @ mouseMitoFasta

Salida:

{>gi|342520|gb|J01420.1|MUSMTCG Mouse mitochondrion, complete genome}

Generación de la lista de bases

mouseMitoBases=Flatten@Characters@Rest@mouseMitoFasta

Algunos controles más

{Length@mouseMitoBases, Union@mouseMitoBases,Tally@mouseMitoBases}

Salida:

{16295,{A,C,G,T},{{G,2011},{T,4680},{A,5628},{C,3976}}}

El segundo conjunto de gráficos se generó de manera similar a partir de gi | 455025. Tenga en cuenta que la secuencia es larga

{73308,{A,C,G,T},{{G,14785},{A,22068},{T,22309},{C,14146}}}

Un último ejemplo (que contiene 265922 pb), que también muestra una fascinante simetría "fractal". (Estos se generaron con AbsolutePointSize[1] en IFSPlot ).

La primera línea del archivo fasta:

{> gi | 328530803 | gb | AFBL01000008.1 | Actinomyces sp. taxon oral 170 str. F0386 A_spOraltaxon170F0386-1.0_Cont9.1, secuencia de escopeta de genoma completo}

El gráfico de cDNA correspondiente se muestra nuevamente en azul en RHS

Finalmente, el blog de Mark también proporciona tramas muy bellas (por ejemplo, con gi | 328530803) y puede descargarse como un cuaderno.


No es que realmente comprenda el "gráfico" que desea, pero aquí hay una interpretación literal.

Ninguno de los siguientes códigos necesariamente está en una forma final. Quiero saber si esto es correcto antes de tratar de refinar cualquier cosa.

rls = {"A" -> {1, 0}, "T" -> {-1, 0}, "G" -> {0, 1}, "C" -> {0, -1}}; Prepend[Characters@"ATGCGTCGTAACGT" /. rls, {0, 0}]; Graphics[Arrow /@ Partition[Accumulate@%, 2, 1]]

Prepend[Characters@"TCGAGTCGTGCTCA" /. rls, {0, 0}]; Graphics[Arrow /@ Partition[Accumulate@%, 2, 1]]

Opciones 3D

i = 0; Prepend[Characters@"ATGCGTCGTAACGT" /. rls, {0, 0}]; Graphics[{Hue[i++/Length@%], Arrow@#} & /@ Partition[Accumulate@%, 2, 1]]

i = 0; Prepend[Characters@"ATGCGTCGTAACGT" /. rls /. {x_, y_} :> {x, y, 0.3}, {0, 0, 0}]; Graphics3D[{Hue[i++/Length@%], Arrow@#} & /@ Partition[Accumulate@%, 2, 1]]

Ahora que sé lo que quiere, aquí hay una versión empaquetada de la primera función:

genePlot[s_String] := Module[{rls}, rls = {"A" -> { 1, 0}, "T" -> {-1, 0}, "G" -> {0, 1}, "C" -> {0, -1}}; Graphics[Arrow /@ Partition[#, 2, 1]] & @ Accumulate @ Prepend[Characters[s] /. rls, {0, 0}] ]

Úselo así:

genePlot["ATGCGTCGTAACGT"]


Parece que estás hablando de CGR, o la llamada Representación del juego del Caos de una secuencia de genes. Publiqué sobre esto hace unos meses: blog


Suponiendo que la secuencia S ha sido mapeada *) a una matriz entera, entonces el cálculo real de los movimientos se basa en las reglas R :

R = 1 -1 0 0 0 0 1 -1 S = 1 2 3 4 3 2 4 3 2 1 1 4 3 2 T= cumsum(R(:, S), 2) T = 1 0 0 0 0 -1 -1 -1 -2 -1 0 0 0 -1 0 0 1 0 1 1 0 1 1 1 1 0 1 1

*) Necesitas elaborar más sobre la secuencia real. ¿Se representa como una cadena única, o tal vez como una matriz de celdas, o alguna otra cosa?
Editar :
Asumiendo que su secuencia se representa como una cadena, entonces la mapeará a la secuencia de enteros S como:

r= zeros(1, 84); r(double("ATGC"))= [1 2 3 4]; S= r(double("ATGCGTCGTAACGT"))

Y para trazarlo:

plot([0 T(1, :)], [0 T(2, :)], linespec)

donde linespec es la especificación de línea deseada.


También puedes probar algo como esto ...

RandomDNAWalk[seq_, path_] := RandomDNAWalk[StringDrop[seq, 1], Join[path, getNextTurn[StringTake[seq, 1]]]]; RandomDNAWalk["", path_] := Accumulate[path]; getNextTurn["A"] := {{1, 0}}; getNextTurn["T"] := {{-1, 0}}; getNextTurn["G"] := {{0, 1}}; getNextTurn["C"] := {{0, -1}}; ListLinePlot[ RandomDNAWalk[ StringJoin[RandomChoice[{"A", "T", "C", "G"}, 2000]], {{0, 0}}]]