我试图从一个名为的数据框的一系列股票每日收益中获取 EWMA 波动base_retorno_diario
Data IBOV ABEV3 AEDU3 ALLL3 BBAS3 BBDC3 BBDC4
1 2000-01-04 -0.063756245 0.00000000 0 0 -0.029935852 -0.080866107 -0.071453347
2 2000-01-05 0.024865308 -0.03762663 0 0 -0.008082292 0.043269231 0.060889055
3 2000-01-06 -0.008510238 -0.03157895 0 0 0.014074074 0.014285714 0.008098592
4 2000-01-07 0.012557359 -0.02484472 0 0 -0.022644266 0.017719219 0.000000000
5 2000-01-10 0.043716564 0.00000000 0 0 0.050074738 0.005357143 0.006985679
6 2000-01-11 -0.026401514 -0.02388535 0 0 -0.008540925 -0.059058615 -0.046479362
新数据框的第一行(n_row
并且n_col
是返回数据框的行数和列数base_retorno_diario
)
EWMA_VARIANCE = as.data.frame( base_retorno_diario[1,2:n_col]^2 )
然后我创建了以下循环
i = 2
while(i<=n_row){
EWMA_VARIANCE = rbind(EWMA_VARIANCE,
EWMA_VARIANCE[(i-1), 1:(n_col-1)] * DECAY_FACTOR +
(1-DECAY_FACTOR) * base_retorno_diario[i,2:n_col]^2
)
i=i+1
}
它工作正常,但时间太长(原始数据帧有 3560 个 obs 的 101 个变量),在这种情况下有没有办法避免循环?衰减因子 = 0.97