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

32

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

  • 0
    Добро пожаловать в StackOverflow. Можете ли вы привести пример какой-то? Мне сложно понять, чего ты хочешь.
  • 0
    Вы говорите, что уникальная последовательность сформирует отличную траекторию на странице, если вы соедините точки?
Показать ещё 3 комментария
Теги:
bioinformatics
wolfram-mathematica
dna-sequence

6 ответов

29
Лучший ответ

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

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

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

Изображение 6368

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

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

  • Человеческий бета-глобиновый регион (LHS) и его кДНК (RHS)

Изображение 6369

Сгенерировано из 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.

Хорошая проверка

Во-первых @mouseMitoFasta​​p >

Вывод:

{>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, целая последовательность дробовика генома}

Изображение 6370

Соответствующий график кДНК снова отображается синим цветом на RHS

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

  • 2
    Спасибо за указание на эту статью. Особенно приятно узнать, как автоматически импортировать с этого сайта. У меня есть два комментария: во-первых, сайт, на который я ссылаюсь, кажется мне доступным. Вы уверены, что в URL нет опечатки? Вы можете избежать этой потенциальной проблемы, загрузив версию поста в блокноте по ссылке вверху страницы. Во-вторых, вы можете значительно ускорить код Хосе, изменив Point/@Orbit[s, Union[s]] на Point@Orbit[s, Union[s]] . Это новый и важный синтаксис для Point, который был представлен в V6 после появления этой статьи.
  • 0
    Я думал, что могу потерять галочку к этому. ;-)
Показать ещё 1 комментарий
28

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

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

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

Изображение 6371

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

Изображение 6372


Параметры 3D

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

Изображение 6373

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

Изображение 6374


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

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"]
  • 0
    +1 ... довольно странные случайные генетические прогулки ... наверняка не твоя вина
  • 1
    Привет, мистер Волшебник! Большое спасибо за ответ. Я хотел именно первый рисунок, который вы разместили выше. Можете ли вы сказать мне среду, которую вы предлагаете закодировать в 'R' или matlab?
Показать ещё 1 комментарий
16

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

  • 0
    На рисунке, показанном в вашем блоге, явно есть фрактальная модель. Интересно, что это значит ...
  • 0
    @Sjoerd, это означает, что есть последовательность в аминокислотной последовательности. Некоторые подпоследовательности появляются чаще, чем другие.
Показать ещё 1 комментарий
6

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

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

Предполагая, что последовательность 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

*) Вам нужно подробнее рассказать о реальной последовательности. Является ли она представленной как одна строка или, возможно, массив ячеек или что-то еще?
Edit:
Предполагая, что ваша последовательность представлена ​​в виде строки, вы сопоставите ее с цельной последовательностью 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
    Большое спасибо @Eat.
  • 0
    @imbenzene: Добро пожаловать. КСТАТИ; Я только что понял, что Sjoerd C. de Vries отредактировал ваш оригинальный пост. Итак, что для вас действительно важнее: 1) детерминированная последовательность (как указано в вашем исходном сообщении) или 2) случайная прогулка? Если ваше приложение больше подходит для случайных прогулок, тогда matlab также сможет предоставить statistical sound способы сделать это. Вы можете уточнить это по отдельному вопросу. Спасибо
0

Этот вопрос, кажется, уже хорошо ответил, но я подумал, что добавлю, что то, что вы описываете, было ранее опубликовано под знаменем DNA walks среди набора методов численного представления для последовательностей ДНК, которые обсуждаются в нашем preprint.

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

Изображение 6375

Ещё вопросы

Сообщество Overcoder
Наверх
Меню