确定随机变量的概率质量函数

时间:2010-11-01 11:21:02

标签: matlab probability discrete-space

如果我们有一个离散的随机变量x和X(n)中与之相关的数据,我们如何在matlab中确定概率质量函数pmf(X)?

6 个答案:

答案 0 :(得分:5)

您可以通过至少八种不同的方式执行此操作(其中一些已在其他解决方案中提及)。

假设我们有来自离散随机变量的样本:

X = randi([-9 9], [100 1]);

考虑这些等价的解决方案(请注意,我不假设任何可能值的范围,只是它们是整数):

[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用于获取从pmf的条目开始的1开始的索引(映射由labels给出)。以上结果是:

>> [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

答案 1 :(得分:1)

MATLAB documentation的以下摘录展示了如何绘制直方图。对于离散概率函数,频率分布可能与直方图相同。

x = -4:0.1:4;
y = randn(10000,1);
n = hist(y,x);
pmf = n/sum(n);
plot(pmf,'o');

计算每个bin中所有元素的总和。将所有箱子除以总和得到你的pdf。通过添加所有元素来测试您的pdf。结果必须是一个。

希望我的陈述是正确的。这是很长一段时间......

答案 2 :(得分:1)

这个功能怎么样?

function Y = pmf(X)
A=tabulate(X)
A(:,3)=A(:,3)/100
Y=A(:,3)'

您认为这是正确的吗?

答案 3 :(得分:1)

也许尝试只做一个函数句柄,这样你就不需要存储另一个数组了:

pmf = @(x) arrayfun(@(y) nnz(DATA==y)/length(DATA),x);

答案 4 :(得分:1)

要添加另一个选项(因为有许多函数可用于执行您想要的操作),如果您的离散值是大于0的整数,则可以使用函数ACCUMARRAY轻松计算pmf:

pmf = accumarray(X(:),1)./numel(X);

以下是一个例子:

>> X = [1 1 1 1 2 2 2 3 3 4];          %# A sample distribution of values
>> pmf = accumarray(X(:),1)./numel(X)  %# Compute the probability mass function

pmf =

    0.4000      %# 1 occurs 40% of the time
    0.3000      %# 2 occurs 30% of the time
    0.2000      %# 3 occurs 20% of the time
    0.1000      %# 4 occurs 10% of the time

答案 5 :(得分:0)

如果我理解正确你需要做的是估计pdf,除了它不是连续的但离散的值。

计算X(n)中不同值的出现次数并除以n。为了说明我的意思,请允许我举个例子。假设你有10个观察结果:

X = [1 1 2 3 1 9 12 3 1 2]

然后你的pmf看起来像这样:

pmf(X) = [0.4 0.2 0.2 0 0 0 0 0 0.1 0 0 0.1]

编辑这原则上是一个频率直方图,正如@zellus也指出的那样