Los datos del archivo adjunto corresponden a datos reales de ventas de dos referencias de productos de una empresa manufacturera. Realice una análisis y depuración de estos datos.
¿Hay datos faltantes? En caso afirmativo ¿Cómo sugeriría reemplazarlos? ¿Hay datos atípicos (outliers)? Publique sus resultados en informe en Rpubs con el procedimiento que desarrolló, sus resultados y análisis. Comparta el vínculo de la publicación en el campo disponible.
## Warning: package 'tidyverse' was built under R version 3.6.2
## Warning: package 'forecast' was built under R version 3.6.2
## Warning: package 'readxl' was built under R version 3.6.2
## Warning: package 'imputeTS' was built under R version 3.6.3
df <- read_excel("EJERCICIO ANALISIS DE DATOS.xls")
serie_ref1 <- ts(df$`Ref 1`)
serie_ref2 <- ts(df$`Ref 2`)
El paquete imputTS() posee dos funciones que permite de manera gráfica identificar los datos faltantes, estas son:
Aplicaremos ambos procedimientos a cada una de las referencias
plotNA.distribution(serie_ref1)
plotNA.distributionBar(serie_ref1)
Para las ventas de la Referencia 1 no se identificaron datos faltantes.
plotNA.distribution(serie_ref2)
plotNA.distributionBar(serie_ref2)
Se puede observar que en las ventas correspondientes a la Referencia 2 la existencia de datos faltantes en el el rango correspondiente al percentil 20 de la serie, esto es en la quinta observación de la serie.
Para saber un poco más respecto a los datos faltantes encontrados, usaremos la función statsNA()
statsNA(serie_ref2)
## [1] "Length of time series:"
## [1] 36
## [1] "-------------------------"
## [1] "Number of Missing Values:"
## [1] 1
## [1] "-------------------------"
## [1] "Percentage of Missing Values:"
## [1] "2.78%"
## [1] "-------------------------"
## [1] "Stats for Bins"
## [1] " Bin 1 (9 values from 1 to 9) : 1 NAs (11.1%)"
## [1] " Bin 2 (9 values from 10 to 18) : 0 NAs (0%)"
## [1] " Bin 3 (9 values from 19 to 27) : 0 NAs (0%)"
## [1] " Bin 4 (9 values from 28 to 36) : 0 NAs (0%)"
## [1] "-------------------------"
## [1] "Longest NA gap (series of consecutive NAs)"
## [1] "1 in a row"
## [1] "-------------------------"
## [1] "Most frequent gap size (series of consecutive NA series)"
## [1] "1 NA in a row (occuring 1 times)"
## [1] "-------------------------"
## [1] "Gap size accounting for most NAs"
## [1] "1 NA in a row (occuring 1 times, making up for overall 1 NAs)"
## [1] "-------------------------"
## [1] "Overview NA series"
## [1] " 1 NA in a row: 1 times"
Se puede observar que de las 36 observaciones hay un valor perdido, que corresponde al 2,78% del total de registros.
Para reemplazar el valor faltante, utilizaresmos la función na_interpolation() la cual realiza una interpolación lineal (por defecto) y asigna el resultado a la posición donde está el valor faltante, luego usando la función autoplot() graficaremos superpuestas tanto la serie original como la serie con el valor faltante sustituido y mostraremos el resultado.
serie_ref2_ajustada <- ts(na_interpolation(serie_ref2))
autoplot(serie_ref2_ajustada, series = "interpolada")+
autolayer(serie_ref2, series = "original")+
scale_colour_manual(values = c('interpolada'="red",
'original'="grey"))+
ylab("Ventas Referencia 2 Ajustada")
Lo primero que haremos es gráficar las series de ambas referencias para observar su comportamiento
autoplot(serie_ref1)+
ylab("Ventas Referencia 1")
autoplot(serie_ref2_ajustada)+
ylab("Venta Referencia 2")
El gráfico correspondiente a las ventas de la Referencia 1 muestra una tenden creciente en las ventas, esto sugiere que usar herramientas como el boxplot para identificar atípicos, nos puede llevar a cometer errores en el proceso.
En el caso del gráfico de las ventas de la Referencia 2 si bien muestra mucha volatilidad, la tendencia no es muy clara.
Ahora bien para identificar atípicos usaremos la función tsoutliers() del paquete forecast, el cual como se indica en el vídeo está preparado para establecer con mayor confianza qué valores de una serie de tiempo se pueden considerar como atípicos, dada la estructura que tiene la serie de tiempo que se estudie.
tsoutliers(serie_ref1)
## $index
## [1] 12 24 29 36
##
## $replacements
## [1] 4332.0 8846.5 11372.5 13353.0
Al aplicar la función a la serie de la referencia, sin embargo al saber que la serie que estamos analizando se refiere a ventas mensuales, los índices 12, 24 y 36 hacen referencia a los mesese de diciembre de los tres años observados, por lo que hay que ver este resultado con cuidado porque puede ser que esa ferencia tenga un pico de venta estacional en ese momento del año
tsoutliers(serie_ref2_ajustada)
## $index
## [1] 12 24 36
##
## $replacements
## [1] 28828.5 40310.0 31121.0
Se eobserva que los outliers identificados para las ventas de la referencia, también se corresponden a los índices que coinciden con las ventas de los meses de diciembre de cada uno de los años observados, por lo que acá aplica la misma advertencia realizada anteriormente, en el sentido que antes de proceder a sustituir estos valores por los sugeridos al aplicar la función tengamos en cuenta que los incrementos pueden estar asociados a las ventas de las respectivas temporadas navideñas.