我可以在 vega或 vega-lite中创建递归变换吗?

问题描述

我想在 vega(或 vega-lite)中创建等效的递归变换。

例如,我想定义和绘制数据系列的 exponential moving average

指数移动平均线的递归定义,给定一个平滑因子和一个周期或要平滑的天数,如下所示:

EMA(Today) = (Value(Today) ∗ smoothing / (1 + period))
    + EMA(Yesterday) ∗ (1 - (smoothing / (1 + period))
​   

因此,今天的 EMA 被定义为今天值和昨天计算的 EMA 的函数。 Vega的transforms可以做的挺多的,但是我还没有想出一种方法来计算一个值并在同一个计算中使用之前计算的值。

我尝试了以下方法,但没想到它会起作用:

  transform: [
    {
      calculate: 
       'isValid(datum.value) ? datum.value * 0.25 + datum.prevIoUsEma * 0.75 : null',as: 'ema',},{
      window: [
        {
          field: 'ema',op: 'lag',as: 'prevIoUsEma',],

似乎应该有一个简单的解决方案,但也许不是。进行这种递归计算的示例会很有用。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)