Combinazione di due serie storiche calcolando la media dei punti dati


10

Vorrei combinare il previsto e il backcast (vale a dire i valori passati previsti) di un set di dati di serie temporali in una serie temporale minimizzando l'errore di previsione al quadrato medio.

Supponiamo di avere serie temporali dal 2001 al 2010 con un divario per l'anno 2007. Sono stato in grado di prevedere il 2007 utilizzando i dati 2001-2007 (linea rossa - chiamato ) e di eseguire il backcast utilizzando i dati 2008-2009 (azzurro linea - chiamalo ).Y bYfYB

Vorrei combinare i punti dati di e in un punto dati imputato Y_i per ogni mese. Idealmente mi piacerebbe ottenere il peso tale che riduce al minimo la previsione errore quadratico medio (MSPE) di . Se ciò non fosse possibile, come potrei trovare la media tra i punti dati delle due serie storiche?Y b w Y iYfYBwYio

Yio=wYf+(1-w)YB

A titolo di esempio:

tt_f <- ts(1:12, start = 2007, freq = 12)
tt_b <- ts(10:21, start=2007, freq=12)

tt_f
     Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2007   1   2   3   4   5   6   7   8   9  10  11  12
tt_b
     Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2007  10  11  12  13  14  15  16  17  18  19  20  21

