blog mail me! feed

无聊数据图一张.

 

酵母已标注蛋白质中各氨基酸的比例 点击看大图

酵母已标注蛋白质中各氨基酸的比例 点击看大图

最近在做的酵母的基因预测, 有一个参数是各种氨基酸在蛋白质中的比例,
毕竟数字不直观, 就自己用Flash写了个程序做了个图,
这是酵母的所有已经标注的共5600+个ORF(不包含线粒体染色体)所表达的蛋白质对应的平均的氨基酸比例.

 

红色是正样本, 即真实的的ORF;
蓝色的是负样本, 通过蒙特卡洛方法进行随机打乱后的随机序列, 用于进行训练;

图片还是很好看的,
哈哈哈.

秩序与混乱.

昨天又把闲置了两周的基因预测程序拿出来, 把最后一个参数 — 氨基酸实现了,
跑了一个 6-fold Cross Validation发现准确率竟然能到99%以上, 很是惊讶,
当然这里不排除Shuffle函数在随机打乱序列产生负样本时, 引入的少量终止密码子干扰项.

事实上, 氨基酸参数就是一个单纯的频率, 即20种氨基酸在目标蛋白质中的所占的比例,
突然想到以前导师提到过的, 的相关概念, 发现这个参数模型可以和熵结合得很紧密.

把每种氨基酸出现的概率看做P(xi),由公式,
Entropy
最后可以得到当前样本的熵, 也就是信息量的度量, 即不确定性.

我先对正负样本各自计算其熵(信息量), 发现相差无几,
后来就稍微改了下形式, 做了一个所谓的”相对熵”.
我计算出所有的正样本中, 各个氨基酸出现的平均概率值p’(xi),
最后计算时采用 -∑ p(xi)log[p'(xi)], p(xi)代表当前样本的真实值.

如果自然界中的蛋白质组成是有序的, 那么负样本打乱或者随机的序列对应的随机的氨基酸分布,
必然会使得整个模型趋于混乱的方向发展, 从而不确定性增大, 熵增加.
实际程序跑出来发现, 正样本的H(x)大概在2.9, 而负样本在3.4左右,
比较好的体现了不确定性的度量.

当然, 另外的一篇给予启发的很好的文章来自相当经典的”数学之美”系列,
具体的讲信息的度量这篇文章在: 数学之美系列 4 — 怎样度量信息?

新年的第二个程序.

第一个程序是一个实验性的词频的数据可视化的Flash.
改天弄完了发上来.

现在要说的是正在忙活的项目, 酵母的蛋白质编码基因预测.
今天下午断断续续的忙活得差不多了, 基本搞定了整个程序,
尽管数次觉得程序还有很多可以改进的地方, 让其更简洁, 更可读.

速度还没优化, 不过其实我是想看看Cross-Validation的结果如何,
有点失望, 最后尝试了各种参数组合(氨基酸的参数还没做, 因为构建一个CODON –> AA的表都得费些功夫),
准确率只能跑到大概97%左右, 离想象的99%有着巨大的鸿沟.
不甘心又用Z-Curve跑了一次, 33参数的Z-Curve就能跑到99.1%左右的准确率了,
看来的确是参数的问题.

双密码子是在是太慢了, 且不说这4000多个参数多么庞大,
估计用libsvm来跑一次 6 Fold Cross-Validation就足够等以小时算的时间单位了,
未来如果要用到Markov Model可能还得把libsvm的代码直接放到程序里来,
外部调用读数据文件的时间和效率都够呛.

其实也没做多少工作, 无非都是体力活, 科研的实质皮毛都没摸到, 倒感觉有点像打杂性质.
所以还好了, 不算太失落. 也不应该失落的.
只是实在是门外汉, 一点门路都摸不到, 
晚些时候再稍微想想看看, 先优化效率,
再试试有没有其他方法.

上次看到的一篇讲短序列预测的文章很好,
里面提到了傅立叶变换用作一个参数, 也准备试试.
看来还得找找FFT的相关资料来看看了,
现在一说起FFT, 脑袋里除了那张似有似无的蝶形图,
什么都没了.

MIPS真体贴.

昨天把酵母的DNA序列从MIPS的FTP上拖下来了.
(嗯, 首先所有的序列自然都是符合FASTA格式的.)
不过发现MIPS很体贴啊,和NCBI提供的文件不同, MIPS不提供.ptt文件作为蛋白质标注,
而直接提供后缀为_orf的文件列举了每个ORF的DNA序列和标注.
因此不用直接读取DNA序列, 再通过ptt的标注回到DNA正反链上去找了.
很方便. 

另外提供的_chr 是所有染色体的全部DNA序列,
_prot估计是蛋白质的氨基酸序列(分子生物学和生物信息学盲飘过).

一点疑问是 .fa文件是描述的什么呢?
不是很明白.

*UPDATE* 貌似分别是5’-UTR, 3′-UTR(untranslated region)的FASTA序列.