Kombinieren von zwei Zeitreihen durch Mitteln der Datenpunkte

10

Ich möchte die prognostizierten und zurückgesendeten (dh die vorhergesagten vergangenen Werte) eines Zeitreihendatensatzes zu einer Zeitreihe kombinieren, indem ich den mittleren quadratischen Vorhersagefehler minimiere.

Angenommen, ich habe Zeitreihen von 2001 bis 2010 mit einer Lücke für das Jahr 2007. Ich konnte 2007 anhand der Daten von 2001 bis 2007 (rote Linie - ) und mithilfe der Daten von 2008 bis 2009 (hellblau) zurücksenden line - nenne es ).Y bYfYb

Ich mag die Datenpunkte kombinieren und in einen kalkulatorischen Datenpunkt Y_i für jeden Monat. Idealerweise möchte ich das Gewicht so erhalten, dass es den mittleren quadratischen Vorhersagefehler (MSPE) von . Wenn dies nicht möglich ist, wie würde ich nur den Durchschnitt zwischen den Datenpunkten der beiden Zeitreihen ermitteln?Y b w Y iYfYbwYi

Yi=wYf+(1w)Yb

Als schnelles Beispiel:

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

Ich würde gerne bekommen (nur die Mittelung anzeigen ... Idealerweise die MSPE minimieren)

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

Geben Sie hier die Bildbeschreibung ein

OSlOlSO
quelle
Was ist das Prognosemodell (arima, ets, einige andere)? (+1) Für den Ansatzvorschlag habe ich einmal darüber nachgedacht, bin aber nach der Interpolation innerhalb der Erwartungsmaximierung geblieben. Grundsätzlich könnte die Lernperiode von Bedeutung sein, um das höhere Gewicht für das Modell basierend auf größeren Informationen zu erhalten (rote Prognose im Bild). Einige Genauigkeitskriterien könnten möglicherweise auch nützlich sein, um Gewichte zu erstellen, die nicht so deterministisch mit den Zeitreihenlängen verknüpft sind.
Dmitrij Celov
Es tut uns leid, dass Sie das Prognosemodell weggelassen haben. Das obige verwendet einfach die predictFunktion des Prognosepakets. Ich denke jedoch, dass ich das HoltWinters-Prognosemodell verwenden werde, um Vorhersagen und Backcasts zu treffen. Ich habe Zeitreihen mit kleinen <50 Zählungen und habe Poisson-Regressionsprognosen ausprobiert - aber aus irgendeinem Grund zu sehr schwachen Vorhersagen.
OSlOlSO
Die Daten für die Zählungen scheinen genau an der Stelle, an der Sie sie anzeigen, eine Unterbrechung zu haben. Die Prognosen und Rückschläge veranschaulichen dasselbe. In Poisson haben Sie eine Regression von auf den Zeittrend ? log(counts)t
Dmitrij Celov
Haben Sie nur Zählungen oder zusätzliche verwandte Zeitreihen ohne NAWerte? Es scheint, dass es irreführend sein könnte, eine Lernperiode MSPE zu machen, da die Unterperioden durch lineare Tendenzen gut beschrieben werden, aber in der versäumten Periode tritt irgendwo ein Abfall auf, und es könnte tatsächlich jeder Punkt sein. Da die Prognosen im Trend kollinear sind, führt ihr Durchschnitt zu zwei Strukturbrüchen anstelle von scheinbar einem.
Dmitrij Celov
Tut mir leid, dass ich jetzt nur @Dmitij zurück bin. Was ist das für eine Pause, von der du sprichst? Ich habe das Protokoll (Zählungen) für die GLM-Regression erstellt. Und es gibt eine Teilmenge der Zähldaten mit einer Anzahl von weniger als <6, die mich zwingen wird, sie zu verwenden. Ich habe nur die Zählungen. Wenn Sie sich diese Frage ansehen , erhalten Sie eine Vorstellung von den Daten, die ich habe. Die oben genannten Zählungen gelten nur für die Altersgruppe '15up'. Ob das Sinn macht?
OSlOlSO

Antworten:

0

Angenommen, Sie haben die quadratischen Vorhersagefehler für die Prognose und den Backcast einzeln, würde ich Folgendes empfehlen: Sei w ein Vektor der Länge 12, sei m der Monat, an dem Sie interessiert sind.

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

Jetzt ist w das Gewicht für die Vorhersage und 1-w ist das Gewicht für den Backcast.

Dennis Jaheruddin
quelle
Dies scheint nur den niedrigsten Wert höher zu gewichten (bis zu dem Punkt, dass negative Zahlen Gewichte> 1 haben können). Was ist der Sinn? Auch Zeile zweis/w/m/
naught101
Wie würden Sie negative quadratische Vorhersagefehler erhalten?
Owe Jessen
3

Ihr Ziel ist es, eine Glättung der Zeitreihen mit festem Intervall (FI) durchzuführen . Der geglättete Wert der Beobachtung zum Zeitpunkt ist definiert als eine bedingte Erwartung wobei die Notation für die Vektor der Beobachtungen von Zeit bis Zeit . Oben wird angenommen, dass die Lücke das Intervall ist, das von der Zeit bis , und ist die Länge der gesamten Reihe. Die Zeit ist in der Lücke und die Erwartung könnte geschrieben werdent

