Probleme mit der Vorhersage von Zeitreihen

8

Ich habe eine Frage zur Modellierung von Zeitreihen in R. Meine Daten bestehen aus der folgenden Matrix:

1   0.03333333 0.01111111 0.9555556
2   0.03810624 0.02309469 0.9387991
3   0.00000000 0.03846154 0.9615385
4   0.03776683 0.03119869 0.9310345
5   0.06606607 0.01201201 0.9219219
6   0.03900325 0.02058505 0.9404117
7   0.03125000 0.01562500 0.9531250
8   0.00000000 0.00000000 1.0000000
9   0.04927885 0.01802885 0.9326923
10  0.06106870 0.02290076 0.9160305
11  0.03846154 0.00000000 0.9615385
12  0.00000000 0.00000000 1.0000000
13  0.06028636 0.03843256 0.9012811
14  0.09646302 0.05144695 0.8520900
15  0.04444444 0.06666667 0.8888889

Diese Matrix hat insgesamt 200 Zeilen.

Wie Sie in jeder Situation sehen können, ist die Summe jeder Zeile 1, was darauf zurückzuführen ist, dass die Werte der Prozentsatz eines Ganzen sind. Zum Beispiel enthält Zeile 1 3,33% der Variablen a, 1,11% der Variablen 2 und 95,5% der verifizierbaren 3. Die erste Kollomne gibt das Jahr an, in dem die Werte gemessen werden.

Mein Ziel ist es, eine Vorhersage für die nächsten 5 Jahre zu machen, also von Jahr 200 bis 205.

Ich kann das tun, indem ich drei normale Zeitreihen prognostiziere. Für diese Prognose ist die Gesamtsumme jedoch niemals gleich 1, was sehr wichtig ist. Normalerweise werden Techniken wie Arima und exponentielle Glättung verwendet.

Kennt jemand eine Methode, um eine Prognose für ein solches Problem zu erstellen?

Karmabob
quelle
Wissen Sie, ob dies diskrete Proportionen (z. B. Anzahl der Einheiten in den Kategorien A, B und C bei einer Gesamtzahl von Einheiten) oder kontinuierliche Proportionen sind? Wenn sie diskret sind, kennen Sie die Gesamtzahl der Einheiten zu jedem Zeitpunkt?
Gung - Reinstate Monica
Ja, diese Werte stammen aus diskreten Einheiten. Ich habe diese Verhältnisse unter Verwendung der Gesamtzahlen berechnet.
Karmabob

Antworten:

8

Sie versuchen, eine kompositorische Zeitreihe vorherzusagen. Das heißt, Sie haben drei Komponenten, die alle zwischen 0 und 1 liegen und sich zu 1 addieren müssen.

Sie können dieses Problem mithilfe der standardmäßigen exponentiellen Glättung mithilfe einer geeigneten verallgemeinerten logistischen Transformation beheben. Auf dem Internationalen Symposium für Prognosen 2010 gab es eine Präsentation von Koehler, Snyder, Ord & Beaumont , die sich in ein Papier verwandelte ( Snyder et al., 2017, International Journal of Forecasting ).

Lassen Sie uns dies mit Ihren Daten durchgehen. Lesen Sie die Daten in eine Matrix obsvon Zeitreihen:

obs <- structure(c(0.03333333, 0.03810624, 0, 0.03776683, 0.06606607, 
0.03900325, 0.03125, 0, 0.04927885, 0.0610687, 0.03846154, 0, 
0.06028636, 0.09646302, 0.04444444, 0.01111111, 0.02309469, 0.03846154, 
0.03119869, 0.01201201, 0.02058505, 0.015625, 0, 0.01802885, 
0.02290076, 0, 0, 0.03843256, 0.05144695, 0.06666667, 0.9555556, 
0.9387991, 0.9615385, 0.9310345, 0.9219219, 0.9404117, 0.953125, 
1, 0.9326923, 0.9160305, 0.9615385, 1, 0.9012811, 0.85209, 0.8888889
), .Dim = c(15L, 3L), .Dimnames = list(NULL, c("Series 1", "Series 2", 
"Series 3")), .Tsp = c(1, 15, 1), class = c("mts", "ts", "matrix"
))

Sie können überprüfen, ob dies funktioniert hat, indem Sie tippen

