在Matlab中绘制pmf与实际频率的关系图

时间:2018-04-23 18:00:41

标签: matlab plot

嗨我有这个生成DNA序列的代码,但我想绘制每个符号的经验频率与X的pmf {0.1,0.5,0.3,0.1}。

n = 10;
bases = {'A', 'C', 'G', 'T'};
probs = [0.1,0.5,0.3,0.1];
seq = bases(discretize(rand(1,n),[0,cumsum(probs)]));
disp(strjoin(seq))

对不起,我知道这是基本的东西,但我似乎无法弄清楚,我只使用了Matlab大约一个星期。

1 个答案:

答案 0 :(得分:0)

我不确定这是否是最有效的方法,但它是我想到的最简单的方法,它应该适合你的情况。

n = 10;
bases = {'A', 'C', 'G', 'T'};
probs = [0.1,0.5,0.3,0.1];
seq = bases(discretize(rand(1,n),[0,cumsum(probs)]));
strseq = strjoin(seq);
freq = zeros(1,4);
for i=1:4
    freq(i) = sum(strseq==bases{i});
end

figure
scatter(probs,freq);

Matlab允许您通过索引和比较数组中的值来做一些漂亮的事情。指令

strseq==bases{i}

返回与strseq长度相同的二进制数组,如果strseq中相应位置的字母与字母base {i}重合,则其组件的值为1,否则为0。这允许您仅索引符合特定标准的数组中的值,当然您可以对其他比较运算符执行相同的操作,例如〜=,<,>,< =,> =。一个简洁的副作用是它还可以轻松地计算符合给定标准的元素。