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

在Matlab中绘制pmf与实际频率的关系,matlab,plot,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。我不确定这是否是

嗨,我有一个生成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。

我不确定这是否是最有效的方法,但这是我想到的最简单的方法,应该适用于您的情况

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中相应位置的字母与字母基{i}重合,则其组件的值为1,否则为0。这允许您仅对数组中符合特定条件的值进行索引,当然,您也可以对其他比较运算符(如~=、、=)执行相同的操作。一个巧妙的副作用是,它还允许轻松计算遵守给定标准的元素。

你真的是指VS(一个轴是pmf,另一个经验频率),还是另外(一个轴是基准,另一个轴是pmf或频率)?如果是VS,当两个基具有相同的pmf值时会发生什么?我必须通过绘制频率与X的pmf的关系图来验证字符串中每个符号的经验频率是否接近其概率谢谢你的帮助我会尝试一下