Как построить генный граф для последовательности ДНК, скажем, ATGCCGCTGCGC? - PullRequest
32 голосов
/ 10 апреля 2011

Мне нужно сгенерировать случайное блуждание на основе последовательности ДНК вируса, учитывая его последовательность пар оснований из 2 тыс. Пар оснований.Последовательность выглядит как «ATGCGTCGTAACGT».Путь должен повернуть направо для A, налево для T, пойти вверх для G и вниз для C. Как я могу использовать Matlab, Mathematica или SPSS для этой цели?

Ответы [ 6 ]

29 голосов
/ 13 апреля 2011

Ранее я не знал о блоге Марка МакКлюра о представлении последовательностей генов в Chaos Game, но он напомнил мне статью Жозе Мануэля Гутьерреса (Mathematica Journal Vol. 9 Issue 2), которая также дает алгоритм игры в хаос для IFS с использованием (четырех оснований) последовательностей ДНК. Подробное описание можно найти здесь (оригинальная статья).

Этот метод может быть использован для получения графиков, таких как следующие. Просто, черт возьми, я включил (в панели RHS) графики, созданные с помощью соответствующей комплементарной цепи ДНК (кДНК).

  • Митохондриальная ДНК мыши (LHS) и ее комплементарная цепь (кДНК) (RHS).

enter image description here

Эти графики были получены из GenBank Identifier gi | 342520. Последовательность содержит 16295 оснований.

(Один из примеров, использованных Хосе Мануэлем Гутьерресом. Если кому-то интересно, графики для человеческого эквивалента могут быть сгенерированы из gi | 1262342).

  • Область человеческого бета-глобина (LHS) и его кДНК (RHS)

enter image description here

Сгенерировано из gi | 455025 | (пример использовал мой Марк МакКлюр). Последовательность содержит 73308 оснований

Есть довольно интересные сюжеты! (Иногда) фрактальная природа таких графиков известна, но симметрия, очевидная в версиях LHS против RHS (кДНК), была очень удивительной (по крайней мере для меня).

Приятно то, что такие графики для любой последовательности ДНК могут быть очень легко сгенерированы путем прямого импорта последовательности (скажем, из Genbank), а затем с использованием силы Mma.
Все, что вам нужно, это номер доступа! («Неизвестные» нуклеотиды, такие как «R» могут нуждаться в замене) (я использую Mma v7).

Исходное значение (слегка измененное) (Хосе Мануэль Гутьеррес)

Важное обновление

По совету Марка МакКлюра я изменил Point/@Orbit[s, Union[s]] на Point@Orbit[s, Union[s]].

Это значительно ускоряет процесс. См. Комментарий Марка ниже .

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]}]

Это дает синий график. Для зеленого измените Hue [] на Hue [{1 / 3,1,1, .5}]

Следующий код теперь генерирует первый график (для митохондриальной ДНК мыши)

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

Чтобы получить график кДНК, я использовал следующие правила преобразования (а также изменил настройку оттенка)

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

Спасибо Sjoerd C. de Vries и telefunkenvf14 за помощь в прямом импорте последовательностей с сайта NCBI.

Немного раскололась ради ясности.

Импорт последовательности

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

Метод, приведенный для импорта последовательностей в оригинальной статье Mathematica J. датирован.

Хороший чек

First @ mouseMitoFasta

Выход:

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

Генерация списка баз

mouseMitoBases=Flatten@Characters@Rest@mouseMitoFasta

Еще несколько чеков

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

Выход:

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

Второй набор графиков был сгенерирован аналогично gi | 455025. Обратите внимание, что последовательность длинна!

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

Последний пример (содержащий 265922 п.н.), также демонстрирующий захватывающую симметрию «фрактала». (Они были сгенерированы с AbsolutePointSize[1] в IFSPlot).

Первая строка файла fasta:

{> Г | 328530803 | гб | AFBL01000008.1 | Actinomyces sp. устный таксон 170 ул. F0386 A_spOraltaxon170F0386-1.0_Cont9.1, последовательность всего ружья}

enter image description here

Соответствующий участок кДНК снова показан синим цветом на RHS

Наконец, метод Марка также дает очень красивые графики (например, с помощью gi | 328530803) и может быть загружен как блокнот.

28 голосов
/ 10 апреля 2011

Не то, чтобы я действительно понимал «график», который вы хотите, но вот одна буквальная интерпретация.

Ни один из следующих кодов не обязательно в окончательной форме. Я хочу знать, правильно ли это, прежде чем пытаться что-то уточнить.

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]]

enter image description here

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

enter image description here


Параметры 3D

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

enter image description here

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

enter image description here


Теперь, когда я знаю, что вы хотите, вот упакованная версия первой функции:

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}]
]

Используйте это так:

genePlot["ATGCGTCGTAACGT"]
16 голосов
/ 10 апреля 2011

Звучит так, будто вы говорите о CGR или так называемом представлении игры в хаосе последовательности гена. Я писал об этом несколько месяцев назад: http://facstaff.unca.edu/mcmcclur/blog/GeneCGR.html

6 голосов
/ 11 апреля 2011

Вы также можете попробовать что-то вроде этого ...

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}}]]
6 голосов
/ 10 апреля 2011

Если предположить, что последовательность S уже сопоставлена ​​*) с целочисленным массивом, то фактическое вычисление движений является простым на основе правил 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

*) Вам нужно подробнее остановиться на фактической последовательности. Представляется ли он одной строкой, или, возможно, массивом ячеек, или чем-то еще?
Редактировать
Предполагая, что ваша последовательность представлена ​​в виде строки, вы отобразите ее на целочисленную последовательность S, например:

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

И построить это:

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

, где linespec - требуемая спецификация линии .

0 голосов
/ 03 августа 2017

Кажется, на этот вопрос уже получен хороший ответ, но я подумал, что добавлю, что то, что вы описываете, было ранее опубликовано под баннером Прогулки по ДНК среди коллекции методов численного представления ДНКпоследовательности, которые обсуждаются в нашем препринте .

Оказывается, что прогулки по ДНК не очень полезны на практике, но позволяют интуитивно понятную визуализацию.У меня нет его в руках, но я полагаю, что мой коллега был бы более чем рад предоставить код Matlab, используемый для генерации рисунка ниже.

dna walk HIV

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