Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

Я раньше не знал о Марке МакКлюре blog о представлении гей-последовательности Chaos Game, но он напомнил мне статью Хосе Мануэль Гутьеррес (The 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]] на [email protected][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[[email protected]
      [email protected]
       [email protected][
         "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}

Генерация списка оснований

[email protected]@[email protected]

Еще несколько проверок

{[email protected], [email protected],[email protected]}

Вывод:

{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

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

Ответ 2

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

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

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

enter image description here

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

enter image description here


Параметры 3D

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

enter image description here

i = 0;
Prepend[[email protected]"ATGCGTCGTAACGT" /. 
    rls /. {x_, y_} :> {x, y, 0.3}, {0, 0, 0}];
Graphics3D[{Hue[i++/[email protected]%], [email protected]#} & /@ 
  Partition[[email protected]%, 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"]

Ответ 3

Похоже, вы говорите о CGR или о так называемом представлении игры в хаосе последовательности генов, описанной в статье 1990 года "Представление структуры хаоса о структуре генов" Джоэля Джеффри. Вот реализация в Mathematica:

cgrPic[s_String] := Module[
  {},
  chars = StringCases[s, "G"|"A"|"T"|"C"];
  f[x_, "A"] := x/2;
  f[x_, "T"] := x/2 + {1/2, 0};
  f[x_, "G"] := x/2 + {1/2, 1/2};
  f[x_, "C"] := x/2 + {0, 1/2};
  pts = FoldList[f, {0.5, 0.5}, chars];
  ListPlot[pts, AspectRatio -> Automatic]]

Вот как применить его к последовательности генов, взятой из команды Mathematica GenomeData:

cgrPic[GenomeData["FAT4", "FullSequence"]]

enter image description here

Ответ 4

Предполагая, что последовательность 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 - желаемая спецификация линии.

Ответ 5

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

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

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

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

dna walk HIV