obs

Jetzt haben Sie ein paar Nullen, was ein Problem sein wird, wenn Sie Logarithmen nehmen. Eine einfache Lösung besteht darin, alles, was weniger als ein kleines auf dieses :ϵϵ

epsilon <- 0.0001
obs[obs<epsilon] <- epsilon

Jetzt summieren sich die geänderten Zeilen nicht mehr zu 1. Wir können das korrigieren (obwohl ich denke, dass dies die Prognose verschlechtern könnte):

obs <- obs/matrix(rowSums(obs),nrow=nrow(obs),ncol=ncol(obs),byrow=FALSE)

Jetzt transformieren wir die Daten gemäß Seite 35 der Präsentation:

zz <- log(obs[,-ncol(obs)]/obs[,ncol(obs)])
colnames(zz) <- head(colnames(obs),-1)
zz

Laden Sie das forecastPaket und legen Sie einen Horizont von 5 Zeitpunkten fest:

library(forecast)
horizon <- 5

Modellieren und prognostizieren Sie nun die transformierten Daten spaltenweise. Hier rufe ich einfach an ets(), was versuchen wird, ein exponentielles Glättungsmodell für den Zustandsraum anzupassen. Es stellt sich heraus, dass für alle drei Serien eine einzige exponentielle Glättung verwendet wird. Insbesondere wenn Sie jedoch mehr als 15 Zeiträume haben, werden möglicherweise Trendmodelle ausgewählt. Oder wenn Sie monatliche Daten haben, erklären Sie R, dass Sie eine potenzielle Saisonalität haben, indem Sie ts()mit frequency=12- verwenden. Dann ets()werden saisonale Modelle betrachtet.

baz <- apply(zz,2,function(xx)forecast(ets(xx),horizon=horizon)["mean"])
forecasts.transformed <- cbind(baz[[1]]$mean,baz[[2]]$mean)

Als nächstes transformieren wir die Prognosen gemäß Seite 38 der Präsentation zurück:

forecasts <- cbind(exp(forecasts.transformed),1)/(1+rowSums(exp(forecasts.transformed)))

Lassen Sie uns abschließend Geschichten und Prognosen zeichnen:

plot(obs[,1],ylim=c(0,1),xlim=c(1,nrow(obs)+horizon),type="n",ylab="")
for ( ii in 1:ncol(obs) ) {
    lines(obs[,ii],type="o",pch=19,col=ii)
    lines(forecasts[,ii],type="o",pch=21,col=ii,lty=2)
}
legend("left",inset=.01,lwd=1,col=1:ncol(obs),pch=19,legend=colnames(obs))

Kompositionsprognosen

EDIT: Ein Artikel über die Vorhersage kompositorischer Zeitreihen ist gerade erschienen. Ich habe es nicht gelesen, aber es könnte von Interesse sein.

Stephan Kolassa
quelle
Danke @stephan Kolassa, genau das meine ich. Weiß jemand, ob es in R ein Toolpack gibt, um eine Prognose mit kompositorischen Zeitreihen zu erstellen?
Karmabob
Ich glaube nicht, und diese Autoren gehören nicht zu den Leuten, die "immer ein Begleit-R-Paket an eine Veröffentlichung schreiben". Ihr Ansatz ist jedoch ziemlich einfach und sollte nicht mehr als fünf Zeilen erfordern, um Ihre Zeitreihen vorzuverarbeiten. Danach können Sie die Standardwerkzeuge verwenden (z. B. ets()im forecastPaket für die exponentielle Glättung des Zustandsraums).
Stephan Kolassa
Meine mathematischen Kenntnisse sind nicht so gut. Können Sie vielleicht bei der Vorverarbeitung der Daten helfen? Wenn die Daten im richtigen Format sind, kann ich den Prognoseprozess durchführen.
Karmabob
Ich bin gewandert, wenn Sie etwas Zeit gefunden haben, um mir bei dem Problem zu helfen, das ich mit der kompositorischen Zeitreihe hatte?
Karmabob
Bitte schön. Entschuldigung, es hat eine Weile gedauert. Ich hatte tatsächlich Probleme, die Präsentation zu verstehen, und musste meinen Kopf frei machen.
Stephan Kolassa