Matlab中为离散分布分配结果并计算均值方差的方法问询
解决离散自定义值分布的均值与方差计算问题
首先得明确:你用makedist('Multinomial','probabilities', prob)创建的多项式分布(Multinomial),默认是针对「类别索引」(也就是1到6,对应你6个概率类别)来计算统计量的——这就是为什么你得到的均值是3.65,这个值其实是1*0.2 + 2*0.15 + 3*0.1 + 4*0.05 + 5*0.35 + 6*0.15的结果,完全和你自定义的A值无关。
而你实际需要的是单变量离散分布,每个结果对应你给定的A=[1,3,4,5,9,10]和对应概率,MATLAB里有专门的Discrete分布类型来处理这种场景,步骤如下:
正确的实现步骤
- 创建自定义离散分布,直接指定你的结果值和对应概率:
A = [1 3 4 5 9 10]; prob = [0.2 0.15 0.1 0.05 0.35 0.15]; pd = makedist('Discrete','Values',A,'Probabilities',prob);
- 计算均值和方差:
mean_val = mean(pd); % 结果应为5.95,手动验证:1*0.2+3*0.15+4*0.1+5*0.05+9*0.35+10*0.15=5.95 var_val = var(pd);
为什么Multinomial不适合你的场景?
多项式分布的核心是描述「n次独立试验中,每个类别出现的次数」,当你不指定N参数时默认N=1,此时它的取值是类别序号(1到k),而不是你自定义的数值。它的统计量都是围绕类别索引计算的,自然和你的A值不匹配。
如果你一定要用Multinomial间接计算,也可以手动映射:先算出类别索引的均值和方差,再通过线性变换转换到A值,但这种方法没必要,直接用Discrete分布更直观且不易出错。
内容的提问来源于stack exchange,提问作者Carmen
相关产品推荐
相关产品推荐

