2012-06-18 13 views
5

Uso la funzione accuracy dal pacchetto forecast per calcolare le misure di precisione. Lo sto utilizzando per calcolare le misure per i modelli di serie temporali adattate, come ARIMA o livellamento esponenziale. Mentre sto testando diversi tipi di modelli su diverse dimensioni e livelli di aggregazione, sto usando il MASE, errore medio in scala assoluto, introdotto da Hyndman et al (2006, "Un altro sguardo alle misure di accuratezza delle previsioni"), per confrontare diversi modelli su diversi livelli.Precisione di previsione: no MASE con due vettori come argomenti

Ora sto anche confrontando i modelli con la cronologia delle previsioni. Poiché ho solo i valori di previsione e non i modelli, ho provato a utilizzare la funzione accuracy. Nella funzione descrizione è detto che sia consentito anche fornire due argomenti vettore, una con valori di previsione e uno con effettivi, per calcolare le misure (invece di un modello adattato):

f: Un oggetto della classe "previsione", o un vettore numerico contenente previsioni. Lo standard funzionerà anche con gli oggetti Arima, ets e lm se x viene omesso, nel qual caso vengono restituite le misure di accuratezza nel campione .

x: Un vettore numerico opzionale contenente valori effettivi della stessa lunghezza dell'oggetto .

Ma sono rimasto sorpreso dal fatto che tutte le misure vengono restituite, si aspettano il MASE. Quindi mi stavo chiedendo se qualcuno sa qual è la ragione per questo? Perché il MASE non viene restituito, mentre si usano due vettori come argomenti nella funzione ?

risposta

11

La MASE richiede i dati storici per calcolare il fattore di scala. È non calcolato dai dati futuri come nella risposta di @FBE. Quindi, se non si passano i dati storici a accuracy(), il MASE non può essere calcolato. Ad esempio,

> library(forecast) 
> fcast <- snaive(window(USAccDeaths,end=1977.99)) 
> accuracy(fcast$mean,USAccDeaths) 
     ME  RMSE   MAE   MPE  MAPE  ACF1 
225.1666667 341.1639391 259.5000000 2.4692164 2.8505546 0.3086626 
    Theil's U 
    0.4474491 

Ma se si passa l'intera fcast oggetto (che include i dati storici), si ottiene

> accuracy(fcast,USAccDeaths) 
     ME  RMSE   MAE   MPE  MAPE  MASE 
225.1666667 341.1639391 259.5000000 2.4692164 2.8505546 0.5387310 
     ACF1 Theil's U 
    0.3086626 0.4474491 
+0

È possibile passare oggetti diversi da un oggetto 'forecast' per ottenere la previsione MASE. Ad esempio, voglio usare il pacchetto 'vars' per fare previsioni e calcolare il MASE. Vedi domanda correlata: http://stackoverflow.com/questions/18244506/measuring-var-accuracy-using-accuracy-from-forecast – Harsh

+0

Dr. Hyndman. Grazie per il tuo lavoro nella previsione delle serie temporali.Si prega di valutare la mia risposta per trovare MASE senza utilizzare l'oggetto di classe 'forecast'. Sarebbe bello se potessi inserirlo anche nel tuo pacchetto! –

+0

Dr. Hyndman, è possibile ottenere la metrica di errore MASE per i dati del set di test (formato ts) con dati reali? – mike

0

Per aiutarmi un po ', ho creato una funzione per calcolare il MASE, come descritto da Hyndman e altri in "Un altro sguardo alle misure di accuratezza delle previsioni" (2006).

calculateMASE <- function(f,y) { # f = vector with forecasts, y = vector with actuals 
    if(length(f)!=length(y)){ stop("Vector length is not equal") } 
    n <- length(f) 
    return(mean(abs((y - f)/((1/(n-1)) * sum(abs(y[2:n]-y[1:n-1])))))) 
} 

Per riferimento, si veda:

10

La carta su MASE spiega chiaramente come trovarlo (anche per i non tempo -serie dati)

computeMASE <- function(forecast,train,test,period){ 

    # forecast - forecasted values 
    # train - data used for forecasting .. used to find scaling factor 
    # test - actual data used for finding MASE.. same length as forecast 
    # period - in case of seasonal data.. if not, use 1 

    forecast <- as.vector(forecast) 
    train <- as.vector(train) 
    test <- as.vector(test) 

    n <- length(train) 
    scalingFactor <- sum(abs(train[(period+1):n] - train[1:(n-period)]))/(n-period) 

    et <- abs(test-forecast) 
    qt <- et/scalingFactor 
    meanMASE <- mean(qt) 
    return(meanMASE) 
} 
+0

Questa funzione è molto utile +1 – forecaster

+0

Esiste un modo per utilizzare la funzione nel caso in cui disponga di dati stagionali con più di una stagione? Per esempio. dati giornalieri con un pattern settimanale (7) e uno schema annuale (365). – RandomDude