【问题标题】:Computing Weighted Moving Average in Excel在 Excel 中计算加权移动平均线
【发布时间】:2021-03-23 18:07:16
【问题描述】:

我有来自不规则时间间隔的数据点

我需要根据最后 k 个记录找到每个这些数据点的加权移动平均值 (WMA)。具体来说,在计算点 p 的 WMA 时,对应于 pth 记录的值应分配为 1 的权重,分配给前 k 个点中的每一个的权重应与这些点与第 p 个点之间的日期差成反比。历史记录越老,赋予该记录价值的权重就越小。

如何在 Excel 中实现这一点?

据我了解,我缺少的关键部分是转换单元格范围的能力。如果有办法做到这一点,我可以计算倒数 日期差异并将其用作权重。

数据示例

这是一个示例,说明仅对一个数据点(对应于 21 年 2 月 11 日)所需的计算。这需要对所有数据点重复。

使用的公式:

权重 = 1/(1+ 21 年 2 月 11 日与当前数据点的数据之间的日期差异)

加权值 = 值 * 权重

加权平均值 = 加权值总和/权重总和

【问题讨论】:

  • 你能用实际数字显示一个典型的计算吗?我认为原则上不会太难,但一个相当明显的问题是,如果您将当前点包含在移动平均线中,则日期差将为零,并且它的倒数(您需要工作出与日期差成反比的加权移动平均值)将是无穷大。
  • k 不变吗?
  • @TomSharpe 我将很快添加一个示例以澄清...我计划在日期差异中添加 1 以解决您提到的无限情况...我的主要问题是不同的...如果只需要一个数据点,我可以在另一列中计算中间值并使用它......但在这里我需要为每个数据点计算的那些
  • 好的,太好了。另外,对于前 k 行没有足够的先前分数来计算平均值,你会怎么做?我希望您会在示例中介绍这一点。
  • @Jsmart523 我最初的想法是在每种情况下都包含所有过去的数据点......但正如我所考虑的那样,如果可以的话,这可以放宽(即 k 可以保持不变)让事情变得更容易

标签: excel data-analysis


【解决方案1】:

这能解决您的问题吗?

假设 21 年 1 月 1 日在单元格 A2 中,

  1. (价值 * 重量)D2 = B2 * C2

  2. (值的运行总和 * 权重)E2 = IF(ROW()=2,0,E1)+D2

  3. (权重的运行总和)F2 = IF(ROW()=2,0,F1)+B2

  4. (WMA) G2 = E2/F2

现在将 D:G 的公式拖到工作表中,它应该会为您提供加权平均值。

更好的是使用表格。如果您突出显示您的数据集并点击插入 - 表格并通过将 D1 更改为“VW”并将 E1 更改为“RSVW”来添加新列,那么

  • 在 D2 中,您需要一个 =[@Value]*[@[Day of Year]] 的公式(方括号表示我们正在讨论此表,“@”符号指定当前行,“日期”有额外的方括号,因为有列名中的空格。)

  • 在 E2 中,您需要一个 =IF(ROW()=2,0,OFFSET([@RSVW],-1,0))+[@VW] 的公式,因为只要您不通过像“E1”这样的单元格地址进行相对单元格引用,那么该公式就不会自动填充右侧的列,所以相反,我们通过使用 OFFSET 来引用“当前行的 RSVW 值之上的一个”来获得相同的值

  • 呸呸呸

完成此操作后,您将存储这些公式每列一次,而不是在每个单元格中重复。只要您不在这些列中放置绝对值,您就可以调整/更改它们而无需将公式拖到列中,并且您可以重命名列标题。另外,我不确定第一种方法在排序时是否会中断,但是您使用表格公式然后 即使从表格中间删除一行也不会破坏它。

【讨论】:

    【解决方案2】:

    好的,这里是使用两个大矩阵的蛮力方法,这对于 200 行数据应该没问题,并且最多可以使用 5K。这是无限的 k,使用所有以前的可用行:

    =MMULT(IF(TRANSPOSE(ROW(A2:A13))>ROW(A2:A13),0,1/(1+B2:B13-TRANSPOSE(B2:B13))),C2:C13)/
    MMULT(IF(TRANSPOSE(ROW(A2:A13))>ROW(A2:A13),0,1/(1+B2:B13-TRANSPOSE(B2:B13))),ROW(A2:A13)^0)
    

    【讨论】:

      猜你喜欢
      • 2011-07-14
      • 2012-04-26
      • 1970-01-01
      • 2017-02-20
      • 2014-11-18
      相关资源
      最近更新 更多