tiempo rpubs pronosticos periodograma modelo mensual ejercicios diarias correlograma ajustar r time-series forecasting outliers

rpubs - Predicción de series de tiempo, tratando con grandes pedidos conocidos.



series de tiempo diarias en r (3)

Sus valores atípicos parecen ser variaciones estacionales con los pedidos más grandes que aparecen en el cuarto trimestre. Muchos de los modelos de pronóstico que mencionó incluyen la capacidad de ajustes estacionales. Como ejemplo, el modelo más simple podría tener una dependencia lineal en el año con correcciones para todas las estaciones. El código se vería así:

df <- data.frame(period= c("08Q1","08Q2","08Q3","08Q4","09Q1","09Q2","09Q3","09Q4","10Q1","10Q2","10Q3", "10Q4","11Q1","11Q2","11Q3","11Q4","12Q1","12Q2","12Q3","12Q4","13Q1","13Q2", "13Q3","13Q4","14Q1","14Q2","14Q3","14Q4","15Q1"), order= c(155782698, 159463653.4, 172741125.6, 204547180, 126049319.8, 138648461.5, 135678842.1, 242568446.1, 177019289.3, 200397120.6, 182516217.1, 306143365.6, 222890269.2, 239062450.2, 229124263.2, 370575384.7, 257757410.5, 256125841.6, 231879306.6, 419580274, 268211059, 276378232.1, 261739468.7, 429127062.8, 254776725.6, 329429882.8, 264012891.6, 496745973.9, 42748656.73)) seasonal <- data.frame(year=as.numeric(substr(df$period, 1,2)), qtr=substr(df$period, 3,4), data=df$order) ord_model <- lm(data ~ year + qtr, data=seasonal) seasonal <- cbind(seasonal, fitted=ord_model$fitted) library(reshape2) library(ggplot2) plot_fit <- melt(seasonal,id.vars=c("year", "qtr"), variable.name = "Source", value.name="Order" ) ggplot(plot_fit, aes(x=year, y = Order, colour = qtr, shape=Source)) + geom_point(size=3)

Lo que da los resultados que se muestran en el siguiente cuadro:

Los modelos con un ajuste estacional pero una dependencia no lineal en el año pueden dar mejores ajustes.

Tengo muchos conjuntos de datos con valores atípicos conocidos (pedidos grandes)

data <- matrix(c("08Q1","08Q2","08Q3","08Q4","09Q1","09Q2","09Q3","09Q4","10Q1","10Q2","10Q3","10Q4","11Q1","11Q2","11Q3","11Q4","12Q1","12Q2","12Q3","12Q4","13Q1","13Q2","13Q3","13Q4","14Q1","14Q2","14Q3","14Q4","15Q1", 155782698, 159463653.4, 172741125.6, 204547180, 126049319.8, 138648461.5, 135678842.1, 242568446.1, 177019289.3, 200397120.6, 182516217.1, 306143365.6, 222890269.2, 239062450.2, 229124263.2, 370575384.7, 257757410.5, 256125841.6, 231879306.6, 419580274, 268211059, 276378232.1, 261739468.7, 429127062.8, 254776725.6, 329429882.8, 264012891.6, 496745973.9, 284484362.55),ncol=2,byrow=FALSE)

Los 11 principales valores atípicos de esta serie específica son:

outliers <- matrix(c("14Q4","14Q2","12Q1","13Q1","14Q2","11Q1","11Q4","14Q2","13Q4","14Q4","13Q1",20193525.68, 18319234.7, 12896323.62, 12718744.01, 12353002.09, 11936190.13, 11356476.28, 11351192.31, 10101527.85, 9723641.25, 9643214.018),ncol=2,byrow=FALSE)

¿Qué métodos existen para que pueda pronosticar las series de tiempo teniendo en cuenta estos valores atípicos?

Ya he intentado reemplazar el siguiente valor atípico (por lo que ejecutar el conjunto de datos 10 veces reemplazando los valores atípicos con el siguiente más grande hasta que el décimo conjunto de datos haya reemplazado todos los valores atípicos) También he intentado simplemente eliminar los valores atípicos (por lo que, nuevamente, ejecutar el conjunto de datos 10 veces eliminando un valor atípico cada vez hasta que los 10 se eliminen en el 10º conjunto de datos)

