在R中的矩阵中滚动标准偏差 [英] Rolling Standard Deviation in a Matrix in R
问题描述
Bellow是股票每日收益矩阵示例( ret_matriz )
Bellow is a stock daily returns matrix example (ret_matriz)
IBOV PETR4 VALE5 ITUB4 BBDC4 PETR3
[1,] -0.040630825 -0.027795652 -0.052643733 -0.053488685 -0.048455772 -0.061668282
[2,] -0.030463489 -0.031010237 -0.047439725 -0.040229625 -0.030552275 -0.010409016
[3,] -0.022668170 -0.027012078 -0.022668170 -0.050372843 -0.080732363 0.005218051
[4,] -0.057468428 -0.074922051 -0.068414670 -0.044130126 -0.069032911 -0.057468428
[5,] 0.011897277 -0.004705891 0.035489885 -0.005934736 -0.006024115 -0.055017693
[6,] 0.020190656 0.038339130 0.009715552 0.014771317 0.023881732 0.011714308
[7,] -0.007047191 0.004529286 0.004135085 0.017442303 -0.005917177 -0.007047191
[8,] -0.022650593 -0.029481336 -0.019445057 -0.017442303 -0.011940440 -0.046076458
[9,] 0.033137223 0.035274722 0.038519205 0.060452104 0.017857617 0.046076458
出于示例目的,考虑一个5天的移动窗口,因此我想要一个如下所述的新矩阵:
For example purposes consider a 5 day moving window, i want as a result a new matrix as described bellow :
IBOV PETR4 ...
[1,] 0 0 ...
[2,] 0 0 ...
[3,] 0 0 ...
[4,] 0 0 ...
[5,] sd[1:5,1] sd[1:5,2] ...
[6,] sd[2:6,1] sd[2:6,2] ...
[7,] sd[3:7,1] sd[3:7,2] ...
[8,] sd[4:8,1] sd[4:8,2] ...
[9,] sd[5:9,1] sd[5:9,2] ...
使用zoo包我可以达到结果,但是有点慢,是否有任何关于如何提高达到相同结果速度的想法?
Using the zoo package i was able to reach the result but it is a little bit slow, any ideias on how to improve the speed to reach the same result ?
以下代码:
require(zoo)
apply(ret_matriz, 2, function(x) rollapply(x, width = 5, FUN = sd, fill = 0, align = 'r'))
推荐答案
1)可以删除apply
部分.为了简洁起见,我们还使用rollapplyr
:
1) The apply
part can be eliminated. We also use rollapplyr
for brevity:
rollapplyr(ret_matriz, 5, sd, fill = 0)
2)另外,rollmean
比rollapply
快,因此我们可以使用公式sd = sqrt(n/(n-1) * (mean(x^2) - mean(x)^2))
从其构建:
2) Also rollmean
is faster than rollapply
so we could construct it from that using the formula sd = sqrt(n/(n-1) * (mean(x^2) - mean(x)^2))
:
sqrt((5/4) * (rollmeanr(ret_matriz^2, 5, fill = 0) -
rollmeanr(ret_matriz, 5, fill = 0)^2))
这篇关于在R中的矩阵中滚动标准偏差的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!