Ciekawe, czy ktoś go używał. Wykonałem prostą operację EMA na szeregu czasowym. Ale nie potrafił się za dobrze pogodzić.

Wyczytałem, że wartość stałej aktualizacji = 2/(N+1). Zdefiniowałem x = 1:20 i zrobiłem EMA(x,5). Następnie wykonałem obliczenia EMA przy użyciu obliczeń rekurencyjnych. Te dwa wyniki nie pasują do siebie

Funkcja zwraca

EMA(x,5)
 [1] NA NA NA NA  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18

I moja mała rzecz daje mi

EMA
 [1]  1.000000  1.333333  1.888889  2.592593  3.395062  4.263374  5.175583  6.117055  7.078037  8.052025  9.034683 10.023122 11.015415 12.010276 13.006851 14.004567
[17] 15.003045 16.002030 17.001353 18.000902
6
ganesh reddy 24 wrzesień 2012, 05:11

2 odpowiedzi

Najlepsza odpowiedź

Aby uzyskać odpowiedź, której szukasz, musisz napisać

TTR::EMA(1:20, n=1,  ratio=2/(5+1))

 [1]  1.000000  1.333333  1.888889  2.592593  3.395062  4.263374  5.175583
 [8]  6.117055  7.078037  8.052025  9.034683 10.023122 11.015415 12.010276
[15] 13.006851 14.004567 15.003045 16.002030 17.001353 18.000902

Jeśli dzwonisz TTR::EMA(1:20, n=5), jest to równoznaczne z dzwonieniem

TTR::EMA(1:20, n=5, ratio=2/(5+1))

Spowoduje to umieszczenie NA na pierwszych 4 miejscach, a następnie 5 miejsce będzie prostą średnią z pierwszych 5 wpisów. (tj. 3 w tym przypadku). Wtedy rozpocznie się algorytm EMA. 6. miejsce to 6 * 2 / 6 + 3 * 4 / 6 = 4. 7. miejsce to 7 * 2 / 6 + 4 * 4 / 6 = 5. Itd...

Możesz zobaczyć dokładny algorytm tutaj

7
Jilber Urbina 24 wrzesień 2012, 14:08

TTR::EMA oblicza pierwszą niebrakującą wartość jako średnią arytmetyczną pierwszych zmiennych n, a następnie rozpoczyna obliczenia rekurencyjne. Możesz dopasować swoje obliczenia, ustawiając n=1 i ratio=1/3.

R> EMA(x,n=1,ratio=1/3)
 [1]  1.000000  1.333333  1.888889  2.592593  3.395062  4.263374  5.175583
 [8]  6.117055  7.078037  8.052025  9.034683 10.023122 11.015415 12.010276
[15] 13.006851 14.004567 15.003045 16.002030 17.001353 18.000902
2
Joshua Ulrich 24 wrzesień 2012, 07:49