【问题标题】:Adapting the mode function to favor central values (Matlab)调整模式函数以支持中心值(Matlab)
【发布时间】:2012-03-29 22:10:15
【问题描述】:

Matlab 中的mode-函数返回数据集中出现频率最高的值。但是“当有多个值同样频繁地出现时,模式会返回这些值中的最小值。”

这对于我使用它的用途不是很有用,我宁愿让它在没有模态值的情况下返回中值或算术平均值(因为它们至少在分布的中间)。否则使用mode 的结果在规模的低端太多了(我的分布中有很多独特的值)。

是否有一种优雅的方法可以使mode 偏爱数据集中的更多中心值(在没有真正的模态值的情况下)?


btw.:我知道我可以使用[M,F] = mode(X, ...),手动检查最频繁的值(并在必要时计算中值或平均值)。但这似乎有点尴尬,因为我几乎要完全重写 mode 应该做的所有事情。我希望有一个更优雅的解决方案。

【问题讨论】:

    标签: matlab average mode


    【解决方案1】:

    看起来您想要来自mode 的第三个输出参数。例如:

    x = [1 1 1 2 2 2 3 3 3 4 4 4 5 6 7 8];
    [m,f,c] = mode(x);
    valueYouWant = median(c{1});
    

    或者(因为当有偶数个条目时,中位数取值的平均值),在偶数个值可能具有相同的最大出现次数的情况下,可以这样做:

    valueYouWant = c{1}(ceil(length(c{1})/2))
    

    【讨论】:

    • 如果找不到最终的模态值,我现在使用roundn 逐步舍入输入值。如果在 5 次通过后仍然没有找到唯一的模态值,则使用中位数(如您的示例中所示)。所以就像一个魅力,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-21
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    • 2018-01-17
    相关资源
    最近更新 更多