2016-07-29 27 views
0

diese monatlichen Daten Siehe:R: Warum bedeutet es, wenn die MASE eines Prognosemodells NaN ist?

tsdata <- structure(c(9.55584, 42.31872, 17.064, 54.26352, 79.51824, 44.3664, 
         82.58976, 129.6864, 70.64496, 102.384, 118.08288, 99.31248, 151.8696, 
         172.68768, 129.34512), .Tsp = c(2015.25, 2016.41666666667, 12 
        ), class = "ts") 

plot(tsdata) 

enter image description here

Dann habe ich spaltete die Serie in Trainings- und Testsätze:

training <- structure(c(9.55584, 42.31872, 17.064, 54.26352, 79.51824, 44.3664, 
         82.58976, 129.6864, 70.64496, 102.384, 118.08288, 99.31248), 
         .Tsp = c(2015.25, 2016.16666666667, 12), class = "ts") 

test <- structure(c(151.8696, 172.68768, 129.34512), .Tsp = c(2016.25, 2016.41666666667, 12), class = "ts") 

Schließlich passe ich ein tbats Modell und berechnen den MASE Wert

require(forecast) 
fit <- tbats(training) 
fcast <- forecast(fit) 
accuracy(fcast, test) 
        ME  RMSE  MAE  MPE  MAPE MASE  ACF1 Theil's U 
Training set -0.9012629 20.02206 16.33986 -22.70125 40.40976 NaN -0.3870826  NA 
Test set  12.3136351 25.58155 24.77819 6.50544 16.14211 NaN -0.2992376 0.860442 

Sie sehen, dass MASE nicht berechnet werden konnte. Alle anderen Modelle aus dem Paket forecast geben auch NaN für MASE aus.

Warum? Die MASE-Metrik ist sehr wichtig für mich und es ist die, die ich für den Vergleich mehrerer Modelle für meine Zeitreihendaten verwenden möchte.

+0

Ich vermute, dass Sie zu wenig Daten für die Skalierung haben –

Antwort

1

Die MASE verwendet einen Skalierungsfaktor, der für die Trainingsdaten berechnet wurde. Bei saisonalen Daten ist der Standard-Skalierungsfaktor der Durchschnitt der absoluten saisonalen Differenzen. Mit nur einem Jahr an Daten können Sie keine saisonalen Unterschiede berechnen, daher ist der Skalierungsfaktor NaN.

Sie könnten einen Skalierungsfaktor stattdessen auf ersten Differenzen basiert wie folgt verwenden:

accuracy(fcast, test, d=1, D=0) 

Aber ich habe gerade bemerkt, dass es einen Fehler in accuracy() ist, das bedeutet, dass die d und D Argumente ignoriert werden. Es ist jetzt behoben und die Version auf Github wird die angegebenen Argumente verwenden.

+0

Was ist die minimale Datengröße, um den Skalierungsfaktor zu berechnen? 2 Jahre für monatliche Daten? – iatowks

+0

Ein mehr als die Länge der Saisonalität. Also 13 für monatliche Daten. –