如果我们有一个离散随机变量 x 和 X(n) 中与它相关的数据,我们如何在 matlab 中确定概率质量函数 pmf(X)?
问问题
14267 次
6 回答
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 用于获取从 1 开始的索引,对应于pmf
(映射由 给出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
于 2010-11-04T01:46:53.983 回答
1
以下 MATLAB文档摘录显示了如何绘制直方图。对于离散概率函数,频率分布可能与直方图相同。
x = -4:0.1:4;
y = randn(10000,1);
n = hist(y,x);
pmf = n/sum(n);
plot(pmf,'o');
计算每个 bin 中所有元素的总和。将所有垃圾箱除以总和以获得您的 pdf。通过添加所有元素来测试您的 pdf。结果必须是一。
希望我的陈述是正确的。很久以来...
于 2010-11-01T12:30:54.570 回答
1
这个功能怎么样?
function Y = pmf(X)
A=tabulate(X)
A(:,3)=A(:,3)/100
Y=A(:,3)'
你认为这正确吗?
于 2010-11-01T13:07:12.130 回答
1
也许尝试只制作一个函数句柄,这样您就不需要存储另一个数组:
pmf = @(x) arrayfun(@(y) nnz(DATA==y)/length(DATA),x);
于 2010-11-01T15:59:22.740 回答
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
于 2010-11-01T16:12:06.857 回答
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 也指出的那样
于 2010-11-01T12:33:46.363 回答