Vorrei ottenere (mostrando solo la media ... Idealmente minimizzando l'MSPE)

tt_i
     Jan Feb Mar Apr May Jun  Jul  Aug  Sep  Oct  Nov  Dec
2007 5.5 6.5 7.5 8.5 9.5 10.5 11.5 12.5 13.5 14.5 15.5 16.5

inserisci qui la descrizione dell'immagine


Qual è il modello di previsione (arima, ets, alcuni altri)? (+1) per il suggerimento sull'approccio, una volta ho pensato a questo modo, ma dopo l'interpolazione sono rimasto in Massimizzazione delle aspettative. In linea di principio, il periodo di apprendimento potrebbe essere importante, per dare il peso maggiore al modello sulla base di informazioni più grandi (previsioni rosse in figura). Alcuni criteri di precisione potrebbero anche essere potenzialmente utili per costruire pesi, per non essere così deterministicamente legati alle lunghezze delle serie temporali.
Dmitrij Celov,

Mi dispiace per aver lasciato fuori il modello di previsione. Quello sopra sta semplicemente usando la predictfunzione del pacchetto di previsione. Tuttavia, penso che userò il modello di previsione di HoltWinters per prevedere e eseguire il backcast. Ho serie temporali con poco meno di 50 conteggi e ho provato a prevedere la regressione di Poisson, ma per qualche ragione su previsioni molto deboli.
OSlOlSO,

I dati per i conteggi sembrano avere un'interruzione esattamente nel punto in cui vengono mostrati, anche le previsioni e i back-cast illustrano la stessa cosa. In Poisson hai fatto regressione del in orario di tendenza t ? log(countS)t
Dmitrij Celov,

Hai solo conteggi o altre serie temporali correlate senza NAvalori? Sembra che rendere il periodo di apprendimento MSPE potrebbe essere fuorviante poiché i sotto-periodi sono ben descritti da tendenze lineari, ma nel periodo mancato si verifica un calo da qualche parte, e in realtà potrebbe essere qualsiasi punto. Si noti inoltre che, poiché le previsioni sono in linea di tendenza, la loro media introdurrà due rotture strutturali anziché apparentemente una.
Dmitrij Celov,

Ci scusiamo solo per tornare ora @Dmitij. Di che "pausa" stai parlando? Ho fatto il registro (conta) per la regressione GLM. E c'è un sottoinsieme dei dati di conteggio che hanno conteggi inferiori a <6 che mi costringeranno ad usarlo. Ho solo i conteggi. Se guardi a questa domanda, avrai un'idea dei dati che ho. I conteggi sopra riportati sono validi solo per il gruppo di età "15up". Se questo ha senso?
OSlOlSO,

Risposte:


0

Supponendo che tu abbia gli errori di previsione al quadrato per la previsione e il backcast singolarmente, consiglierei questo: lascia che sia un vettore di lunghezza 12, sia m il mese che ti interessa.

w=rep(NA,12);
for(w in 1:12){
w[m]=SPE_Backcast[m]/(SPE_Backcast[m]+SPE_Forecast[m]);
}

Ora w è il peso per la previsione e 1-w è il peso per il backcast.


Questo sembra appesantire il valore più basso in modo più elevato (al punto che i numeri negativi possono avere pesi> 1). Qual e il punto? Inoltre, la seconda rigas/w/m/
naught101

Come otterresti errori di previsione al quadrato negativi?
Devo Jessen il

3

t

Y^t: =E(Yt|Y1:r,YS:n)
Yu:v: =[Yu,Yu+1,...,Yv]uvr+1S-1ntY^t|1:r,S:n

Y^tt

αtYtt

αtYt

Almeno nelle versioni moltiplicative, le procedure di previsione "ad hoc" come Holt-Winters si basano su modelli stocastici senza semplici algoritmi FI poiché non possono essere messi in forma SS. La formula di smoothing può probabilmente essere approssimata usando il modello SS, ma è molto più semplice usare i modelli Structural Time Series con trasformazioni di log. Le funzioni "KalmanSmooth", "tsSmooth" e "StructTS" del pacchetto R stats possono fare il lavoro. Dovresti dare un'occhiata ai libri di Harvey o di Durbin e Koopman citati nelle pagine di aiuto di R. L'algoritmo di smoothing può fornire una varianza condizionale per stimatoYte può essere usato per costruire intervalli di livellamento, che di solito tendono ad essere più grandi nel mezzo del gap. Si noti tuttavia che la stima dei modelli strutturali può essere difficile.

AP <- log10(AirPassengers) 
## Fit a Basic Structural Model
fit <- StructTS(AP, type = "BSM")

## Fit with a gap
AP.gap <- AP
AP.gap[73:96] <- NA
fit.gap <- StructTS(AP.gap, type = "BSM", optim.control = list(trace = TRUE))

# plot in orginal (non-logged) scale
plot(AirPassengers, col = "black", ylab = "AirPass")
AP.missing <- ts(AirPassengers[73:96], start=1955, , freq=12)
lines(AP.missing, col = "grey", lwd = 1)

## smooth and sum 'level' and 'sea' to retrieve series
sm <- tsSmooth(fit.gap)
fill <- apply(as.matrix(sm[ , c(1,3)]), 1, sum)
AP.fill <- ts(fill[73:96], start=1955, , freq=12)
lines(10^AP.fill, col = "red", lwd = 1)

Riempimento levigato


2

Trovo interessante il tuo approccio suggerito, quello di prendere i mezzi dei tiranti anteriori e posteriori.

Una cosa che potrebbe valere la pena sottolineare è che in qualsiasi sistema che presenta una struttura caotica è probabile che le previsioni siano più precise su periodi più brevi. Questo non è il caso di tutti i sistemi, ad esempio un pendolo smorzato potrebbe essere modellato da una funzione con il periodo sbagliato, nel qual caso è probabile che tutte le previsioni a medio termine siano sbagliate, mentre quelle a lungo termine saranno tutte molto preciso, poiché il sistema converge a zero. Ma mi sembra, dal grafico nella domanda, che questo potrebbe essere un presupposto ragionevole da fare qui.

Ciò implica che potremmo fare meglio a fare affidamento maggiormente sui dati di previsione per la parte precedente del periodo mancante e di più sui dati di back cast per quest'ultima parte. Il modo più semplice per farlo sarebbe quello di utilizzare un peso lineare in diminuzione per la previsione e l'opposto per il back-cast:

> n <- [number of missing datapoints] 
> w <- seq(1, 0, by = -1/(n+1))[2:(n+1)]

Questo dà un po 'di peso al backcast sul primo elemento. Potresti anche usare n-1, senza i pedici alla fine, se volessi usare solo il valore di previsione sul primo punto interpolato.

> w
 [1] 0.92307692 0.84615385 0.76923077 0.69230769 0.61538462 0.53846154
 [7] 0.46153846 0.38461538 0.30769231 0.23076923 0.15384615 0.07692308

Non ho i tuoi dati, quindi proviamo questo nel set di dati AirPassenger in R. Rimuoverò solo un periodo di due anni vicino al centro:

> APearly <- ts(AirPassengers[1:72], start=1949, freq=12)
> APlate <- ts(AirPassengers[97:144], start=1957, freq=12)
> APmissing <- ts(AirPassengers[73:96], start=1955, freq=12)
> plot(AirPassengers)
# plot the "missing data" for comparison
> lines(APmissing, col="#eeeeee")
# use the HoltWinters algorithm to predict the mean:
> APforecast <- hw(APearly)[2]$mean
> lines(APforecast, col="red")
# HoltWinters doesn't appear to do backcasting, so reverse the ts, forecast, 
# and reverse again (feel free to edit if there's a better process)
> backwards <- ts(rev(APlate), freq=12)
> backcast <- hw(backwards)[2]$mean
> APbackcast <- ts(rev(backcast), start=1955, freq=12)
> lines(APbackcast, col='blue')
# now the magic: 
> n <- 24 
> w <- seq(1, 0, by=-1/(n+1))[2:(n+1)]
> interpolation = APforecast * w + (1 - w) * APbackcast
> lines(interpolation, col='purple', lwd=2)

E c'è la tua interpolazione.

output grafico

Certo, non è perfetto. Immagino sia il risultato del fatto che gli schemi nella parte precedente dei dati sono diversi da quelli dell'ultima parte (il picco di luglio-agosto non è così forte negli anni precedenti). Ma come puoi vedere dall'immagine, è chiaramente meglio della sola previsione o del back casting da solo. Immagino che i tuoi dati possano ottenere risultati leggermente meno affidabili, poiché non c'è una variazione stagionale così forte.

La mia ipotesi sarebbe che potresti provarlo anche con gli intervalli di confidenza, ma non sono sicuro della validità di farlo semplicemente come questo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.