【问题标题】:Estimating skewness of histogram in MATLAB在 MATLAB 中估计直方图的偏度
【发布时间】:2015-03-19 07:37:20
【问题描述】:

我可以在 MATLAB 中进行哪些测试来测试直方图的分布?例如,在给定的一组直方图中,我只对 1、2、3、5 和 7(从左到右,从上到下)感兴趣,因为它们的分布较少。如何获得一个值来告诉我直方图是否正偏斜?

可能使用卡方检验,但我不确定 MATLAB 代码将用于此目的。

【问题讨论】:

  • 有人可能会争辩说,直方图 #6 也存在偏差,因为大量条目被分箱在箱 0 处,而其余箱则分散得很薄。我认为#6也应该包含在您的标准中,但这只是我。

标签: matlab statistics


【解决方案1】:

您可以使用standard definition of skewness。换句话说,您可以使用:

您计算数据的平均值,然后使用上述等式计算偏度。正负偏度是这样的:

来源:Wikipedia

因此,值越大,正偏度越大。值越负,负偏度越大。


现在要计算直方图数据的平均值,非常简单。您只需对直方图条目进行加权求和,然后除以条目总数。鉴于您的直方图存储在h 中,直方图的 bin 中心存储在 x 中,您将执行以下操作。我将在这里做的是假设您有从 0 到 N-1 的 bin,其中 N 是直方图中的 bin 总数...从您的图片来看:

x = 0:numel(h)-1; %// Judging from your pictures
num_entries = sum(h(:));
mu = sum(h.*x) / num_entries;
skew = ((1/num_entries)*(sum((h.*x - mu).^3))) / ...
       ((1/(num_entries-1))*(sum((h.*x - mu).^2)))^(3/2);

skew 将包含遵循该公式的直方图的偏度的数值度量。因此,在您的问题陈述中,您将需要寻找正且大的偏度数。我无法真正评论您应该查看什么阈值,但请寻找比您拥有的大多数直方图大得多的正数。

【讨论】:

  • 感谢您的解决方案。我所问的我认为已经得到了回答。但从结果来看,数字 3 的偏差似乎是 304,而数字 4 是 750……我认为对我有帮助的是,如果我可以检查前 90% 的值是否在 1- 范围内50...
  • @NeilDA - 我的公式犯了一个小错误,因此您可能需要查看我的帖子并使用更新后的代码。我忘记了几个括号。
  • @NeilDA - 如果您愿意,请在直方图上执行cumsum,并检查第 50 个条目是否占累计条目总数的 90%... 类似于:@987654332 @check 将包含 truefalse,这将确定至少 90% 的直方图条目是否在前 50 个 bin 内。
  • 我是使用 for 循环完成的,但 cumsum 方式肯定更好! ;)
猜你喜欢
  • 2015-05-01
  • 2015-11-18
  • 2013-02-02
  • 2013-01-25
  • 2013-05-07
  • 2011-10-18
  • 1970-01-01
  • 2015-12-20
  • 2019-11-29
相关资源
最近更新 更多