Скорректированная Реализованная Волатильность
Предположим, что это возвраты (1000 строк):
1-a
2-b
3-c
Я хочу рассчитать скорректированную волатильность: отбросьте первую доходность, рассчитайте реализованную волатильность, затем отбросьте вторую и рассчитайте реализованную волатильность и т. Д. Если у вас есть n возвратов, у вас будет n реализованной волатильности.
Volatility1 = b*b+c*c
Volatility2 = a*a+c*c
Volatility3 = a*a+b*b
Я могу справиться с этим для цикла, но есть ли другой способ?
2 ответа
Решение
Вы можете эффективно рассчитать это путем sum(x*x)-x*x
#dummy data
x <- rnorm(1000)
#vectorized
f1 <- function(x) sum(x*x)-x*x
#for loop
f2 <- function(x){
n <- length(x)
rv <- rep(NA, n)
s <- x*x
for(i in 1:n)
{rv[i]=sum(s[-i])}
rv
}
rbenchmark::benchmark(f1(x), f2(x))[1:3]
test replications elapsed
1 f1(x) 100 0.0
2 f2(x) 100 3.1
Имеет ли это смысл? Возможно, функция неправильна, но структура, кажется, работает.
Является ли волатильность стандартным отклонением?
x <- rnorm(1000, sd=2)
vol <- sapply(2:length(x), function(i) {
sd(x[0:i])
})