【问题标题】:Fitting a density (distribution) to a histogram in Matlab在 Matlab 中将密度(分布)拟合到直方图
【发布时间】:2017-03-21 06:09:35
【问题描述】:

我有一个矩阵 M(mx2)。第一列是我的垃圾箱,第二列是与每个垃圾箱相关的频率。我想在 matlab 中为这个直方图拟合一条平滑曲线,但是我尝试过的大部分内容(如 kdensity)都需要数据的真实分布,而我没有。

是否有任何函数可以获取 bin 及其频率并给我一个平滑的 bin-freq 曲线。 ?

【问题讨论】:

  • 为什么不是与x=m(:,1)y=m(:,2) 的简单曲线拟合?
  • 我只有一些数据,平滑在这里不起作用

标签: matlab distribution


【解决方案1】:

这里有一个对你有用的技巧:从你的直方图中生成一个样本,然后对样本运行 ksdensity。

rng(42) % seed RNG to make reproducible

% make example histogram
N = 1e3;
bins = -5:5;
counts = round(rand(size(bins))*N);
M = [bins' counts'];

figure
hold on
bar(M(:,1), M(:,2));


% draw a sample from it
sampleCell = arrayfun( @(i) repmat(M(i,1), M(i,2), 1), 1:size(M,1), 'uniformoutput', false )';
sample = cat(1, sampleCell{:});
[f, x] = ksdensity(sample);
plot(x, f*sum(M(:,2)));

【讨论】:

  • 它为这个数据产生了一条奇怪的曲线:M(:,1) = [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18]; M(:,2) = [0 69 138 207 276 345 483 1035 1173 1380 2414 2759 7932 10000 5173 1725 1035 0];
  • @Sam 您可能需要为某些样本调整 KDE 的带宽。对于您的示例,请尝试 [f, x] = ksdensity(sample, 'bandwidth', 1);
猜你喜欢
  • 1970-01-01
  • 2017-09-01
  • 2018-01-13
  • 2016-06-12
  • 1970-01-01
  • 1970-01-01
  • 2010-12-02
相关资源
最近更新 更多