确定随机变量的概率质量函数 [英] Determining probability mass function of random variable
问题描述
如果我们有一个离散随机变量x,并且它的相关数据在X(n)中,那么在matlab中如何确定概率质量函数pmf(X)?
If we have a discrete random variable x and the data pertaining to it in X(n), how in matlab can we determine the probability mass function pmf(X)?
推荐答案
您可以至少以八种不同的方式进行此操作(其中一些已在其他解决方案中提及).
You can do this in at least eight different ways (some of them were already mentioned in the other solutions).
假设我们有一个来自离散随机变量的样本:
Say we have a sample from a discrete random variable:
X = randi([-9 9], [100 1]);
考虑这些等效的解决方案(请注意,我对可能值的范围不做任何假设,只是它们是整数):
Consider these equivalent solutions (note that I don't assume anything about the range of possible values, just that they are integers):
[V,~,labels] = grp2idx(X);
mx = max(V);
%# TABULATE (internally uses HIST)
t = tabulate(V);
pmf1 = t(:, 3) ./ 100;
%# HIST (internally uses HISTC)
pmf2 = hist(V, mx)' ./ numel(V); %#'
%# HISTC
pmf3 = histc(V, 1:mx) ./ numel(V);
%# ACCUMARRAY
pmf4 = accumarray(V, 1) ./ numel(V);
%# SORT/FIND/DIFF
pmf5 = diff( find( [diff([0;sort(V)]) ; 1] ) ) ./ numel(V);
%# SORT/UNIQUE/DIFF
[~,idx] = unique( sort(V) );
pmf6 = diff([0;idx]) ./ numel(V);
%# ARRAYFUN
pmf7 = arrayfun(@(x) sum(V==x), 1:mx)' ./ numel(V); %#'
%# BSXFUN
pmf8 = sum( bsxfun(@eq, V, 1:mx) )' ./ numel(V); %#'
请注意,使用GRP2IDX来获取从1开始的索引,该索引对应于pmf
的条目(映射由labels
给出).上面的结果是:
note that GRP2IDX was used to get indices starting at 1 corresponding to the entries of pmf
(the mapping is given by labels
). The result of the above is:
>> [labels pmf]
ans =
-9 0.03
-8 0.07
-7 0.04
-6 0.07
-5 0.03
-4 0.06
-3 0.05
-2 0.05
-1 0.06
0 0.05
1 0.04
2 0.07
3 0.03
4 0.09
5 0.08
6 0.02
7 0.03
8 0.08
9 0.05
这篇关于确定随机变量的概率质量函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!