2014-08-28 10 views
6

Мне необходимо выполнить оценку вализинга валовой стоимости ежедневных запасов акций. Сначала я сделал следующее:Оценка стоимости прокатки при риске (VaR) с использованием R

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) 

Он выполняет вычисления и возвращает объект зоопарка, но дает ряд предупреждений следующим образом:

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

Может кто-нибудь, пожалуйста, помогите мне решить и понять этот вопрос?

ответ

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 может быть опущен, поскольку он является значением по умолчанию.

+0

Мне нужно использовать модифицированный VaR, поскольку он учитывает асимметрию и эксцесс как дополнительные параметры при оценке VaR. Реальная проблема возникает, когда выполняется оценка скорости, как объясняется в вопросе. –

+0

Попробуйте заменить 'function (x) VaR (...)' на 'function (x) {out <- try (VaR (...)); if (inherits (out, "try-error")) NA else out} ', чтобы избежать остановки с ошибкой. –

+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 

я совершил патч к PerformanceAnalytics на R-Фордж (r3525), чтобы позволить NaN пройти через проверку reaonableness.

+0

Большое спасибо за объяснение. –