gpt4 book ai didi

wolfram-mathematica - 实现双指数平滑,即双指数移动平均线 (DEMA)

转载 作者:行者123 更新时间:2023-12-04 15:26:54 24 4
gpt4 key购买 nike

如果我有时间序列数据——一个 {x,y} 对列表——并且想要平滑它,我可以像这样使用指数移动平均线:

EMA[data_, alpha_:.1] := 
Transpose @ {#1, ExponentialMovingAverage[#2, alpha]}& @@ Transpose@data

您将如何实现 double exponential smoothing ?
DEMA[data_, alpha_, gamma_] := (* unstub me! *)

如果它自己计算出 alpha 和 gamma 的好值,那就更好了。

关于如何处理时间序列中存在间隙的情况的相关问题,即样本没有随时间均匀分布:

Exponential Moving Average Sampled at Varying Times

最佳答案

我不确定这是可以获得的最快的代码,但以下似乎可以做到:

DEMA[data_, alpha_, gamma_] := 
Module[{st = First[data], bt = data[[2]] - data[[1]], btnew, stnew},
Reap[
Sow[st];
Do[
stnew = alpha y + (1 - alpha) (st + bt);
btnew = gamma (stnew - st) + (1 - gamma) bt;
Sow[stnew];
st = stnew;
bt = btnew;
, {y, Rest@data}]][[-1, 1]
]]

这几乎直接来自您引用的页面。您可以在源代码中修改 b 的初始条件。将 bt 初始设置为零可恢复单指数平滑。
In[81]:= DEMA[{a, b, c, d}, alpha, gamma]

Out[81]= {a, (1 - alpha) b + alpha b,
alpha c + (1 - alpha) ((1 - alpha) b +
alpha b + (-a + b) (1 - gamma) + (-a + (1 - alpha) b +
alpha b) gamma),
alpha d + (1 -
alpha) (alpha c + (1 -
gamma) ((-a + b) (1 - gamma) + (-a + (1 - alpha) b +
alpha b) gamma) + (1 - alpha) ((1 - alpha) b +
alpha b + (-a + b) (1 - gamma) + (-a + (1 - alpha) b +
alpha b) gamma) +
gamma (-(1 - alpha) b - alpha b +
alpha c + (1 - alpha) ((1 - alpha) b +
alpha b + (-a + b) (1 - gamma) + (-a + (1 - alpha) b +
alpha b) gamma)))}

关于wolfram-mathematica - 实现双指数平滑,即双指数移动平均线 (DEMA),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5533544/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com