Y^t:=E(Yt|Y1:r,Ys:n)
u v r + 1 s - 1 n t Y t | 1 : r , s : nYu:v:=[Yu,Yu+1,,Yv]uvr+1s1ntY^t|1:r,s:n sich an seine bedingte Natur erinnern.

Der geglättete Wert hat nicht die einfache Form, die Sie erraten. Für eine stationäre Gaußsche Zeitreihe mit bekannter Kovarianzstruktur kann das geschätzte für in der Lücke durch Lösen eines linearen Systems gefunden werden. tY^tt

Wenn das Zeitreihenmodell in Form eines Zustandsraums (SS) gebracht werden kann, ist die FI-Glättung eine Standardoperation, die auf Kalman-Filterung basiert, und kann beispielsweise unter Verwendung verfügbarer R-Funktionen durchgeführt werden. Sie müssen lediglich angeben, dass die Werte in der Lücke fehlen. Der Glättungsalgorithmus schätzt den verborgenen Zustand der alle relevanten Informationen über für in der Lücke enthält. ARIMA-Modelle können in SS-Form gebracht werden.Y t tαtYtt

Interessanterweise kann die FI-Glättung als eine Kombination von zwei Filtern geschrieben werden: einer vorwärts und einer rückwärts, was zu einer Formel der erwarteten Art führt, jedoch für die Schätzung des verborgenen Zustands (Prognose und Backcast). aber nicht für die Beobachtung . Dies ist als Rauch-Tung-Striebel-Filterung bekannt .Y tαtYt

Zumindest in den multiplikativen Versionen basieren Ad-hoc-Prognoseverfahren wie Holt-Winters auf stochastischen Modellen ohne einfache FI-Algorithmen, da sie nicht in SS-Form gebracht werden können. Die Glättungsformel kann wahrscheinlich mithilfe des SS-Modells angenähert werden, es ist jedoch viel einfacher, strukturelle Zeitreihenmodelle mit Protokolltransformationen zu verwenden. Die Funktionen 'KalmanSmooth', 'tsSmooth' und 'StructTS' des R- Statistikpakets können diese Aufgabe übernehmen. Sie sollten sich die Bücher von Harvey oder von Durbin und Koopman ansehen, die auf den R-Hilfeseiten zitiert sind. Der Glättungsalgorithmus kann eine bedingte Varianz für das geschätzte bereitstellenYtund kann verwendet werden, um Glättungsintervalle aufzubauen, die normalerweise in der Mitte des Spaltes größer sind. Beachten Sie jedoch, dass die Schätzung von Strukturmodellen schwierig sein kann.

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)

Geglättete Füllung

Yves
quelle
2

Ich finde Ihren vorgeschlagenen Ansatz, die Mittel der Vor- und Rückwürfe zu nutzen, interessant.

Eine Sache, auf die hingewiesen werden sollte, ist, dass in jedem System mit chaotischer Struktur die Vorhersagen über kürzere Zeiträume wahrscheinlich genauer sind. Dies ist nicht bei allen Systemen der Fall. Beispielsweise könnte ein gedämpftes Pendel durch eine Funktion mit der falschen Periode modelliert werden. In diesem Fall sind wahrscheinlich alle mittelfristigen Prognosen falsch, während die langfristigen Prognosen alle falsch sein werden sehr genau, da das System gegen Null konvergiert. Aus der Grafik in der Frage geht jedoch hervor, dass dies eine vernünftige Annahme sein könnte.

Dies bedeutet, dass wir uns möglicherweise besser auf die Prognosedaten für den früheren Teil des fehlenden Zeitraums und mehr auf die Backcast-Daten für den letzten Teil verlassen sollten. Der einfachste Weg, dies zu tun, wäre die Verwendung eines linear abnehmenden Gewichts für die Prognose und das Gegenteil für die Rückbesetzung:

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

Dies gibt ein wenig Gewicht des Rückschlags auf das erste Element. Sie können auch n-1 ohne die Indizes am Ende verwenden, wenn Sie nur den Prognosewert für den ersten interpolierten Punkt verwenden möchten.

> 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

Ich habe Ihre Daten nicht, also versuchen wir es mit dem AirPassenger-Datensatz in R. Ich werde nur einen Zeitraum von zwei Jahren in der Nähe des Zentrums entfernen:

> 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)

Und da ist deine Interpolation.

Grafikausgabe

Natürlich ist es nicht perfekt. Ich denke, das liegt daran, dass sich die Muster im früheren Teil der Daten von denen im letzten Teil unterscheiden (der Jul-Aug-Peak ist in früheren Jahren nicht so stark). Aber wie Sie auf dem Bild sehen können, ist es eindeutig besser als nur die Vorhersage oder das Backcasting allein. Ich würde mir vorstellen, dass Ihre Daten möglicherweise etwas weniger verlässliche Ergebnisse liefern, da es keine so starken saisonalen Schwankungen gibt.

Meine Vermutung wäre, dass Sie dies auch einschließlich der Konfidenzintervalle versuchen könnten, aber ich bin mir nicht sicher, ob es so einfach ist, dies zu tun.

naught101
quelle