使用R估计风险滚动值(VaR)

时间:2014-08-28 10:57:29

标签: r performanceanalytics rollapply computational-finance

我需要对每日股票收益进行滚动VaR估计。起初我做了以下事情:

library(PerformanceAnalytics)
data(edhec)
sample<-edhec[,1:5]
var605<-rollapply(as.zoo(sample),width=60,FUN=function(x) VaR(R=x,p=.95,method="modified",invert=T),by.column=TRUE,fill=NA)

它执行计算并返回一个zoo对象,但提供了一系列警告,如下所示:

VaR calculation produces unreliable result (inverse risk) for column: 1 : -0.00030977098532231 

然后,我尝试了同样的数据样本如下:

library(foreign)
sample2 <- read.dta("sample2.dta")
sample2.xts <- xts(sample2[,-1],order.by=as.Date(sample2$datadate,format= "%Y-%m-%d"))
any(is.na(sample2.xts))
var605<-rollapply(as.zoo(sample2.xts),width=60,FUN=function(x) VaR(R=x,p=.95,method="modified",invert=T),by.column=TRUE,fill=NA)

但是不会返回任何动物园对象,并提供以下警告和错误:

VaR calculation produces unreliable result (inverse risk) for column: 1 : -0.0077322590200255
Error in if (eval(tmp < 0)) { : missing value where TRUE/FALSE needed
Called from: top level

从之前的帖子(Using rollapply function for VaR calculation using R)我了解如果缺少完整的滚动窗口,则无法执行滚动估算,但在我的数据(sample2.dta)中没有缺失值。

sample2.dta可以从https://drive.google.com/file/d/0B8usDJAPeV85WDdDQTFEbGQwaUU/edit?usp=sharing

下载

有人可以帮我解决并理解这个问题吗?

2 个答案:

答案 0 :(得分:1)

问题在于,有时60周期窗口的数据没有变化。

R> no_var <- rollapply(sample2.xts, 60, sd, by.column=TRUE)
R> any(no_var==0)
[1] TRUE
R> head(no_var[-(1:60),])
                  001034        001038 001055        001066 001109
1984-03-26 -0.0003322471 -0.0001498238      0 -0.0111818465      0
1984-03-27 -0.0003322471 -0.0001498238      0  0.0002076288      0
1984-03-28 -0.0003322471 -0.0545102488      0  0.0092900768      0
1984-03-29 -0.0199407074 -0.0565552432      0 -0.0183491390      0
1984-03-30  0.0192762133 -0.0023488011      0  0.0000000000      0
1984-04-02 -0.0003322471  0.0000000000      0  0.0560894683      0

我已经在R-Forge(r3525)上为PerformanceAnalytics提交了一个补丁,以允许NaN通过reaonableness检查。

答案 1 :(得分:0)

1)我们只能使用VaR重现警告,如下所示:

> VaR(R = edhec[seq(25, length=60), 5], p = .95, method = "modified", invert = TRUE)
VaR calculation produces unreliable result (inverse risk) for column: 1 : -0.000203691774704274
    Equity Market Neutral
VaR                    NA

尝试使用其他method=

> VaR(R = edhec[seq(25, length=60), 5], p = .95, method = "gaussian", invert = TRUE)
    Equity Market Neutral
VaR          -0.001499347

2) "gaussian"我仍然在实际数据集上收到警告但没有错误。尝试尝试其他可用的"method"参数值。请参阅?VaR

3)请注意by.column = TRUE可以省略,因为它是默认值。