Я пытаюсь реализовать векторизованное экспоненциально взвешенное стандартное отклонение с использованием R. Это правильный подход?
ewma <- function (x, alpha) {
c(stats::filter(x * ratio, 1 - ratio, "recursive", init = x[1]))
}
ewmsd <- function(x, alpha) {
sqerror <- na.omit((x - lag(ewma(x, ratio)))^2)
ewmvar <- c(stats::filter(sqerror * ratio, 1 - ratio, "recursive", init = 0))
c(NA, sqrt(ewmvar))
}
Я предполагаю, что это не так, поскольку его вывод отличается от pandas.Series.ewm.std()
Pythonфункция.
Когда я запускаю
ewmsd(x = 0:9, alpha = 0.96)
, вывод равен
[1] NA 0.2236068 0.4874679 0.7953500 1.1353903 1.4993855 1.8812961 2.2764708 2.6812160 3.0925367
Однако при
pd.Series(range(10)).ewm(alpha = 0.96).std()
вывод равен
0 NaN
1 0.707107
2 0.746729
3 0.750825
4 0.751135
5 0.751155
6 0.751156
7 0.751157
8 0.751157
9 0.751157