Скользящие вычисления в 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 )