随机变量的确定概率密度函数
-
28-09-2019 - |
题
如果我们有一个离散随机变量x和关于它在X(n)的数据,我们如何在MATLAB可以确定概率质量函数PMF(X)?
解决方案
您可以在至少八个不同的方式(其中一些在其他的解决方案已经提到)做到这一点。
说,我们有从一个离散随机变量的示例:
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
其他提示
从MATLAB 文档显示以下摘录如何绘制直方图。对于一个离散概率函数,所述的频率分布可能是与直方图相同。
x = -4:0.1:4;
y = randn(10000,1);
n = hist(y,x);
pmf = n/sum(n);
plot(pmf,'o');
计算在每一个仓的所有元素的总和。通过总和除以所有垃圾箱,让您的PDF文件。测试通过累加所有元素的PDF文件。结果必须是一个。
希望我是对我的发言。这是因为...
很长一段时间这样如何功能?
function Y = pmf(X)
A=tabulate(X)
A(:,3)=A(:,3)/100
Y=A(:,3)'
这是正确的在您看来?
也许尝试做只是一个函数句柄,所以你并不需要保存另一个数组的更多信息:
pmf = @(x) arrayfun(@(y) nnz(DATA==y)/length(DATA),x);
要添加另一种选择(因为有一些做你想要什么可用的功能),你可以很容易地使用功能的 ACCUMARRAY 如果离散值是大于0的整数:
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
如果我理解正确的,你需要做的是估计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亦指出
不隶属于 StackOverflow