Risk-based rolling cost assessment (VaR) using R

I need to perform a validating VaR of daily stock returns. First I did the following:

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) 

It performs a calculation and returns a zoo object, but gives a series of warnings as follows:

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

Then I tried the same with my sample data as follows:

 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) 

But this does not return the zoo object and gives the following warnings and errors:

 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 

From an earlier publication ( Using the rollapply function to calculate VaR using R ). I understand that a rolling estimate cannot be performed if the full rolling window is missing, but there are no missing values ​​in my data (sample2.dta).

sample2.dta can be downloaded from https://drive.google.com/file/d/0B8usDJAPeV85WDdDQTFEbGQwaUU/edit?usp=sharing

Can anyone help me solve and understand this problem?

+6
source share
2 answers

1) We can reproduce the warning using only VaR as follows:

 > 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 

Try using a different method= .

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

2) With "gaussian" , I still have warnings on a real data set, but no errors. Try experimenting with other values ​​for the "method" arguments, which are also available. See ?VaR .

3) Note that by.column = TRUE may be omitted since it is the default.

0
source

The problem is that sometimes sometimes there is no change in your data for a 60-period window.

 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 

I made a patch for PerformanceAnalytics on R-Forge (r3525) to allow NaN to pass the reaonableness test.

+1
source

Source: https://habr.com/ru/post/974470/


All Articles