9 votos

Problemas con la predicción de series de tiempo

Tengo una pregunta acerca de modelado de series de tiempo en el R. mis datos están compuestos de 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

estos matriz tiene en total 200 filas.

como puedes ver en cada situación en la que la suma de cada fila es 1, que se hace porque los valores son el porcentaje de un todo. por ejemplo, la fila 1 contiene 3.33% de la variable a, el 1,11% de la variable 2 y el 95,5% de vericables 3. la primera collomn indica el año en el que los valores medidos.

mi objetivo es hacer una predicción para los próximos 5 años, por lo que desde el año 200 a 205.

Puedo doe por lo normal de tres series de tiempo previsto. Pero para que la previsión de la suma total nunca es igual a 1, lo cual es muy importante. Normalmente es el uso de técnicas como la arima y de suavizado exponencial.

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

10voto

icelava Puntos 548

Usted está tratando de previsión de una composición de series de tiempo. Es decir, usted tiene tres componentes que son todos restringido a estar entre 0 y 1 y añadir hasta 1.

Puede solucionar este problema utilizando el estándar de suavizado exponencial, mediante una adecuada generalizada transformación logística. Hubo una presentación sobre este por Koehler, Snyder, Ord & Beaumont en el 2010 Simposio Internacional sobre la Previsión. Yo no soy consciente de que un artículo de revista u otra publicación de haber salido de esto, pero siempre de correo de los autores y preguntar si la presentación no es suficiente.

Vamos a caminar a pesar de que este con sus datos. La lectura de los datos en una matriz obs de tiempo de la serie:

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

Usted puede comprobar si esta trabajado escribiendo

obs

Ahora, usted tiene un par de ceros en hay, que será un problema una vez que usted toma logaritmos. Una solución simple es el conjunto de todo lo que es menos que un pequeño $\epsilon$ a $\epsilon$:

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

Ahora las filas modificadas no sumar 1 más. Podemos rectificar (aunque creo que esto podría hacer que el pronóstico es peor):

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

Ahora transformar los datos como por la página 35 de la presentación:

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

La carga de la forecast paquete y establecer un horizonte de 5 puntos en el tiempo:

library(forecast)
horizon <- 5

Ahora modelo y pronóstico de la transformación de los datos de la columna por columna. Aquí estoy simplemente llamando ets(), que intentará encajar un estado del espacio de modelo de suavizado exponencial. Resulta que se utiliza una sola de suavizado exponencial para las tres series, pero especialmente si usted tiene más de 15 períodos de tiempo, puede seleccionar tendencia de los modelos. O si usted tiene un plan de datos mensual, explicar a R que tiene un potencial de estacionalidad, mediante el uso de ts() con frequency=12 - a continuación, ets() se verá en los 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 nos backtransform los pronósticos, como por la página 38 de la presentación:

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

Por último, vamos a la trama de la historia y las previsiones:

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

compositional forecasts

EDIT: un papel en la composición de las series de tiempo de previsión acaba de aparecer. Yo no lo he leído, pero puede ser de interés.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X