2016-06-30 26 views
0

Ich versuche, die Volatilität einiger Aktien mit verschiedenen Modellen (z. B. AR, HAR etc.) zu prognostizieren. Jetzt bin ich an einem Punkt, wo ich nicht weiß, wie ich vorgehen soll. Mein Problem ist das Folgende. Ich versuche die Volatilität mit einem ARFIMA (2, d, 0) -Modell und einem externen Regressor zu prognostizieren. Ich benutze das Paket rugarch und den Befehl arfimaroll. Hier ist der Code für die ARFIMA-Spezifikation.arfimaroll und externe Regressor

specGT<- arfimaspec(mean.model = list(armaOrder = c(2, 0),arfima=T, external.regressors = TGT)) 

TGT ist der externe Regressor. Es ist eine Matrix mit 1 Spalte und 1359 Zeilen (die gleiche Anzahl von Zeilen wie mein Datensatz). Dieser Code funktioniert (zumindest keine Fehler). Nun möchte ich mit ARFIMAROLL die Volatilität vorhersagen. Hier ist der Code

forecastarfimaGT<-arfimaroll(specGT,lagRV_d,n.ahead=1,n.start=1014,refit.every=1,refit.window="recursive",solver="hybrid") 

Dies gibt auch keine Fehler. Aber wenn ich die Prognosen aus dem Modell mit dem externen Regressor- mit denen aus dem gleichen ARFIMA Modell ohne externen Regressor- vergleiche es gibt mir die gleichen Werte

forecastarfimaGT==forecastarfimarealized 

Ausgang bei jedem der 345 Vorhersage Punkte TRUE ist.

Einige Anmerkungen zur Vorhersage. refit.window = "recursive" wird verwendet, um eine erweiterte Fensterprognose durchzuführen, die anderen Argumente sollten nicht wichtig sein (wie refit.every usw.).

Jetzt ist meine Frage, was ich hier falsch mache. Kann mir jemand einen Hinweis auf meinen Fehler geben?

Grüße

EDIT: Um es hier ein fiktives Beispiel deutlicher zu machen. Zunächst läßt eine Zeitreihe machen mit den Daten

a<-abs(rnorm(600,0.1,0.1) 

Dann einen Vektor des externen Regressor- machen und es in eine Matrix-Transformation

b<-abs(rnorm(600,1,1)) 
b1<-as.matrix(b,nrow=600,ncol=1) 

nun die arfima Prognose ohne externen Regressor-

spec<- arfimaspec(mean.model = list(armaOrder = c(2, 0),arfima=T)) 
forecastarfima<-arfimaroll(spec,a,n.ahead=1,n.start=500,refit.every=1,refit.window="recursive",solver="hybrid" 
forecastarfimadf<-as.data.frame(forecastarfima) 
forecastarfimarealized<-forecastarfimadf[,-c(1:5)] 

Die Prognose mit dem Externen Regressor

specGT<- arfimaspec(mean.model = list(armaOrder = c(2, 0),arfima=T, external.regressors = b1)) 
forecastarfimaGT<-arfimaroll(specGT,a,n.ahead=1,n.start=500,refit.every=1,refit.window="recursive",solver="hybrid" 
forecastarfimaGTdf<-as.data.frame(forecastarfimaGT) 
forecastarfimarealizedGT<-forecastarfimaGTdf[,-c(1:5)] 
Jetzt

lässt die beiden Ergebnisse

forecastarfimarealized==forecastarfimarealizedGT 
    [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE 
[37] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE 
[73] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE 

vergleichen Wie Sie Stand Vektoren identisch sind sehen. Dies sollte nicht der Fall sein. Auch wenn der externe Regressor keinen Einfluss hat, sollten die Vektoren nicht exakt gleich sein. Ich bin gerade sehr verwirrt. Benutze ich die richtige Methode? Kannst du mir bei meinem Problem helfen?

Antwort

0

Das liegt daran, dass Sie auf die Original-Serie suchen:

cbind(forecastarfimarealized,forecastarfimarealizedGT,a[501:600]) 

Blick auf "Mu". Versuchen Sie stattdessen:

cbind(forecastarfimadf[,c(6,1)],forecastarfimaGTdf[,1]) 
plot.ts(cbind(forecastarfimadf[,c(6,1)],forecastarfimaGTdf[,1]),plot.type="single",col=2:4,ylab="x") 
legend("top",c("realized","forecast x","forecast x+GT"),lty=1,col=2:4,bty ="n") 

Sind Sie sicher, dass Sie Volatilität modellieren? Vielleicht müssen Sie sich dafür "Sigma" ansehen. Warum nicht Garch und seine Familie benutzen?