【发布时间】:2014-03-26 07:34:16
【问题描述】:
嘿嘿,我有一个元胞数组,第二列是'XX->XX'的次数,例如:
'AA->AA' [21] [4.2084]
'AA->AC' [15] [3.0060]
'AA->AG' [ 9] [1.8036]
'AA->AT' [12] [2.4048]
'AC->CA' [14] [2.8056]
'AC->CC' [16] [3.2064]
'AC->CG' [ 5] [1.0020]
'AC->CT' [ 3] [0.6012]
'AG->GA' [11] [2.2044]
'AG->GC' [ 5] [1.0020]
'AG->GG' [ 8] [1.6032]
'AG->GT' [13] [2.6052]
'AT->TA' [10] [2.0040]
'AT->TC' [ 8] [1.6032]
'AT->TG' [ 2] [0.4008]
'AT->TT' [11] [2.2044]
'CA->AA' [17] [3.4068]
'CA->AC' [ 7] [1.4028]
'CA->AG' [ 9] [1.8036]
'CA->AT' [11] [2.2044]
'CC->CA' [15] [3.0060]
'CC->CC' [ 5] [1.0020]
'CC->CG' [ 4] [0.8016]
'CC->CT' [17] [3.4068]
'CG->GA' [ 1] [0.2004]
'CG->GC' [ 2] [0.4008]
'CG->GG' [ 9] [1.8036]
'CG->GT' [ 3] [0.6012]
'CT->TA' [ 7] [1.4028]
'CT->TC' [ 9] [1.8036]
'CT->TG' [ 9] [1.8036]
'CT->TT' [ 2] [0.4008]
'GA->AA' [10] [2.0040]
'GA->AC' [ 4] [0.8016]
'GA->AG' [10] [2.0040]
'GA->AT' [ 2] [0.4008]
'GC->CA' [ 2] [0.4008]
'GC->CC' [ 7] [1.4028]
'GC->CG' [ 6] [1.2024]
'GC->CT' [ 3] [0.6012]
'GG->GA' [ 6] [1.2024]
'GG->GC' [ 6] [1.2024]
'GG->GG' [ 4] [0.8016]
'GG->GT' [ 8] [1.6032]
'GT->TA' [ 6] [1.2024]
'GT->TC' [11] [2.2044]
'GT->TG' [ 8] [1.6032]
'GT->TT' [ 5] [1.0020]
'TA->AA' [ 8] [1.6032]
'TA->AC' [13] [2.6052]
'TA->AG' [ 9] [1.8036]
'TA->AT' [ 6] [1.2024]
'TC->CA' [13] [2.6052]
'TC->CC' [13] [2.6052]
'TC->CT' [ 4] [0.8016]
'TG->GA' [ 8] [1.6032]
'TG->GC' [ 5] [1.0020]
'TG->GG' [ 3] [0.6012]
'TG->GT' [ 6] [1.2024]
'TT->TA' [13] [2.6052]
'TT->TC' [ 2] [0.4008]
'TT->TG' [ 3] [0.6012]
'TT->TT' [ 5] [1.0020]
现在,我正在尝试计算概率:P('AA->AA')=TIMES('AA->AA')/SUM('AA->AA','AA->AC',' AA->AG','AA->AT'),换句话说,P('AA->AA')=TIMES('AA->AA')/SUM('AA->Anyone')。其他人也一样。我想使用一个循环来做到这一点,但在
中有一个极端情况'TC->CA' [13] [2.6052]
'TC->CC' [13] [2.6052]
'TC->CT' [ 4] [0.8016]
嗯,很明显'TC->CG'的次数为0,即使我们已经知道概率应该是0,也需要考虑。当然,这种极端情况可以发生在任何其他情况下比如,有时可能缺少“TT->TT”,或者有时缺少“TC->CT”。 任何人都知道如何做到这一点? 谢谢。
【问题讨论】:
-
所以输出将是一个概率元胞数组,但对于输入元胞数组中未提及的“TC->CG”等情况有更多行?
-
是的,应该是这样的。
-
缺少多少个案例?大约我的意思是,它是 10 还是更多像 100?
-
您很难坚持使用该字符串表示法
'AC'、'TC->CA'等 - 您可以将这些表示法存储在一个数组中并使用它的索引吗?或者更高级,我假设每个字母组合都是基因或蛋白质或其他东西。这个应用程序为面向对象编程而尖叫。创建一个class蛋白质,然后你可以给每个蛋白质一个名称和值等等。那时使用起来会容易得多。 -
简单的答案是像你描述的那样对其进行编码:循环,查找字符串,如果找到则使用第二列号,否则使用零。你在哪里遇到麻烦?但是@thewaywewalk 是对的:这种存储格式会让您感到痛苦。表示此类数据的一种常用方法是“转换矩阵”,其中所有状态(对于您来说是 16 个)被列为行,表示起始状态,再次列为列,表示结束状态。交点处的元素是出现的次数或概率。从单元格中填充这样的矩阵,然后查找所需的值。
标签: matlab matrix probability markov