Matlab标准偏差 - 将矢量视为概率,而不是值

时间:2014-08-28 14:14:47

标签: matlab standard-deviation

我在Matlab中有一个类似于:

的向量
vect = 0
     100
     300
     500
     700
    1000
     500
     300
     200
       0

当标准化时,每个值应指示某个值的概率,我的值仅为1到10(即0%的概率为1,100/sum(vect)概率为2,等等。

如何计算有关值的统计数据(特别是标准偏差)..?如果我做mean(vect),我最终会得到360,并且我得到一个类似的大标准偏差值。当然,平均值应该在5左右。我确定根本不会手动编写代码,但必须有一种方法直接在Matlab中执行此操作,所以我想我问!

2 个答案:

答案 0 :(得分:2)

我不确定matlab是否有任何内置功能,但这没什么大不了的。无论如何两者都是一个衬里

vect = [0; 100; 300; 500; 700; 1000; 500; 300; 200; 0];
prob = vect./sum(vect);
val = [1:10].';
meanVal = sum(prob.*val);
stDev = sqrt( sum( prob.*val.^2 ) -sum(prob.*val)^2 );

编辑:

有两个功能可以做到这一点。它们也被称为meanstd。但他们改为采用概率分布对象。

答案 1 :(得分:1)

如果您致电stem(vect),您会发现vect是正态分布变量的概率密度函数,因此您可以将正态分布拟合为vect 没有规范化

x = (1:length(vect))';
pdf = fitdist(x, 'normal', 'freq', vect);

结果的平均值为5.63889,标准差为1.66944。