我想用历史方法计算一个月底的VaR。我的时间序列将从2000年初开始到现在。计算应该开始让我们说在2005年有足够的数据。有一个类似的帖子rolling computations in xts by month,我试图修改我的案例的代码。每个月末的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)
首先,我的代码中存在很大的错误。宽度应该是多少?是否也可以将输出作为zoo对象?我是一个有这种功能的初学者...当我不想使用历史方法而是使用高斯方法时我会使用:
apply.monthly(as.xts(ldr_sp500), VaR, method="gaussian")
看起来这种情况在非重叠期间工作正常......
答案 0 :(得分: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 )