imb*_*ene 34 matlab wolfram-mathematica bioinformatics dna-sequence
我需要根据病毒的DNA序列生成随机游走,给出其2k碱基对的碱基对序列.序列看起来像"ATGCGTCGTAACGT".路径应向右转为A,向左转为T,向上转为G,向下转向C.如何为此目的使用Matlab,Mathematica或SPSS?
tom*_*omd 30
我以前不知道马克麦克卢尔关于基因序列的混沌游戏表现的博客,但它让我想起了JoseManuelGutiérrez撰写的一篇文章(The Mathematica Journal Vol 9 Issue 2),它也为IFS提供了一个混沌游戏算法( DNA序列的四个碱基.可在此处找到详细描述(原始文章).
该方法可用于产生如下的图.只是为了它的地狱,我已经包括(在RHS面板中)用相应的互补DNA链(cDNA)产生的图.

这些图是从GenBank Identifier gi | 342520生成的.该序列含有16295个碱基.
(JoseManuelGutiérrez使用的一个例子.如果有人感兴趣,可以从gi | 1262342生成人类等效物的图.

源自gi | 455025 | (这个例子使用了我的Mark McClure).该序列含有73308个碱基
有很有趣的情节!这种图的(有时)分形性质是已知的,但LHS与RHS(cDNA)版本中明显的对称性是非常令人惊讶的(至少对我而言).
好的是,通过直接输入序列(来自Genbank),然后使用Mma的功能,可以非常容易地生成任何DNA序列的这种图 .
您需要的所有入藏号码!('未知'核苷酸如"R"可能需要被破坏)(我正在使用Mma v7).
The Original Implimenation(略有修改) (作者JoseManuelGutiérrez)
重要更新
在马克·麦克卢尔的提醒,我已经改变了Point/@Orbit[s, Union[s]]到Point@Orbit[s, Union[s]].
这大大加快了速度.请参阅下面的Mark的评论.
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]}]
Run Code Online (Sandbox Code Playgroud)
这给出了蓝色图.对于绿色,将Hue []更改为Hue [{1/3,1,1,.5}]
以下代码现在生成第一个图(用于小鼠线粒体DNA)
IFSPlot[Flatten@
Characters@
Rest@Import[
"http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=\
nucleotide&id=342520&rettype=fasta&retmode=text", "Data"]]
Run Code Online (Sandbox Code Playgroud)
为了获得cDNA图,我使用了以下转换规则(并且还更改了Hue设置)
IFSPlot[ .... "Data"] /. {"A" -> "T", "T" -> "A", "G" -> "C",
"C" -> "G"}]
Run Code Online (Sandbox Code Playgroud)
感谢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"];
Run Code Online (Sandbox Code Playgroud)
在原始Mathematica J.文章中输入序列的方法已过时.
一个很好的检查
首先@ mouseMitoFasta
输出:
{>gi|342520|gb|J01420.1|MUSMTCG Mouse mitochondrion, complete genome}
Run Code Online (Sandbox Code Playgroud)
生成基础列表
mouseMitoBases=Flatten@Characters@Rest@mouseMitoFasta
Run Code Online (Sandbox Code Playgroud)
还有一些检查
{Length@mouseMitoBases, Union@mouseMitoBases,Tally@mouseMitoBases}
Run Code Online (Sandbox Code Playgroud)
输出:
{16295,{A,C,G,T},{{G,2011},{T,4680},{A,5628},{C,3976}}}
Run Code Online (Sandbox Code Playgroud)
第二组图以类似的方式从gi | 455025生成.请注意,序列很长!
{73308,{A,C,G,T},{{G,14785},{A,22068},{T,22309},{C,14146}}}
Run Code Online (Sandbox Code Playgroud)
最后一个例子(包含265922 bp),也显示出迷人的"分形"对称性.(这些是用AbsolutePointSize[1]in 生成的IFSPlot).
fasta文件的第一行:
{> GI | 328530803 | GB | AFBL01000008.1 | 放线菌 口服分类群170 str.F0386 A_spOraltaxon170F0386-1.0_Cont9.1,全基因组鸟枪序列}

相应的cDNA图再次在RHS上显示为蓝色
最后,Mark的方法也给出了非常漂亮的图(例如gi | 328530803),可以下载为笔记本.
Mr.*_*ard 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]]
Run Code Online (Sandbox Code Playgroud)

Prepend[Characters@"TCGAGTCGTGCTCA" /. rls, {0, 0}];
Graphics[Arrow /@ Partition[Accumulate@%, 2, 1]]
Run Code Online (Sandbox Code Playgroud)

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

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

现在我知道你想要什么,这是第一个函数的打包版本:
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}]
]
Run Code Online (Sandbox Code Playgroud)
像这样使用它:
genePlot["ATGCGTCGTAACGT"]
Run Code Online (Sandbox Code Playgroud)
Mar*_*ure 16
听起来你在谈论CGR,或者所谓的基因序列的混沌游戏表示.几个月前我在博客上写了这篇文章:http: //facstaff.unca.edu/mcmcclur/blog/GeneCGR.html
假设序列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
Run Code Online (Sandbox Code Playgroud)
*)您需要详细说明实际顺序.它是表示为单个字符串,还是表示为单元格数组,还是其他什么?
编辑:
假设您的序列表示为字符串,那么您将它映射到整数序列,S如:
r= zeros(1, 84);
r(double("ATGC"))= [1 2 3 4];
S= r(double("ATGCGTCGTAACGT"))
Run Code Online (Sandbox Code Playgroud)
并绘制它:
plot([0 T(1, :)], [0 T(2, :)], linespec)
Run Code Online (Sandbox Code Playgroud)
linespec所需的线规格在哪里.
你也可以试试这样的......
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}}]]
Run Code Online (Sandbox Code Playgroud)