Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 随机变量概率质量函数的确定_Matlab_Probability_Discrete Space - Fatal编程技术网

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

Matlab 随机变量概率质量函数的确定,matlab,probability,discrete-space,Matlab,Probability,Discrete Space,如果我们有一个离散的随机变量x和x(n)中与之相关的数据,我们如何在matlab中确定概率质量函数pmf(x) 以下摘录自MATLAB,展示了如何绘制直方图。对于离散概率函数,频率分布可能与直方图相同 x = -4:0.1:4; y = randn(10000,1); n = hist(y,x); pmf = n/sum(n); plot(pmf,'o'); 计算每个箱子中所有元素的总和。将所有垃圾箱除以总和即可得到pdf。通过添加所有元素来测试pdf。结果一定是一个 希望我的陈述是正确的。很

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

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

x = -4:0.1:4;
y = randn(10000,1);
n = hist(y,x);
pmf = n/sum(n);
plot(pmf,'o');
计算每个箱子中所有元素的总和。将所有垃圾箱除以总和即可得到pdf。通过添加所有元素来测试pdf。结果一定是一个


希望我的陈述是正确的。很久没有

如果我理解正确,你需要做的是估计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也指出的那样

这个函数怎么样

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);
要添加另一个选项(因为有许多函数可用于执行所需操作),如果离散值是大于0的整数,则可以使用该函数轻松计算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

您至少可以用八种不同的方法来实现这一点(其中一些方法已经在其他解决方案中提到)

假设我们有一个离散随机变量的样本:

X = randi([-9 9], [100 1]);
考虑这些等价的解决方案(注意,我不假设任何可能值的范围,只假设它们是整数):

请注意,GRP2IDX用于获取从1开始的索引,对应于
pmf
的条目(映射由
标签给出)。上述结果是:

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

数据集的“pmf”(数学上)是什么?pmf(X)应该是X的归一化频率分布吗?如果是的话,我们在Matlab中有计算它的函数吗?我不知道那个函数。我想这是你的工作。在MATLAB中,通常有几种方法来完成一项工作。。。您需要使用统计工具箱。我将改为使用:
pmf=accumarray(X(:),1);pmf=pmf./sum(pmf)(数字更稳定:一个除法而不是多个分数)@Amro:非常正确。这将减少潜在浮点错误的累积。答案已更新。另外,您应该注意,如果可能值的范围不是从
1开始的,那么您将在开始时得到很多额外的零。试着用
X=X+100运行上述程序(调用GRP2IDX可以解决此问题)@SkypeMeSM的表格解决方案也是如此。。
>> [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