【问题标题】:Find frequency for non-binned, weighted data查找非分箱加权数据的频率
【发布时间】:2012-01-12 05:42:52
【问题描述】:

这是一个棘手的问题(或者至少我认为是这样)。我需要创建一个直方图,但是我没有数据和它的频率,而是重复数据(即没有分箱)和每个数据的一些权重。

一个例子:

Angle  | Weight    
90   ....  3/10     
93   ....  2/10   
180  ....  2/10    
180  ....  1/10    
95   ....  2/10    

我想创建一个 bin 大小为 10 的直方图。y 值应该是某个范围内角度的加权频率之和。我该怎么做?最好是 Mathematica 或伪代码...

【问题讨论】:

  • 这似乎不太清楚。什么是 10-Y?使用您的示例数据,您希望如何分类?
  • @MikeHoneychurch 我相信它们是单独的句子。将其读作“... bin size 10; Y values are ...”。
  • 确实应该是分隔符。
  • 请在给出的示例中包含您期望的输出。

标签: wolfram-mathematica histogram bin


【解决方案1】:

在 Mathematica 9 中,您可以像这样使用 WeightedData 函数:

Histogram[WeightedData[{90, 93, 180, 180, 95}, {3/10, 2/10, 2/10, 1/10, 2/10}], {10}]

然后你应该得到一个像这样的图形:

【讨论】:

  • WeightedData 似乎不适用于Histogram,不幸的是。输出似乎没有多大意义;例如,试试Histogram[WeightedData[{1, 3, 1}, {0, 1, 0}], {0, 4, 2}]...
  • @WillVousden 我不明白你想要完成什么,WeigthedData 是为了解决问题的目的。你能详细说明你希望完成什么吗?
【解决方案2】:

由于预期的输出不会出现,我将采用 Verbeia 的解释。你可能会使用这样的东西:

dat = {{90, 3/10}, {93, 1/5}, {180, 1/5}, {180, 1/10}, {95, 1/5}};

bars =
 Reap[
   Sow[#2, Floor[#, 10]] & @@@ dat,
   _,
   {#, Tr@#2} &
 ][[2]]

Graphics[
  Rectangle[{#, 0}, {# + 10, #2}] & @@@ bars,
  AspectRatio -> 1/GoldenRatio,
  Axes -> True,
  AxesOrigin -> {Min@bars[[All, 1]], 0}
]

【讨论】:

    【解决方案3】:

    我最近针对不同类型的问题做了类似的事情(按资产负债表规模加权)。

    假设您的数据在 N * 2 矩阵列表中,我会执行以下操作:

    {numbers,weights} = {data[[All,1]], data[[All,2]]*10};
    
    weightednumbers =       Flatten@ MapThread[
        Table[#1, {#2}] &, {numbers, Ceiling[weights]}];
    

    然后使用Histogram在这个转换后的数据上绘制直方图。

    可能还有其他方法,但这是可行的。

    重要的一点是确保权重是整数,所以Table 是正确的迭代器。这可能需要将weights 定义为data[[All,2]]*Min[data[[All,2]]

    【讨论】:

    • 我认为您可能可以使用 GatherBy 然后获取每个“bin”的点积 - 例如bin1[[All,1]].bin1[[All,2]]
    猜你喜欢
    • 2013-03-19
    • 2020-10-07
    • 2013-06-18
    • 2021-11-02
    • 1970-01-01
    • 2021-08-29
    • 2017-02-28
    • 2018-06-26
    相关资源
    最近更新 更多