Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 大面板数据中的日收益波动率_R_Loops_Vectorization - Fatal编程技术网

R 大面板数据中的日收益波动率

R 大面板数据中的日收益波动率,r,loops,vectorization,R,Loops,Vectorization,我有一个大矩阵,它的日收益率格式很宽,我想计算时变窗口中的日波动率[-1;-251] 我使用以下代码: n=1000 m=500 ret=matrix(rnorm(n*m,mean=0,sd=1), n, m) vola=matrix(0, n, m) start.time = Sys.time() for (j in 1: ncol(ret)){ for (i in 251:nrow(ret)){ vola[i,j]=sd(ret[(i-1):(i-251+1),j])*sq

我有一个大矩阵,它的日收益率格式很宽,我想计算时变窗口中的日波动率[-1;-251]

我使用以下代码:

n=1000
m=500
ret=matrix(rnorm(n*m,mean=0,sd=1), n, m) 
vola=matrix(0, n, m) 
start.time = Sys.time()

for (j in 1: ncol(ret)){
  for (i in 251:nrow(ret)){
    vola[i,j]=sd(ret[(i-1):(i-251+1),j])*sqrt(251)}
}
end.time = Sys.time()
time.taken = end.time - start.time
time.taken
但是,这需要很长时间:

Time difference of 8.242027 secs
我的原始数据需要15分钟

我发现了以下代码,我认为它执行得更快:

my.rollapply <- function(vec, width, FUN) 
  lapply(1:nrow(vec), 
         function(i) if (i < width) NA else FUN(vec[(i-1):(i-width+1),1]))

my.rollappy在注释上展开

rollappy(…)
非常方便,但不是很快
RccpRoll
包中的code>roll\u sd(…)
要快得多

library(RcppRoll)
df <- as.data.frame(ret)
system.time(result<- sapply(df, function(x) roll_sd(x,n=251)))
#    user  system elapsed 
#    0.94    0.00    0.95 
库(RcppRoll)

df查看包装
RccpRoll
中的
roll\u sd(…)
。这应该更快。它不是基本的R,但我喜欢这个函数的速度。谢谢!