2013-08-15 842 views
6

Próbuję nauczyć się wektora autoregresyjnego modelu używając pakietu vars w R. Ten pakiet nie ma żadnego sposobu zmierzenia dokładności zwracanego modelu.Pomiar dokładności VAR za pomocą dokładności() z prognozy

szczególności chcę użyć Mase zdefiniowane w funkcji accuracy z pakietu forecast w R porównać prognozowanie prognozowanie z VAR z wykorzystaniem modeli ARIMA każdego składnika szeregu czasowego (używam 4 ewentualnie skorelowanych szeregów czasowych). accuracy nie rozpoznaje obiektu varest zwróconego przez. Jak mogę uzyskać MASE dla każdego prognozowanego komponentu? Chcę obliczyć zarówno w próbie i out-of-sample dokładności przykład

kod:

library(vars) 
library(forecast) 
data(Canada) 
v<- VAR(window(Canada, end=c(1998,4)), p=2) 
accuracy(v$varresult[[1]]) 

Argument accuracy jest obiektem lm i zwraca dokładność szkoleniowy dla serii 1, jak:

     ME  RMSE  MAE   MPE  MAPE  MASE 
Training set 1.536303e-15 0.3346096 0.2653946 -1.288309e-05 0.0281736 0.03914555 

chcę uzyskać dokładność testu out-of-sample użyciu coś jak (nie dokładnie to, ponieważ okres prognoza musi być określona):

accuracy(v$varresult[[1]], window(Canada[,1], start=c(1999,1))) 

ale to nie jest obsługiwany przez lm obiektów i zwraca błąd

Error in testaccuracy(f, x, test) : Unknown list structure 

A jeśli mogę użyć wartości bezpośrednio w następujący sposób, nie dostać Mase, który potrzebuje informacji na temat zestawu treningowego. To jest również podatne na błędy off-by-one, ponieważ wartości są używane i nie ts obiektów, dla których accuracy będzie pasował do zapisanych razy bezpośrednio:

p<-predict(v, n.ahead=8) 
accuracy(p$fcst[[1]][,"fcst"],window(Canada[,1], start=c(1999,1))) 

      ME  RMSE  MAE   MPE  MAPE  ACF1 Theil's U 
Test set -0.1058358 0.8585455 0.7385238 -0.01114099 0.07694492 0.5655117 1.359761 

Idealnie chciałabym go pogody jak:

fr<-forecast(v$varresult[[1]], h=8) 

ale to nie może działać, ponieważ potrzebuje drugą serię dla przewidywania i daje:

Error in eval(expr, envir, enclos) : object 'datamat' not found 

i może spróbować skopiować funkcjonalność forecast.Arima itp. I spróbować napisać pakiet forecast.varresult, ale czy istnieje prostsze wyjście?

+0

Proszę podać nam przykład – Metrics

+0

powtarzalną dokładność Funkcja działa teraz z obu prognoz szeregów czasowych i przekrojowych [prognoz] (http://robjhyndman.com/hyndsight/forecast4) – Metrics

+0

Dodałem przykład kodu powyżej – Harsh

Odpowiedz

8

Dlaczego nie spróbujesz przeczytać dokumentacji. Oto co mówi o pierwszy argument, f:

obiekt klasy „prognozy”, lub wektorem zawierającym numerycznej prognozy. Będzie również działać z obiektami Arima, ets i lm, jeśli x zostanie pominięte w przypadku parametru - w takim przypadku zwracane są miary dokładności próbkowania.

VAR nie zwraca obiekt klasy „prognozy”, ale można obliczyć wektor numeryczny zawierający prognozy.

Teraz przeczytaj o drugim argumencie, x.

Opcjonalnie wektor zawierający liczbowej wartości rzeczywistych o tej samej długości jak obiektu, lub serii pokrywania czasu z czasów C.

OK, to całkiem proste. Wystarczy podać rzeczywiste wartości w x i wartości prognozy w f.

Ale to nie daje MASE, ponieważ w dalszej części strony pomocy wyjaśnia, że ​​"Obliczenia MASE są skalowane za pomocą MAE dla naiwnych prognoz w próbie dla niesezonowych szeregów czasowych, sezonowe naiwne prognozy sezonowe dla sezonowe szeregi czasowe i średnie prognozy dla danych niepasujących do szeregów czasowych. " Więc nie może wykonać tych obliczeń bez danych historycznych, a jeśli nie przekazujesz obiektu klasy "prognozy", nie będzie o tym wiedzieć.

Jednak nie jest trudno oszukać go podając to, co chcesz. Oto kod, który to robi:

trainingdata <- window(Canada, end=c(1998,4)) 
testdata <- window(Canada, start=c(1999,1)) 
v <- VAR(trainingdata, p=2) 
p <- predict(v, n.ahead=8) 
res <- residuals(v) 
fits <- fitted(v) 
for(i in 1:4) 
{ 
    fc <- structure(list(mean=p$fcst[[i]][,"fcst"], x=trainingdata[,i], 
    fitted=c(NA,NA,fits[,i])),class="forecast") 
    print(accuracy(fc,testdata[,i])) 
}