Скользящие вычисления в xts по месяцам part2

Я хочу рассчитать VaR в конце месяца историческим методом. Мой временной ряд начнется в начале 2000 года и до сих пор. Расчет должен начаться, скажем, в 2005 году, чтобы иметь достаточно данных. В xts по месяцам происходят похожие вычисления, и я попытался изменить код для моего случая. VaR в конце каждого месяца должен использовать прошлые данные.

Вот мой код (здесь он начинается в 2012 году, потому что в противном случае это займет много времени):

library(quantmod)
getSymbols("^GSPC",return.class = "zoo",from = "2012-01-01",to = Sys.Date())
sp500 <- Ad(GSPC)
ldr_sp500 <- Return.calculate(sp500, method = "log")
ldr_sp500 <- na.omit(ldr_sp500)
idx <- index(ldr_sp500)[endpoints(ldr_sp500, 'months')]
out <- lapply(idx, function(i) {
    as.xts(rollapplyr(as.zoo(ldr_sp500), 30, VaR))
})
sapply(out, NROW)

Прежде всего, в моем коде есть большая ошибка. Какой должна быть ширина? Можно ли также выдать результат в виде объекта зоопарка? Я начинающий с такого рода функциями... Когда я не хочу использовать исторический метод, я бы использовал метод Гаусса:

apply.monthly(as.xts(ldr_sp500), VaR, method="gaussian")

Кажется, это работает нормально с не перекрывающимися периодами...

1 ответ

Решение

В вашем коде функция в lapply не использует свой аргумент i: вы вычисляете одно и то же (VaR для каждого дня в периоде) снова и снова.

Кроме того, метод по умолчанию для VaR является modified: нужно указать method="historical",

Если вы хотите рассчитать значение риска из ежедневных доходов текущего месяца, ваше предложение использовать apply.monthly на самом деле работает:

apply.monthly(ldr_sp500, VaR, method="historical")

Если вы хотите расширить окно:

library(quantmod)
library(PerformanceAnalytics)
getSymbols("^GSPC", from = "2012-01-01" )
x <- Return.calculate( Ad(GSPC), method = "log" )
idx <- index(x)[endpoints(x, 'months')]
result <- sapply( idx,
  function(i) VaR( x[paste0("/",i)], method = "historical" )
)
xts( result, idx )
Другие вопросы по тегам