Descripcion de la serie elegida, asi como su frecuencia, unidad de medida,fuente, etc.
Ruta temĆ”tica: EnergĆa > Producción de petroquĆmicos por entidad federativa y principales productos > Total
| Periocidad | mensual |
|---|---|
| Unidad de medida | toneladadas |
| Fuente | PEMEX. Dirección Corporativa de Planeación Estratégica. |
| Fecha inicial | 2010/01 |
| Fecha final | 2018/01 |
| Ćltima actualización | 2018/02/28 |
Fuente de información: Enlace a Banco de Información Financiera
Graficar los datos, analizar patrones y observaciones atipicas.
library(urca)
library(forecast)
library(TSA)
##
## Attaching package: 'TSA'
## The following objects are masked from 'package:stats':
##
## acf, arima
## The following object is masked from 'package:utils':
##
## tar
library(ggplot2)
prodp <- read.csv('E:/basest.csv')
prodp<-ts(prodp$Total, frequency = 12, start= c(2010,1))
autoplot(prodp, colors="darkblue", main= "Producción de petroquĆmicos por entidad federativa y principales productos. ", ylab="toneladas", xlab= "aƱos")
En esta grafica se muestran los datos originales, comprobando la estacionalidad de serie de tiempo y los ciclos que muestra.
library(forecast)
Fit<-decompose(prodp)
autoplot(Fit, col= "darkblue")
-Componentes de la serie de tiempo
Tendencia - Ciclo
| El comportamineto de la producción petroquimica en el pais a través del tiempo, presenta una tendencia NEGATIVA. |
|---|
| Actualmente se tienen plantas fuera de operación por falta de competitividad, de mercado o falta de materia prima, las cuales siguen formando parte de los activos de Pemex PetroquĆmica. |
| El cierre obedece a que su operación no genera ingresos suficientes para cubrir ni siquiera los costos variables, lo que repercute en una menor produccion petroquimica |
| El volumen nacional de producción de petroquĆmicos cayó 10.7% en un aƱo, afectado por la caĆda en el suministro de materia prima de Petróleos Mexicanos (Pemex), la falta de estos insumos precursores ha provocado que las fabricas privadas de petroquĆmicos en el paĆs operen a una tercera parte de su capacidad en los Ćŗltimos aƱos, segĆŗn diversos industriales. |
plot(Fit$trend, col= "turquoise2")
Estacionalidad:
Como la estacionalidad siempre es fija y conocida, muestra como a través de los años disminuye la producción de dicho bien.
plot(Fit$seasonal, col= "darkmagenta")
ggseasonplot(prodp, main= ("Producción de petroquĆmicos por entidad federativa y principales productos."), polar="TRUE")
Esta grĆ”fica se puede observar mejor la estacionalidad, mostrando que en se tiene una menor producción petroquimica en en el paĆs como van pasando los aƱos, y el principal factor fue que la producción de petroquĆmicos cayó 10.7% en un aƱo, afectado por la caĆda en el suministro de materia prima de Pemex, que descendió 11.6%, segĆŗn el Ćŗltimo anuario de la Asociación Nacional de la Industria QuĆmica (ANIQ).
La produccion petroquimica hilo en el 2015 dos aƱos a la baja.
Si es necesario, utilizar transformacion Box-Cox / logaritmos para estabilizar la varianza.
BoxCox.ar(prodp)
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
## Warning in arima0(x, order = c(i, 0L, 0L), include.mean = demean): possible
## convergence problem: optim gave code = 1
El intervalo a 95% para \(\?? \??\), contiene un valor de \(\??=0\??=0\) muy cerca de su centro y sugiere una transformación logarĆtmica.
ts.prodp <- (log(prodp))
plot(log(ts.prodp), main="Producción de petroquĆmicos por entidad federativa y principales productos.", col="chartreuse2", ylab="toneladas", xlab="aƱos", lwd=2, type="o", pch=1)
En caso de estacionalidad, aplicar diferencias estacionales
difpp <- diff(ts.prodp)
plot(diff(log(prodp)), col="deeppink2")
dif2pp <- diff(prodp,difference=2)
plot(diff(prodp,difference=2),col="cyan3")
library(gridExtra)
library(forecast)
logpp<- autoplot (log(prodp))
pd<- autoplot (diff(log(prodp)))
sd<- autoplot (diff(prodp, difference=2))
grid.arrange(logpp, pd, sd)
Usar prueba Dickey-Fuller para evaluar el orden de integracion de la serie.
library(urca)
summary(ur.df(dif2pp))
##
## ###############################################
## # Augmented Dickey-Fuller Test Unit Root Test #
## ###############################################
##
## Test regression none
##
##
## Call:
## lm(formula = z.diff ~ z.lag.1 - 1 + z.diff.lag)
##
## Residuals:
## Min 1Q Median 3Q Max
## -177143 -59009 7507 44679 386752
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## z.lag.1 -2.22668 0.17770 -12.531 < 2e-16 ***
## z.diff.lag 0.34183 0.09606 3.558 0.000595 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 89300 on 91 degrees of freedom
## Multiple R-squared: 0.854, Adjusted R-squared: 0.8508
## F-statistic: 266.2 on 2 and 91 DF, p-value: < 2.2e-16
##
##
## Value of test-statistic is: -12.5306
##
## Critical values for test statistics:
## 1pct 5pct 10pct
## tau1 -2.6 -1.95 -1.61
Para que la serie sea estacionaria: phi tiene que ser menor a 1.
\(H_0=\) No es estacionaria. \(H_1=\) Ya es estacionaria.
Al tomar la segunada diferencia, se muestra que la serie ya es estacinaria, ya que el valor estadistico es de -12.5306, es mayor a los valores crĆticos de Tau.
Usar herramientas ACF, PACF, EACF y criterios de Akaike/ Bayes para construirpropuestas de modelos
ggAcf(dif2pp)
ggPacf(dif2pp)
eacf(dif2pp)
## AR/MA
## 0 1 2 3 4 5 6 7 8 9 10 11 12 13
## 0 x x o o o o o o o o x x x o
## 1 x o o x o o o o o o o x x o
## 2 x o x o o o o o o o o x o o
## 3 x x x x o o o o o o o x o o
## 4 x o o x x o o o o o o o o o
## 5 x o x o x o o o o o o o o o
## 6 o o x o x o o o o o o o o o
## 7 o o x o x o x o o o o x o o
ggtsdisplay(dif2pp)
res <- armasubsets(y=dif2pp, nar=12, nma=12, y.name='test', ar.method='ols')
plot(res)
Como parte del diagnostico del modelo, analizar los residuos y aplicar la prueba Ljung-Box
propuesta1 <- arima(dif2pp, order=c(2,0,0),method='ML') # AR(1)
propuesta1
##
## Call:
## arima(x = dif2pp, order = c(2, 0, 0), method = "ML")
##
## Coefficients:
## ar1 ar2 intercept
## -0.9126 -0.3515 -184.6596
## s.e. 0.0961 0.0974 4089.6492
##
## sigma^2 estimated as 8.02e+09: log likelihood = -1218.48, aic = 2442.97
propuesta2 <- arima(dif2pp, order=c(0,0,1),method='ML') # MA(1)
propuesta2
##
## Call:
## arima(x = dif2pp, order = c(0, 0, 1), method = "ML")
##
## Coefficients:
## ma1 intercept
## -1.0000 -100.8005
## s.e. 0.0266 289.6591
##
## sigma^2 estimated as 6.171e+09: log likelihood = -1207.88, aic = 2419.77
propuesta3 <- arima(dif2pp, order=c(4,0,1),method='ML') # ARMA(4,1)
propuesta3
##
## Call:
## arima(x = dif2pp, order = c(4, 0, 1), method = "ML")
##
## Coefficients:
## ar1 ar2 ar3 ar4 ma1 intercept
## -0.4113 -0.0841 -0.2131 -0.2862 -1.0000 -118.0359
## s.e. 0.0979 0.1059 0.1047 0.0986 0.0304 133.3103
##
## sigma^2 estimated as 4.781e+09: log likelihood = -1196.69, aic = 2405.39
library(forecast)
library(TSA)
library(ggplot2)
plot(rstandard(propuesta1),ylab ='Residuos estandarizados', type='o'); abline(h=0)
plot(rstandard(propuesta2),ylab ='Residuos estandarizados', type='o'); abline(h=0)
plot(rstandard(propuesta3),ylab ='Residuos estandarizados', type='o'); abline(h=0)
tsdiag(propuesta1,gof=8,omit.initial=F)
tsdiag(propuesta2,gof=8,omit.initial=F)
tsdiag(propuesta3,gof=8,omit.initial=F)
checkresiduals(propuesta1)
##
## Ljung-Box test
##
## data: Residuals from ARIMA(2,0,0) with non-zero mean
## Q* = 41.606, df = 16, p-value = 0.0004517
##
## Model df: 3. Total lags used: 19
checkresiduals(propuesta2)
##
## Ljung-Box test
##
## data: Residuals from ARIMA(0,0,1) with non-zero mean
## Q* = 57.342, df = 17, p-value = 2.866e-06
##
## Model df: 2. Total lags used: 19
checkresiduals(propuesta3)
##
## Ljung-Box test
##
## data: Residuals from ARIMA(4,0,1) with non-zero mean
## Q* = 28.351, df = 13, p-value = 0.008082
##
## Model df: 6. Total lags used: 19
Usar la funcion auto.arima()y compare sus resultados con el inciso anterior
propuesta.auto <- auto.arima(dif2pp)
propuesta.auto
## Series: dif2pp
## ARIMA(5,0,0)(1,0,0)[12] with zero mean
##
## Coefficients:
## ar1 ar2 ar3 ar4 ar5 sar1
## -1.1011 -0.8857 -0.7526 -0.6011 -0.2857 0.389
## s.e. 0.0984 0.1394 0.1473 0.1348 0.0972 0.103
##
## sigma^2 estimated as 5.864e+09: log likelihood=-1201.95
## AIC=2417.89 AICc=2419.18 BIC=2435.77
plot(rstandard(propuesta.auto),ylab ='Residuos estandarizados', type='o'); abline(h=0)
qqnorm(residuals(propuesta.auto)); qqline(residuals(propuesta.auto))
ggAcf(residuals(propuesta.auto))
tsdiag(propuesta.auto, gof=12, omit.initial=F)
checkresiduals(propuesta.auto)
##
## Ljung-Box test
##
## data: Residuals from ARIMA(5,0,0)(1,0,0)[12] with zero mean
## Q* = 21.25, df = 13, p-value = 0.06814
##
## Model df: 6. Total lags used: 19
Ecuacion final
\[ Yt= -1.1011e_1-0.8857e_{t-1}-0.7526e_{t-2}-0.6011e_{t-3}-0.2857e_{t-4}+0.389+et \]
Crear un pronostico a dos aƱos.
pronostico <- plot(forecast(propuesta.auto,h=24))
pronostico
## $mean
## Jan Feb Mar Apr May
## 2018 -105693.695 106909.577 -82951.732 49781.701
## 2019 24214.907 -40395.127 42831.298 -33152.830 19855.574
## 2020 9531.214
## Jun Jul Aug Sep Oct
## 2018 -5348.718 -21226.080 -13582.947 -17736.387 47328.410
## 2019 -2653.692 -8347.996 -4869.311 -6887.387 18303.547
## 2020
## Nov Dec
## 2018 -15550.820 -3450.926
## 2019 -6035.498 -1494.994
## 2020
##
## $lower
## 80% 95%
## Feb 2018 -203827.4 -255776.2
## Mar 2018 -39055.8 -116325.2
## Apr 2018 -232397.4 -311509.1
## May 2018 -100269.0 -179701.0
## Jun 2018 -155654.9 -235222.1
## Jul 2018 -172284.9 -252250.6
## Aug 2018 -164664.4 -244642.0
## Sep 2018 -169900.7 -250451.7
## Oct 2018 -105133.1 -185841.3
## Nov 2018 -168065.2 -248801.4
## Dec 2018 -156121.3 -236940.2
## Jan 2019 -128456.1 -209275.3
## Feb 2019 -196820.3 -279626.7
## Mar 2019 -119500.9 -205434.4
## Apr 2019 -196112.0 -282377.3
## May 2019 -143185.3 -229494.0
## Jun 2019 -165774.2 -252125.0
## Jul 2019 -171532.4 -257917.0
## Aug 2019 -168064.1 -254454.2
## Sep 2019 -170224.9 -256690.6
## Oct 2019 -145086.0 -231579.3
## Nov 2019 -169430.3 -255926.3
## Dec 2019 -164912.6 -251420.7
## Jan 2020 -153886.7 -240394.9
##
## $upper
## 80% 95%
## Feb 2018 -7560.036 44388.78
## Mar 2018 252874.952 330144.35
## Apr 2018 66493.894 145605.63
## May 2018 199832.398 279264.44
## Jun 2018 144957.432 224524.70
## Jul 2018 129832.732 209798.44
## Aug 2018 137498.477 217476.15
## Sep 2018 134427.964 214978.90
## Oct 2018 199789.921 280498.17
## Nov 2018 136963.540 217699.76
## Dec 2018 149219.475 230038.30
## Jan 2019 176885.930 257705.09
## Feb 2019 116030.006 198836.47
## Mar 2019 205163.503 291096.98
## Apr 2019 129806.299 216071.65
## May 2019 182896.483 269205.13
## Jun 2019 160466.801 246817.57
## Jul 2019 154836.409 241221.01
## Aug 2019 158325.489 244715.60
## Sep 2019 156450.144 242915.81
## Oct 2019 181693.135 268186.36
## Nov 2019 157359.333 243855.33
## Dec 2019 161922.628 248430.69
## Jan 2020 172949.149 259457.38