如何在 MatLab 中绘制概率密度函数?

Posted

技术标签:

【中文标题】如何在 MatLab 中绘制概率密度函数?【英文标题】:How to draw probability density function in MatLab? 【发布时间】:2011-08-11 01:44:42 【问题描述】:
x = [1 2 3 3 4]
cdfplot(x)

谷歌搜索后,我发现上面的代码会在 Matlab 中为我绘制一个累积分布函数。 有没有简单的方法来绘制概率密度函数?

澄清。我需要一个具有均匀分布的 x 轴的图表。而且我希望它看起来不像条形图。 (我会有数百万个整数) 抱歉,再次更新。我的数据是整数,但实际上它们代表时间(我希望在完全相同的值上有几个相当高的峰值,而其他值看起来好像不是离散的)。我实际上开始怀疑这是否实际上不是固有的离散整数。 CDF 肯定会工作,但是当使用 PDF 时,它似乎比我预期的要复杂。

【问题讨论】:

“均匀分布的x轴”是什么意思? @gnovice 正如您在新答案中所做的那样。 看看 ksdensity 函数。它是核密度估计的一种实现。 mathworks.com.au/help/toolbox/stats/ksdensity.html 【参考方案1】:

您可以使用函数hist 为整数生成离散概率分布:

data = [1 2 3 3 4];           %# Sample data
xRange = 0:10;                %# Range of integers to compute a probability for
N = hist(data,xRange);        %# Bin the data
plot(xRange,N./numel(data));  %# Plot the probabilities for each integer
xlabel('Integer value');
ylabel('Probability');

这是结果图:


更新:

在较新版本的 MATLAB 中,不再推荐使用 hist 函数。相反,您可以像这样使用histcounts 函数来生成与上图相同的图形:

data = [1 2 3 3 4];
N = histcounts(data, 'BinLimits', [0 10], 'BinMethod', 'integers', 'Normalization', 'pdf');
plot(N);
xlabel('Integer value');
ylabel('Probability');

【讨论】:

@gnovice:只是一个小问题,一般来说,您应该除以直方图的 面积,而不是 数据点的数量得到一个pdf。所以最后一行应该是bar(X,N/trapz(X,N))。由于在此示例中,bin 点是整数和单位间隔,numeltrapz 都给出相同的答案,4,但如果不是这种情况,它们将是不同的。 @yoda:你是对的,但 Gene 提到必须为 integer 值(即离散概率分布)执行此操作,所以我想我会保持简单。 谢谢你的回答,我还有一个问题,新手。 @yoda 的评论引起了我的关注。如果 x=[100 200 400 400 550],这仍然可以正常工作吗 我会尝试我的实际数据。谢谢大家! @Gene:如果你有data = [100 200 400 400 550]; 并指定了一个整数范围,比如xRange = 0:600;,你会得到一个除了0.2 峰值之外的大部分为0 的图,当x 等于100、200 和当 x 等于 400 时,峰值为 550,峰值为 0.4。作为显示数据的另一种方式,您可能想要尝试使用STEM 图而不是常规线图。它可能看起来更好。【参考方案2】:

如果你想要一个连续分布函数,试试这个。

x = [1 2 3 3 4]
subplot(2,1,1)
ksdensity(x)
axis([-4 8 0 0.4])

subplot(2,1,2)
cdfplot(x)
grid off
axis([-4 8 0 1])
title('')

哪个输出这个。

累积分布函数在底部,核密度估计在顶部。

【讨论】:

【参考方案3】:

在 matlab 帮助中键入“ksdensity”,您将找到可以为您提供 PDF 连续形式的函数。我想这正是您正在寻找的。

【讨论】:

【参考方案4】:

除了ksdensity(x)得到的平滑PDF,还可以使用ksdensity(x,'function','cdf')绘制平滑CDF图。

【讨论】:

以上是关于如何在 MatLab 中绘制概率密度函数?的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB如何将概率密度向量绘制到直方图上?

matlab一维概率分布和均匀分布的区别

教你使用 MATLAB 绘制散点密度图(二维核密度)

教你使用 MATLAB 绘制散点密度图(二维核密度)

教你使用 MATLAB 绘制散点密度图(二维核密度)

教你使用 MATLAB 绘制散点密度图(二维核密度)