【问题标题】:Count the probability in a cell array计算单元格数组中的概率
【发布时间】: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


【解决方案1】:

试试这个 -

%%// Get the cell data into data1
data1 = INPUT_DATA;

%%// Get the data from columns separately
col1 = data1(:,1);
tag_data = vertcat(col1{:});

col2 = data1(:,2);
times_data = vertcat(col2{:});

col3 = data1(:,3);
col3_data = vertcat(col3{:});

%%// Get full data for tag, times and column3
char_array = ['A' 'C' 'G' 'T'];
full_tag_data = char_array(combinator(4,3,'p','r'));
full_tag_data = [full_tag_data(:,1:2) repmat('->',[size(full_tag_data,1) 1]) full_tag_data(:,2:3)];

present_rows = ismember(full_tag_data,tag_data,'rows');
full_times_data = double(present_rows);
full_times_data(present_rows) = times_data;

full_col3_data = double(present_rows);
full_col3_data(present_rows) = col3_data;

%%// Get the sum values
full_col3_data_summed = sum(reshape(full_col3_data,4,[]),1);
full_col3_data_summed = reshape(repmat(full_col3_data_summed,[4 1]),[],1);

%%// Store the required values into a cell array out_cell1
out_cell1 = cell(size(present_rows,1),2);
out_cell1(:,1) = cellstr(full_tag_data);
out_cell1(:,2) = num2cell(full_times_data);
out_cell1(:,3) = num2cell(full_col3_data);

%%// The probabilities are added into the cell array as the fourth column
out_cell1(:,4) = num2cell(full_times_data./full_col3_data_summed);

注意:以上代码使用了一个函数combinator,可用here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-18
    • 1970-01-01
    相关资源
    最近更新 更多