R 大面板数据中的日收益波动率
我有一个大矩阵,它的日收益率格式很宽,我想计算时变窗口中的日波动率[-1;-251] 我使用以下代码: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
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,但我喜欢这个函数的速度。谢谢!