Análisis de series de tiempo de Muertes por ahogamiento en niños menores a 5 años
Representa las Muertes por ahogamiento en niños menores a 5 años a lo largo de los años en México. Se utiliza para conocer la frecuencia con la que se dan estas muertes y como ha cambiado a lo largo de los años.
DROWN
Importación.
Importación de paquetes.
library(pacman)
p_load("DT","xfun", "readr","tidyr", "dplyr","prettydoc", "stringr","vembedr", "xfun", "ggplot2", "lubridate", "plotly","readr","corrplot","scales","anytime", "tidyverse", "lubridate", "forecast", "TTR", "MLmetrics", "tseries", "fpp", "TSstudio", "xfun")
library(readxl)
Importación de datos.
options(readr.show_col_types = FALSE)
drown <- read_csv("drowning-death-rates-under-5.csv")
anyNA(drown)
## [1] FALSE
Esto nos dice que no se tiene ningún valor faltante
Analisís de datos.
drown <- ts(drown [,4], start = 1990, end = 2019, frequency = 2)
drown
## Time Series:
## Start = c(1990, 1)
## End = c(2019, 1)
## Frequency = 2
## [1] 8.388906 8.222425 8.017183 7.700256 7.339840 6.979461 6.683143 6.488267
## [9] 6.292146 6.075895 5.764837 5.534564 5.287090 5.053605 4.806004 4.619971
## [17] 4.452318 4.305863 4.142876 3.983313 3.825256 3.647187 3.462988 3.237864
## [25] 3.055325 2.886930 2.657506 2.439821 2.337547 2.187058 8.388906 8.222425
## [33] 8.017183 7.700256 7.339840 6.979461 6.683143 6.488267 6.292146 6.075895
## [41] 5.764837 5.534564 5.287090 5.053605 4.806004 4.619971 4.452318 4.305863
## [49] 4.142876 3.983313 3.825256 3.647187 3.462988 3.237864 3.055325 2.886930
## [57] 2.657506 2.439821 2.337547
La siguiente serie de tiempo muestra la tasa de Muertes en ahogamiento en niños menores a 5 años desde 1990 a 2019
autoplot(drown)
Descomposición de la serie de tiempo.
La descomposición de una serie de tiempo es un proceso que identifica y calcula las diversas componentes existentes en una serie temporal, así como la forma en que estas se relacionan entre sí. Se utiliza para identificar componentes, reensamblando las partes para construir un pronóstico. Con lo mencionado se realizará la descomposición para poder conocer los componentes de la serie de tiempo y como es que estos mismos se relacionan.
drown_dc <- drown %>%
decompose(type="multiplicative") %>%
autoplot()
drown_dc
Validación cruzada
La validación cruzada es una técnica para evaluar modelos de ML mediante el entrenamiento de varios modelos de ML en subconjuntos de los datos de entrada disponibles y evaluarlos con el subconjunto complementario de los datos.
test_drown <- tail(drown, 6) #20% para pruebas
train_drown <- head(drown, length(drown)-6) #80% para entrenamiento
Ajuste del modelo con Holt-Winters.
Se usará el metodo Holt-Winters para el ajuste del modelo.
drown_ses <- HoltWinters(train_drown, seasonal = "multiplicative",)
drown_ses
## Holt-Winters exponential smoothing with trend and multiplicative seasonal component.
##
## Call:
## HoltWinters(x = train_drown, seasonal = "multiplicative")
##
## Smoothing parameters:
## alpha: 1
## beta : 0
## gamma: 1
##
## Coefficients:
## [,1]
## a 3.4589937
## b -0.2234730
## s1 0.9988452
## s2 1.0011548
Forecasting
drown_forecast <- forecast(object = drown_ses, h=11)
Visualizando resultados
drown %>%
autoplot(series = "actual") +
autolayer(drown_forecast$fitted, series = "train") +
autolayer(drown_forecast$mean, series = "test") +
theme_minimal()
## Warning: Removed 2 row(s) containing missing values (geom_path).
Evaluar la precisión del modelo
eval_ses <- accuracy(drown_forecast, test_drown)
eval_ses
## ME RMSE MAE MPE MAPE MASE
## Training set 0.12600264 0.9018968 0.18255949 1.823383 2.673268 0.2764853
## Test set 0.09245649 0.1134196 0.09245649 3.631802 3.631802 0.1400248
## ACF1 Theil's U
## Training set 0.006934401 NA
## Test set 0.195634903 0.7421043
De acuerdo con la prueba de precision el modelo tiene un error medio de: 19.4%
Utilizando el modelo 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 (P,D,Q)
Empezaremos haciendo una prueba al conjunto de datos
adf.test(drown)
##
## Augmented Dickey-Fuller Test
##
## data: drown
## Dickey-Fuller = -2.1913, Lag order = 3, p-value = 0.4975
## alternative hypothesis: stationary
Deacuerdo con el valor de P, los datos son estacionarios porque son mayores a 0.05
Analisis de ajuste
drown_diff <- drown %>%
diff(lag=12) %>%
diff(lag=1)
drown_diff %>%
autoplot()
Analizando la serie de tiempo por medio de un modelo ARIMA
drown_auto <- auto.arima(y = train_drown, seasonal = T)
summary(drown_auto)
## Series: train_drown
## ARIMA(1,0,0) with non-zero mean
##
## Coefficients:
## ar1 mean
## 0.8857 5.4422
## s.e. 0.0647 0.9189
##
## sigma^2 = 0.7808: log likelihood = -68.4
## AIC=142.79 AICc=143.28 BIC=148.7
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -0.07901075 0.8668068 0.3719827 -4.223656 7.723828 0.5633656
## ACF1
## Training set 0.03858599
Visualizando la grafica de resultados de datos reales versus las predicciones (forecasting) del modelo SARIMA
Datos reales vs SARIMA
train_drown %>%
autoplot(series= "actual") +
autolayer (drown_auto$fitted, series = "SARIMA auto") +
theme_minimal()
Conclusion
Podemos darnos cuenta que las muertes bajan y suben constantemente, nos dimos cuenta gracias a al dickey-fuller test que los datos son estacionarios por los que la frecuencia de los datos no cambian mucho con el paso del tiempo.
Descargas
Descargar datos
xfun::embed_file("drowning-death-rates-under-5.csv")