rm(list=ls())
El examen final es una parte cuestionario (10 pts) y otra parte este rmd (10 pts)
Realiza el total de los pasos que se solicitan en cada punto o paso, los puntos que se hacen mención en cada uno es basado en 100, pero representan el 10 pts (50% del examen)
Lista de librerías requeridas: tidyverse, forecast, quantmod, AER, MASS, tseries, stats, car, lmtest, urca, aTSA, openxlsx, ggfortify
Verifica la existencia de las librerias a utilizar, para lo cual
debes utilizar la siguiente función para cada librería
if(!require(libreria)) install.packages(libreria)
Carga de librerías
Carga de la información del csv con nombre Serie_Examen,
en una variable con nombre ‘mi_serie’, la cual se deberá cargar con los
encabezados y tomar en cuenta el tipo de separación que es ‘;’
mi_serie <- read.csv("Serie_Examen.csv", header = TRUE, sep = ";")
Ahora deberás transformar los datos en una serie de tiempo mediante
la función ts, cargar el resultado en una variabkle con
nombre ‘mi_serie_co’, tomar solo la columna CO2 e indicar que debe
iniciar en Enero/1959, con una frecuencia mensual.
mi_serie_co<- ts(mi_serie$CO2, start = c(1959, 01) , frequency = 12)
mi_serie_co
## Jan Feb Mar Apr May Jun Jul Aug Sep Oct
## 1959 333.13 332.09 331.10 329.14 327.36 327.29 328.23 329.55 330.62 331.40
## 1960 333.92 333.43 331.85 330.01 328.51 328.41 329.25 330.97 331.60 332.60
## 1961 334.68 334.17 332.96 330.80 328.98 328.57 330.20 331.58 332.67 333.17
## 1962 336.82 336.12 334.81 332.56 331.30 331.22 332.37 333.49 334.71 335.23
## 1963 337.95 338.00 336.37 334.47 332.46 332.29 333.76 334.80 336.00 336.63
## 1964 339.05 339.27 337.64 335.68 333.77 334.09 335.29 336.76 337.77 338.26
## 1965 341.47 341.31 339.41 337.74 336.07 336.07 337.22 338.38 339.32 340.41
## 1966 343.02 342.54 340.88 338.75 337.05 337.13 338.45 339.85 340.90 341.70
## 1967 344.28 343.42 342.02 339.97 337.84 338.00 339.20 340.63 341.41 342.68
## 1968 345.92 345.40 344.16 342.11 340.11 340.15 341.38 343.02 343.87 344.59
## 1969 347.38 346.78 344.96 342.71 340.86 341.13 342.84 344.32 344.88 345.62
## 1970 348.53 347.87 346.00 343.86 342.55 342.57 344.11 345.49 346.04 346.70
## 1971 349.93 349.26 347.44 345.55 344.21 343.67 345.09 346.27 347.33 347.82
## 1972 351.71 350.94 349.10 346.77 345.73
## Nov Dec
## 1959 331.87 333.18
## 1960 333.57 334.72
## 1961 334.86 336.07
## 1962 336.54 337.79
## 1963 337.93 338.95
## 1964 340.10 340.88
## 1965 341.69 342.51
## 1966 342.70 343.65
## 1967 343.04 345.27
## 1968 345.11 347.07
## 1969 347.23 347.62
## 1970 347.38 349.38
## 1971 349.29 350.91
## 1972
Revisar el resultado, observando los primeros datos de la serie
mean(mi_serie_co)
## [1] 339.1325
var(mi_serie_co)
## [1] 36.56678
sd(mi_serie_co)
## [1] 6.047047
Revisar la información cargada mediante plot, describir la tendencia, si es o no estacionario.
plot(mi_serie_co, main = "CO2 a lo largo de los años", ylab = "CO2")
Comentarios La serie de tiempo presenta un comportamiento estacional mas no estacionario, con valores máximos en el segundo semestre del año y mínimos en el primero. Hay una tendencia creciente con el tiempo, con una vairanza constante, y no se una caminata aleatoria. A lo largo de los diferentes análisis vamos a ser capaces de poder explicar mas sobre esta serie de tiempo
Utilice la función acf de Dicke-Fuller, explique lo que observa en la gráfica
mi_serie_co_diff <- diff(mi_serie_co)
mi_serie_co_adf_con_d <- adf.test(mi_serie_co_diff)
## Augmented Dickey-Fuller Test
## alternative: stationary
##
## Type 1: no drift no trend
## lag ADF p.value
## [1,] 0 -5.16 0.01
## [2,] 1 -8.12 0.01
## [3,] 2 -9.60 0.01
## [4,] 3 -7.41 0.01
## [5,] 4 -7.74 0.01
## Type 2: with drift no trend
## lag ADF p.value
## [1,] 0 -5.16 0.01
## [2,] 1 -8.14 0.01
## [3,] 2 -9.68 0.01
## [4,] 3 -7.52 0.01
## [5,] 4 -7.89 0.01
## Type 3: with drift and trend
## lag ADF p.value
## [1,] 0 -5.14 0.01
## [2,] 1 -8.11 0.01
## [3,] 2 -9.64 0.01
## [4,] 3 -7.48 0.01
## [5,] 4 -7.86 0.01
## ----
## Note: in fact, p.value = 0.01 means p.value <= 0.01
mi_serie_co_adf_sin_d <- adf.test(mi_serie_co_diff)
## Augmented Dickey-Fuller Test
## alternative: stationary
##
## Type 1: no drift no trend
## lag ADF p.value
## [1,] 0 -5.16 0.01
## [2,] 1 -8.12 0.01
## [3,] 2 -9.60 0.01
## [4,] 3 -7.41 0.01
## [5,] 4 -7.74 0.01
## Type 2: with drift no trend
## lag ADF p.value
## [1,] 0 -5.16 0.01
## [2,] 1 -8.14 0.01
## [3,] 2 -9.68 0.01
## [4,] 3 -7.52 0.01
## [5,] 4 -7.89 0.01
## Type 3: with drift and trend
## lag ADF p.value
## [1,] 0 -5.14 0.01
## [2,] 1 -8.11 0.01
## [3,] 2 -9.64 0.01
## [4,] 3 -7.48 0.01
## [5,] 4 -7.86 0.01
## ----
## Note: in fact, p.value = 0.01 means p.value <= 0.01
adf_test_result <- ur.df(mi_serie_co, lags = 12, type = "trend", selectlags = "AIC")
summary(adf_test_result)
##
## ###############################################
## # Augmented Dickey-Fuller Test Unit Root Test #
## ###############################################
##
## Test regression trend
##
##
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + tt + z.diff.lag)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.10308 -0.16342 0.00389 0.19355 0.83443
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 77.47596 34.46440 2.248 0.02622 *
## z.lag.1 -0.23465 0.10490 -2.237 0.02696 *
## tt 0.02859 0.01278 2.237 0.02694 *
## z.diff.lag1 -0.00963 0.12307 -0.078 0.93775
## z.diff.lag2 0.06677 0.12198 0.547 0.58505
## z.diff.lag3 -0.19844 0.11097 -1.788 0.07600 .
## z.diff.lag4 -0.08844 0.10622 -0.833 0.40659
## z.diff.lag5 -0.10899 0.09970 -1.093 0.27630
## z.diff.lag6 -0.16439 0.09459 -1.738 0.08454 .
## z.diff.lag7 -0.14531 0.09032 -1.609 0.11001
## z.diff.lag8 -0.19450 0.08634 -2.253 0.02592 *
## z.diff.lag9 -0.22976 0.08184 -2.807 0.00575 **
## z.diff.lag10 -0.32166 0.07732 -4.160 5.67e-05 ***
## z.diff.lag11 0.06683 0.08129 0.822 0.41250
## z.diff.lag12 0.43342 0.07712 5.620 1.08e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.3288 on 133 degrees of freedom
## Multiple R-squared: 0.9398, Adjusted R-squared: 0.9334
## F-statistic: 148.2 on 14 and 133 DF, p-value: < 2.2e-16
##
##
## Value of test-statistic is: -2.2368 9.2107 2.5036
##
## Critical values for test statistics:
## 1pct 5pct 10pct
## tau3 -3.99 -3.43 -3.13
## phi2 6.22 4.75 4.07
## phi3 8.43 6.49 5.47
acf(mi_serie_co, main = "Funcion de autocorrelacion de la serie de tiempo CO2")
> Comentarios > Como se puede observar el valor de p en los dos
test (con diferenciación y sin diferenciación) dan un valor menor de
0.05, significa que hay evidencia suficiente para rechazar la hipótesis
nula de que la serie temporal tiene una raíz unitaria, entonces podemos
concluir que la serie es estacionaria
Utilizar la función stl, informe si respaldan o no las
conclusiones (comentarios) de los puntos anteriores
plot(stl(mi_serie_co, s.window = "periodic"))
# ?stl
mi_serie_co_ts <- ts(mi_serie_co, start=c(1959,01), frequency=12)
# PFE_ts
plot(stl(mi_serie_co_ts, s.window = "periodic"))
>Comentarios >La serie de tiempo tiene una varianza alta ya que
sus valores estan muy dispersos de la media, una estacionalidad anual,
con picos en los meses de verano y caídas en los meses de invierno, asi
como una tendencia creciente.
Definir los valores de p,d y q, mediante las funciones vistas en clase, excepto auto.arima
ndiffs(mi_serie_co) #determina el valor de d=1
## [1] 1
Y_d1 <- diff(mi_serie_co) #se carga la diferencia
adf.test(Y_d1) #se puede detrminar que si es estacionaria
## Augmented Dickey-Fuller Test
## alternative: stationary
##
## Type 1: no drift no trend
## lag ADF p.value
## [1,] 0 -5.16 0.01
## [2,] 1 -8.12 0.01
## [3,] 2 -9.60 0.01
## [4,] 3 -7.41 0.01
## [5,] 4 -7.74 0.01
## Type 2: with drift no trend
## lag ADF p.value
## [1,] 0 -5.16 0.01
## [2,] 1 -8.14 0.01
## [3,] 2 -9.68 0.01
## [4,] 3 -7.52 0.01
## [5,] 4 -7.89 0.01
## Type 3: with drift and trend
## lag ADF p.value
## [1,] 0 -5.14 0.01
## [2,] 1 -8.11 0.01
## [3,] 2 -9.64 0.01
## [4,] 3 -7.48 0.01
## [5,] 4 -7.86 0.01
## ----
## Note: in fact, p.value = 0.01 means p.value <= 0.01
ndiffs(Y_d1) #se verifica si se requiere otra diferencia
## [1] 0
Y_d1_rl <- lm(Y_d1~time(Y_d1))
summary(Y_d1_rl) #Se puede observar que tiene p-value cercano a 1, la r2 ajustada es negativa
##
## Call:
## lm(formula = Y_d1 ~ time(Y_d1))
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.4198 -1.1677 0.4334 1.0528 2.1475
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -3.230910 51.243494 -0.063 0.950
## time(Y_d1) 0.001684 0.026069 0.065 0.949
##
## Residual standard error: 1.269 on 158 degrees of freedom
## Multiple R-squared: 2.64e-05, Adjusted R-squared: -0.006303
## F-statistic: 0.004171 on 1 and 158 DF, p-value: 0.9486
plot(Y_d1, type = "l", main = "Primera diferencia de CO2", ylab = "Cantidad", xlab = "Año")
ndiffs(mi_serie_co) #determina el valor de d=1
## [1] 1
d <- ndiffs(mi_serie_co)
print(paste("El valor de 'd' es", d))
## [1] "El valor de 'd' es 1"
El valor de ‘d’ es
pacf_values <- Pacf(diff(mi_serie_co, differences = d), plot = FALSE, lag.max = 20)
d_aprox <- max(which(abs(pacf_values$acf)>1.96/sqrt(length(mi_serie_co))))
print(paste("El valor aproximado de d es:", d_aprox))
## [1] "El valor aproximado de d es: 13"
El valor apróximado de ‘p’ es
acf_values <- acf(diff(mi_serie_co, differences = 1), plot = FALSE, lag.max = 20)
q_aprox <- max(which(abs(pacf_values$acf)>1.96/sqrt(length(mi_serie_co))))
print(paste("El valor aproximado de q es:", q_aprox))
## [1] "El valor aproximado de q es: 13"
El valor apróximado de ‘q’ es
Si ‘d’>0 entonces haga acf y pacf según el valor de ‘d’
Mostrar acf, comente el significado de la gráficas
Y_diff <- diff(mi_serie_co)
acf(Y_diff)
plot(ts(Y_diff, frequency = 1))
– Comentario ACF: Con esta gráfica se puede entender mucho más sobre la
fuerte estacionalidad de la serie de tiempo, dando una fuerte
correlación entre los valores pasados. Debido a que los valores tienen
una caida rápida a 0, nos da a enteder a que no existe una dependencia
lineal. –
Mostrar pacf, comente el significado de la gráficas
pacf(Y_diff)
plot(ts(Y_diff, frequency = 1))
– Comentario El PACF de la serie de tiempo indica una fuerte correlación
positiva directa entre las observaciones consecutivas,
independientemente de los valores previos. Al igual que con el ACF, no
se ve una existente dependencia lineal. –
Verifica con un auto.arima, cuales son los valores de p,d y q, anotalos al final
auto.arima(mi_serie_co)
## Series: mi_serie_co
## ARIMA(1,0,1)(2,1,2)[12] with drift
##
## Coefficients:
## ar1 ma1 sar1 sar2 sma1 sma2 drift
## 0.8880 -0.4252 -0.4862 -0.0029 -0.2211 -0.5112 0.1197
## s.e. 0.0529 0.0949 0.3324 0.1608 0.3334 0.3084 0.0029
##
## sigma^2 = 0.09842: log likelihood = -34.46
## AIC=84.92 AICc=85.95 BIC=108.96
Comentarios El valor de ar1 indica que el valor actual de la serie de CO2 está autocorrelacionado positivamente con su valor anterior, el ma1 indica que existe una correlación negativa con la primera diferencia de la serie, los sar1 y 2 muestran la estacionalidad anual en la serie, el drift muestra que existe una tendencia creciente y el AIC muestra que es un valor relativamente bajo, lo cual signifca que es la versión con más ajuste.
Desarrolla el modelo ARIMA con los datos del punto anterior, carga los resultados en una variable con nombre ‘mi_modelo’
mi_modelo <- arima(mi_serie_co, order=c(1,0,1), seasonal = list(order = c(2,1,2), period = 12))
Revisa sus residuales, comparalos con el proceso estacionario (ruido blanco) que encontraste en el paso 2 y muestra su valor AIC.
resid2 <- mi_modelo$residuals^2
plot(mi_modelo$residuals)
plot(resid2)
acf(mi_modelo$residuals)
acf(resid2)
pacf(mi_modelo$residuals)
pacf(resid2)
Comentarios Según el modelo de autocorrelación, varios valores superan la zona de valores no signficativos de correlación, mientras que el resto de valores dentro de las lineas azules muestran una correlación significativa. La mayoria de los valores en los modelos de residuales muestran una correlación significativa ya que se encuentran dentro de las lineas azules.
Realiza predicciones para los próximos 5 años (la frecuencia de la serie es mensual) y muestra estas gráficamente. Para esto puedes utilizar el comando ‘predict’ o ‘forecast’ estudiado en clase.
proyecciones = forecast::forecast(mi_modelo, h=60)
proyecciones
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## Jun 1972 345.4190 345.0328 345.8053 344.8283 346.0098
## Jul 1972 346.8200 346.3886 347.2514 346.1602 347.4798
## Aug 1972 348.1627 347.6904 348.6349 347.4405 348.8849
## Sep 1972 349.0322 348.5224 349.5419 348.2525 349.8118
## Oct 1972 349.7497 349.2049 350.2944 348.9166 350.5828
## Nov 1972 350.9511 350.3735 351.5286 350.0678 351.8344
## Dec 1972 352.2753 351.6667 352.8839 351.3446 353.2061
## Jan 1973 352.9395 352.3015 353.5776 351.9637 353.9154
## Feb 1973 352.3244 351.6581 352.9906 351.3054 353.3433
## Mar 1973 350.6199 349.9266 351.3131 349.5596 351.6801
## Apr 1973 348.4795 347.7602 349.1987 347.3795 349.5795
## May 1973 347.0048 346.2605 347.7491 345.8665 348.1431
## Jun 1973 346.9089 346.1051 347.7128 345.6796 348.1383
## Jul 1973 348.2975 347.4565 349.1384 347.0114 349.5836
## Aug 1973 349.6737 348.7972 350.5502 348.3332 351.0141
## Sep 1973 350.4974 349.5867 351.4080 349.1047 351.8900
## Oct 1973 351.2209 350.2774 352.1644 349.7779 352.6638
## Nov 1973 352.2630 351.2878 353.2383 350.7715 353.7545
## Dec 1973 353.7178 352.7118 354.7238 352.1793 355.2563
## Jan 1974 354.3092 353.2734 355.3450 352.7251 355.8933
## Feb 1974 353.7069 352.6422 354.7716 352.0785 355.3352
## Mar 1974 352.0046 350.9117 353.0975 350.3332 353.6760
## Apr 1974 349.9240 348.8037 351.0444 348.2107 351.6374
## May 1974 348.3767 347.2297 349.5238 346.6225 350.1310
## Jun 1974 348.2547 347.0672 349.4421 346.4387 350.0706
## Jul 1974 349.6500 348.4308 350.8691 347.7854 351.5145
## Aug 1974 350.9990 349.7489 352.2490 349.0872 352.9108
## Sep 1974 351.8563 350.5761 353.1365 349.8985 353.8142
## Oct 1974 352.5631 351.2535 353.8727 350.5602 354.5660
## Nov 1974 353.7017 352.3633 355.0401 351.6548 355.7486
## Dec 1974 355.1056 353.7390 356.4721 353.0156 357.1955
## Jan 1975 355.7414 354.3473 357.1355 353.6093 357.8735
## Feb 1975 355.1230 353.7019 356.5441 352.9496 357.2964
## Mar 1975 353.4111 351.9636 354.8587 351.1973 355.6250
## Apr 1975 351.2884 349.8148 352.7619 349.0348 353.5420
## May 1975 349.8024 348.3034 351.3015 347.5098 352.0951
## Jun 1975 349.6809 348.1349 351.2269 347.3165 352.0453
## Jul 1975 351.0727 349.4927 352.6528 348.6562 353.4892
## Aug 1975 352.4331 350.8197 354.0465 349.9657 354.9006
## Sep 1975 353.2751 351.6291 354.9211 350.7577 355.7925
## Oct 1975 353.9894 352.3114 355.6674 351.4232 356.5557
## Nov 1975 355.0868 353.3775 356.7962 352.4726 357.7011
## Dec 1975 356.5087 354.7686 358.2489 353.8474 359.1700
## Jan 1976 357.1252 355.3549 358.8956 354.4177 359.8328
## Feb 1976 356.5136 354.7136 358.3137 353.7607 359.2666
## Mar 1976 354.8059 352.9767 356.6351 352.0083 357.6035
## Apr 1976 352.7007 350.8428 354.5587 349.8593 355.5422
## May 1976 351.1867 349.3005 353.0729 348.3020 354.0714
## Jun 1976 351.0657 349.1356 352.9957 348.1139 354.0174
## Jul 1976 352.4582 350.4936 354.4228 349.4536 355.4628
## Aug 1976 353.8136 351.8151 355.8122 350.7571 356.8701
## Sep 1976 354.6609 352.6290 356.6928 351.5534 357.7684
## Oct 1976 355.3716 353.3070 357.4363 352.2140 358.5293
## Nov 1976 356.4840 354.3871 358.5809 353.2770 359.6910
## Dec 1976 357.8989 355.7702 360.0275 354.6433 361.1544
## Jan 1977 358.5221 356.3621 360.6820 355.2187 361.8254
## Feb 1977 357.9072 355.7165 360.0979 354.5568 361.2576
## Mar 1977 356.1972 353.9761 358.4183 352.8004 359.5940
## Apr 1977 354.0847 351.8337 356.3357 350.6421 357.5273
## May 1977 352.5809 350.3005 354.8614 349.0933 356.0686
plot(proyecciones)