【问题标题】:Calculate average value on objects with differing time delta's计算具有不同时间增量的对象的平均值
【发布时间】:2014-04-19 21:33:08
【问题描述】:

我有一个很大的对象列表(更具体地说是主干模型),其中包含一个值和一个时间。简化后我的对象如下所示:

{
    "time": {moment.js object},
    "value": {float value}
}

不同对象之间的时间并不总是相同的,所以我不能循环遍历所有对象,将它们加在一起,然后除以对象的数量。

如何计算此数据的正确平均值?

【问题讨论】:

  • The time between different objects is not always the same, so I can't just loop through all objects, add them together and divide that by the number of objects. 为什么不呢?请解释更多。
  • 我正在计算一天的平均温度。可能是我有两个非常接近彼此的非常高的温度(例如,一小时的差异),然后是两个彼此相距很远的“正常”温度(例如,10 小时)。只需将所有值相加并除以 4 就会导致失真,并且最终的平均温度会比实际发生的温度高得多。这是因为这将赋予温度过高的非常短时期与温度正常的非常长时期相同的权重。
  • 因此,您并不是在寻找数据的“平均值”,而不是如何定义“average”。那么为什么不先把数据过一遍,去掉这些点(reduce按时差计算)再计算平均值呢?
  • 如果这对您的数据来说太简单了(未知),那么不妨看看如何分析Unevenly spaced time series

标签: javascript algorithm math backbone.js statistics


【解决方案1】:

问题是您如何解释观察结果之间的“漏洞”。如果您同意点之间的温度等于这两个观察值的平均值(变化是线性的),这可能是解决方案:

tempObservation o0 { t = 0, v = 100}  // time, value
tempObservation o1 { t = 1, v = 120}
tempObservation o2 { t = 2, v = 125}
...
tempObservation on { t = n, v = 145}

temp = 
[ 0.5 * ( o0.v + o1.v)] * ( o1.t - o0.t) +
[ 0.5 * ( o1.v + o2.v)] * ( o1.t - o0.t) +
...
[ 0.5 * ( on-1.v + on.v)] * ( on.t - on-1.t)

average_temp = temp /( on.t - o0.t)

【讨论】:

  • 这看起来就是解决方案!谢谢:)
  • 这是第一个基本概念,如何将温度变化与测量之间的时间联系起来。这意味着温度的线性近似。你也可以考虑不同的功能;多项式、指数、有滞后的模型...
猜你喜欢
  • 2020-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多