CE_5
Análisis de series de tiempo
Índice de Percepción de la Corrupción en México
Paquetes
library(pacman)
p_load("tidyverse", "lubridate", "forecast", "TTR", "MLmetrics", "tseries", "fpp", "TSstudio", "xfun", "DT", "mFilter")Introduccion
La corrupción existe desde el inicio de nuestra historia hasta nuestros tiempos con similitudes exageradas que hacen pensar que la sociedad gira en un círculo vicioso destinado a no terminar, la etimología de palabra corrupción se origina del latín “corruptio”, la cual es la acción y efecto de destruir o alterar globalmente por putrefacción, también acción de dañar, sobornar o pervertir a alguien.
La corrupción es un factor cultural que se genera desde las esferas social, económica y política, hace parte del desarrollo antropológico del hombre, la especie humana por naturaleza es ambiciosa y en ningún caso conformista, el individuo necesita cada vez más cosas (poder, dinero, cariño) y nunca es suficiente. Esta es una de las conductas que se evidencia en el sistema económico mundial más aceptado “El Capitalismo”, en este modelo se invierte un capital privado (dinero) y se busca recibir a cambio una utilidad, es decir se reafirma la necesidad de tener más.
La corrupción es un fenómeno que involucra muchos aspectos diferentes y, por lo tanto, es difícil dar una definición precisa y completa. Sin embargo, en el centro de la mayoría de las definiciones de corrupción está la idea de que un acto corrupto implica el abuso del poder encomendado para beneficio privado, los ejemplos más comunes son el soborno, el clientelismo y la malversación.
Importamos datos
library(readr)
corrupcion <- read_csv("TI-corruption-perception-index.csv") # Importamos datos## Rows: 7 Columns: 4
## -- Column specification --------------------------------------------------------
## Delimiter: ","
## chr (2): Entity, Code
## dbl (2): Year, Corruption Perception Index - Transparency International (2018)
##
## i Use `spec()` to retrieve the full column specification for this data.
## i Specify the column types or set `show_col_types = FALSE` to quiet this message.
Índice de Percepción de la Corrupción de Transparencia Internacional. Las puntuaciones están en una escala de 0 a 100, donde 0 significa que un país es percibido como altamente corrupto. Esta entrada presenta los datos disponibles y la evidencia empírica sobre la corrupción, un problema importante que impone costos políticos, económicos y ambientales a las sociedades de todo el mundo.
- Verificar si existen datos faltantes
anyNA(corrupcion)## [1] FALSE
Esto significa que no hay datos faltantes
Decomposicion de serie de tiempo en sus partes principales
corrupcionTS <- ts(corrupcion[ ,c(4)],start =2012,end =2018,frequency = 1)
corrupcionTS## Time Series:
## Start = 2012
## End = 2018
## Frequency = 1
## Corruption Perception Index - Transparency International (2018)
## [1,] 34
## [2,] 34
## [3,] 35
## [4,] 31
## [5,] 30
## [6,] 29
## [7,] 28
plot(corrupcionTS, xlab = "Año",ylab = "Índice de Corrupción")autoplot(mstl(corrupcionTS))corrupcionFil <- mFilter(corrupcionTS,filter="HP")
plot(corrupcionFil)Division de los datos para validacián cruzada
test_corrupcionMX <- tail(corrupcionTS,12) #20% para pruebas
train_corrupcionMX <- head(corrupcionTS, length(corrupcionTS)-12) #80% para entrenamientoAjuste del modelo
Según el resultado de descomposición, los datos de corrupcion tienen una tendencia y estacionalidad. para el siguiente paso, usaremos Triple Exponential Smooting/Holt Winters Exponential Smoothing, Exponential Smoothing de Holt-Winters con tendencia y componente estacional multiplicativo.
corrupcionMX_TS <- ts(corrupcion[ ,c(4)],start =2012,end =2018,frequency = 2)
train_corrupcionMX_TS <- head(corrupcionMX_TS, length(corrupcionTS)-12)
corrupcion_ses <- HoltWinters(train_corrupcionMX_TS, seasonal = "multiplicative",)
corrupcion_ses## Holt-Winters exponential smoothing with trend and multiplicative seasonal component.
##
## Call:
## HoltWinters(x = train_corrupcionMX_TS, seasonal = "multiplicative")
##
## Smoothing parameters:
## alpha: 0.2696495
## beta : 0
## gamma: 1
##
## Coefficients:
## [,1]
## a 31.7441846
## b -0.5000000
## s1 0.9196634
## s2 1.0710623
Forecasting
corrupcion_forecast <- forecast(object = corrupcion_ses, h=500)Visualizando resultados
corrupcion_ten <- holt(train_corrupcionMX,damped = TRUE,h=3)## Warning in ets(x, "AAN", alpha = alpha, beta = beta, phi = phi, damped =
## damped, : Not enough data to use damping
corrupcionTS %>%
autoplot(series = "actual") +
autolayer(corrupcion_ten$fitted,series = "train") +
autolayer(corrupcion_ten$mean, series = "test") +
theme_minimal()Evaluar la precisián del modelo
eval_ses <- accuracy(corrupcion_forecast, test_corrupcionMX)
eval_ses## ME RMSE MAE MPE MAPE MASE
## Training set -0.07505656 3.029788 2.139891 -0.6628102 6.735800 1.0699455
## Test set -0.82584688 2.385609 1.793445 -2.8886323 6.143408 0.8967225
## ACF1 Theil's U
## Training set 0.02164339 NA
## Test set -0.64077766 2.733955
De acuerdo con el analisis de precision tenemos un error medio de: 9.25%
Utilizando el moelo SARIMA o ARIMA
Los modelos SARIMA captan el comportamiento puramente estacional de una serie, en forma similar, como hemos visto, se realiza para la componente regular o no estacional. Una serie con influencia solamente por la componente estacional puede ser descrito por un modelo SARIMA
Empezamos haciendo una prueba al conjunto de datos:
Esta prueba (dickey-fuller) sirve para en funcion del valor de P, determinar si los datos SON o NO SON estacionarios
adf.test(corrupcionTS)## Warning in adf.test(corrupcionTS): p-value smaller than printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: corrupcionTS
## Dickey-Fuller = -4.5427, Lag order = 1, p-value = 0.01
## alternative hypothesis: stationary
De acuerdo con esta prueba los datos NO son estacionarios
Analisis de mediante SARIMA
corrupacion_auto <- auto.arima(y= train_corrupcionMX, seasonal = F)
summary(corrupacion_auto)## Series: train_corrupcionMX
## ARIMA(0,0,0) with non-zero mean
##
## Coefficients:
## intercept
## 34
##
## sigma^2 estimated as 0: log likelihood=Inf
## AIC=-Inf AICc=NaN BIC=-Inf
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set 0 0 0 0 0 NaN NaN
Analizando la serie de tiempo por medio de un modelo SARIMA
train_corrupcionMX %>%
autoplot(series="actual") +
autolayer(corrupacion_auto$fitted, series ="SARIMA auto") +
theme_minimal()Visualizando la grafica de resultados de datos reales versus las predicciones (forecasting) del modelo SARIMA