Solo quiero señalar que eliminar estos grandes pedidos no elimina el punto de datos completamente, ya que hay otras ofertas que suceden en ese trimestre.

Mi código prueba los datos a través de múltiples modelos de pronóstico (ARIMA ponderada en la muestra de salida, ARIMA ponderada en la muestra, ponderada ARIMA, ARIMA, ponderada Holt-Winters aditiva y Holt-Inviernos ponderada Multiplcative) por lo que debe ser algo que puede ser Adaptado a estos múltiples modelos.

Aquí hay un par de conjuntos de datos más que utilicé, pero aún no tengo los valores atípicos para estas series.

data <- matrix(c("08Q1","08Q2","08Q3","08Q4","09Q1","09Q2","09Q3","09Q4","10Q1","10Q2","10Q3","10Q4","11Q1","11Q2","11Q3","11Q4","12Q1","12Q2","12Q3","12Q4","13Q1","13Q2","13Q3","13Q4","14Q1","14Q2","14Q3", 26393.99306, 13820.5037, 23115.82432, 25894.41036, 14926.12574, 15855.8857, 21565.19002, 49373.89675, 27629.10141, 43248.9778, 34231.73851, 83379.26027, 54883.33752, 62863.47728, 47215.92508, 107819.9903, 53239.10602, 71853.5, 59912.7624, 168416.2995, 64565.6211, 94698.38748, 80229.9716, 169205.0023, 70485.55409, 133196.032, 78106.02227), ncol=2,byrow=FALSE) data <- matrix(c("08Q1","08Q2","08Q3","08Q4","09Q1","09Q2","09Q3","09Q4","10Q1","10Q2","10Q3","10Q4","11Q1","11Q2","11Q3","11Q4","12Q1","12Q2","12Q3","12Q4","13Q1","13Q2","13Q3","13Q4","14Q1","14Q2","14Q3",3311.5124, 3459.15634, 2721.486863, 3286.51708, 3087.234059, 2873.810071, 2803.969394, 4336.4792, 4722.894582, 4382.349583, 3668.105825, 4410.45429, 4249.507839, 3861.148928, 3842.57616, 5223.671347, 5969.066896, 4814.551389, 3907.677816, 4944.283864, 4750.734617, 4440.221993, 3580.866991, 3942.253996, 3409.597269, 3615.729974, 3174.395507),ncol=2,byrow=FALSE)

Si esto es demasiado complicado, entonces una explicación de cómo, en R, una vez que se detectan los valores atípicos utilizando ciertos comandos, los datos se tratan para pronosticar. por ejemplo, suavizar, etc. y cómo puedo abordar eso escribiendo un código yo mismo (sin usar los comandos que detectan valores atípicos)


Ya dijo que probó diferentes modelos Arima, pero como lo mencionó WaltS, su serie no parece contener grandes valores atípicos, sino un componente estacional, que está bien capturado por auto.arima() en el paquete de forecast :

myTs <- ts(as.numeric(data[,2]), start=c(2008, 1), frequency=4) myArima <- auto.arima(myTs, lambda=0) myForecast <- forecast(myArima) plot(myForecast)

donde el argumento lambda=0 para auto.arima() fuerza una transformación (o podría tomar un registro) de los datos por boxcox para tener en cuenta la amplitud creciente del componente estacional.



El enfoque que intenta utilizar para limpiar sus datos de valores atípicos no será lo suficientemente sólido como para identificarlos. Debo agregar que hay un paquete gratuito de valores atípicos en R llamado tsoutliers, pero no hará lo que estoy a punto de mostrarles ...

Tienes una serie de tiempo interesante aquí. La tendencia cambia con el tiempo y la tendencia alcista se debilita un poco. Si introduce dos variables de tendencia temporal, la primera comienza en 1 y la otra comienza en el período 14 y adelante, capturará este cambio. En cuanto a la estacionalidad, puede capturar el cuarto trimestre alto con una variable ficticia. El modelo es parsimonios ya que los otros 3 trimestres no son diferentes del promedio, más no hay necesidad de un AR12, diferenciación estacional o 3 maniquíes estacionales. También puede capturar el impacto de las dos últimas observaciones como valores atípicos con dos variables ficticias. Ignore los 49 por encima de la tendencia de la palabra, ya que es solo el nombre de la serie que se está modelando.