Problemas con la predicción de series de tiempo

8

Tengo una pregunta sobre el modelado de series de tiempo en R. Mis datos consisten en la siguiente matriz:

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

Estas matrices tienen en total 200 filas.

Como puede ver en cada situación, la suma de cada fila es 1, que se convierte en porque los valores son el porcentaje de un todo. por ejemplo, la fila 1 contiene 3.33% de la variable a, 1.11% de la variable 2 y 95.5% de la verificable 3. la primera collomn indica el año en que se miden los valores.

mi objetivo es hacer una predicción para los próximos 5 años, por lo tanto, del año 200 al 205.

Puedo hacerlo haciendo tres pronósticos de series temporales normales. Pero para ese pronóstico, la suma total nunca es igual a 1, lo cual es muy importante. Normalmente se utilizan técnicas como arima y suavizado exponencial.

¿Alguien conoce un método para hacer un pronóstico para tal problema?

karmabob
fuente
¿Sabe si se trata de proporciones discretas (por ejemplo, número de unidades en las categorías A, B y C, dado un número total de unidades) o proporciones continuas? Si son discretos, ¿conoce el número total de unidades en cada punto de tiempo?
gung - Restablecer Monica
Sí, estos valores provienen de unidades discretas, calculé estas proporciones con el uso de los números totales.
karmabob

Respuestas:

8

Está intentando pronosticar una serie de tiempo de composición . Es decir, tiene tres componentes que están limitados a estar entre 0 y 1 y sumar 1.

Puede abordar este problema utilizando el suavizado exponencial estándar, utilizando una transformación logística generalizada adecuada. Hubo una presentación sobre esto por parte de Koehler, Snyder, Ord & Beaumont en el Simposio Internacional de Pronóstico 2010 , que se convirtió en un documento ( Snyder et al., 2017, International Journal of Forecasting ).

Pasemos por esto con sus datos. Lea los datos en una matriz obsde series de tiempo:

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

Puede verificar si esto funcionó escribiendo

obs

Ahora, tiene algunos ceros allí, lo que será un problema una vez que tome los logaritmos. Una solución simple es configurar todo lo que sea menos que un pequeño en ese :ϵϵ

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

Ahora las filas modificadas ya no suman 1. Podemos rectificar eso (aunque creo que esto podría empeorar el pronóstico):

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

Ahora transformamos los datos según la página 35 de la presentación:

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

Cargue el forecastpaquete y establezca un horizonte de 5 puntos de tiempo:

library(forecast)
horizon <- 5

Ahora modele y pronostique los datos transformados columna por columna. Aquí simplemente estoy llamando ets(), que intentará ajustar un modelo de suavizado exponencial de espacio de estado. Resulta que utiliza un suavizado exponencial único para las tres series, pero especialmente si tiene más de 15 períodos de tiempo, puede seleccionar modelos de tendencia. O si tiene datos mensuales, explique a R que tiene una estacionalidad potencial, al usar ts()con frequency=12- luego ets()verá modelos estacionales.

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

A continuación, transformamos los pronósticos según la página 38 de la presentación:

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

Finalmente, tracemos historias y pronósticos:

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

pronósticos de composición

EDITAR: acaba de aparecer un documento sobre pronósticos de series de tiempo de composición . No lo he leído, pero puede ser de interés.

Stephan Kolassa
fuente
Gracias @stephan Kolassa, eso es exactamente lo que quiero decir. ¿Alguien sabe si hay un paquete de herramientas en R para hacer un pronóstico con series de tiempo de composición?
karmabob
No lo creo, y estos autores no se encuentran entre las personas "siempre escriben un paquete R complementario para cualquier publicación". Pero su enfoque es bastante simple y no debería requerir más de cinco líneas para preprocesar su serie de tiempo, después de lo cual puede usar las herramientas estándar (por ejemplo, ets()en el forecastpaquete para el suavizado exponencial del espacio de estado).
Stephan Kolassa
Mi conocimiento matemático no es tan bueno. ¿Puede ayudarme con el procesamiento previo de los datos? cuando los datos están en el formato correcto, puedo hacer el proceso de pronóstico.
karmabob
¿Estaba deambulando si ha encontrado algún tiempo para ayudarme con el problema que tuve con la serie de tiempo de composición?
karmabob 01 de
Aqui tienes. Lo siento, tomó un tiempo; En realidad me quedé atrapado entendiendo la presentación y tuve que aclarar mi mente.
Stephan Kolassa 01 de