Punto #1

dfacci <- read.csv("/Users/juansebastianquintanacontreras/Documents/6 semestre/Accidentalidad_en_Barranquilla_20240826.csv")
DT::datatable(dfacci, options = list(pageLength = 5))
names(dfacci)
##  [1] "FECHA_ACCIDENTE"                  "HORA_ACCIDENTE"                  
##  [3] "GRAVEDAD_ACCIDENTE"               "CLASE_ACCIDENTE"                 
##  [5] "SITIO_EXACTO_ACCIDENTE"           "CANT_HERIDOS_EN._SITIO_ACCIDENTE"
##  [7] "CANT_MUERTOS_EN._SITIO_ACCIDENTE" "CANTIDAD_ACCIDENTES"             
##  [9] "AÑO_ACCIDENTE"                    "MES_ACCIDENTE"                   
## [11] "DIA_ACCIDENTE"
dim(dfacci)
## [1] 25610    11
str(dfacci)
## 'data.frame':    25610 obs. of  11 variables:
##  $ FECHA_ACCIDENTE                 : chr  "2018-01-01T00:00:00.000" "2018-01-01T00:00:00.000" "2018-01-01T00:00:00.000" "2018-01-01T00:00:00.000" ...
##  $ HORA_ACCIDENTE                  : chr  "01:30:00:am" "02:00:00:pm" "04:00:00:am" "04:30:00:am" ...
##  $ GRAVEDAD_ACCIDENTE              : chr  "Con heridos" "Solo daños" "Solo daños" "Solo daños" ...
##  $ CLASE_ACCIDENTE                 : chr  "Atropello" "Choque" "Choque" "Choque" ...
##  $ SITIO_EXACTO_ACCIDENTE          : chr  "CL 87 9H 24" "CL 110 CR 46" "AV CIRCUNVALAR CR 9G" "CLLE 72 CRA 29" ...
##  $ CANT_HERIDOS_EN._SITIO_ACCIDENTE: int  1 NA NA NA NA 3 1 NA NA NA ...
##  $ CANT_MUERTOS_EN._SITIO_ACCIDENTE: int  NA NA NA NA NA NA NA NA NA NA ...
##  $ CANTIDAD_ACCIDENTES             : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ AÑO_ACCIDENTE                   : int  2018 2018 2018 2018 2018 2018 2018 2018 2018 2018 ...
##  $ MES_ACCIDENTE                   : chr  "January" "January" "January" "January" ...
##  $ DIA_ACCIDENTE                   : chr  "Mon" "Mon" "Mon" "Mon" ...

Revisión de la Base de Datos

La base de datos contiene 25,610 observaciones y 11 variables. A continuación, se describen las variables:

  • FECHA_ACCIDENTE (Categórica): Fecha en la que ocurrió el accidente.
  • HORA_ACCIDENTE (Categórica): Hora exacta en la que ocurrió el accidente.
  • GRAVEDAD_ACCIDENTE (Categórica): Nivel de gravedad del accidente.
  • CLASE_ACCIDENTE (Categórica): Tipo o clase de accidente (ej. choque, atropello).
  • SITIO_EXACTO_ACCIDENTE (Categórica): Lugar exacto donde ocurrió el accidente.
  • CANT_HERIDOS_EN._SITIO_ACCIDENTE (Numérica): Cantidad de personas heridas en el sitio del accidente.
  • CANT_MUERTOS_EN._SITIO_ACCIDENTE (Numérica): Cantidad de personas fallecidas en el sitio del accidente.
  • CANTIDAD_ACCIDENTES (Numérica): Número de accidentes registrados en esa fecha.
  • AÑO_ACCIDENTE (Numérica): Año en el que ocurrió el accidente.
  • MES_ACCIDENTE (Categórica): Mes en el que ocurrió el accidente.
  • DIA_ACCIDENTE (Categórica): Día del mes en que ocurrió el accidente.

Como observamos, vamos a realizar un análisis separando las variables categóricas y las numéricas.

Analisis de las variables categoricas

summary(dfacci$FECHA_ACCIDENTE)
##    Length     Class      Mode 
##     25610 character character
summary(dfacci$HORA_ACCIDENTE)
##    Length     Class      Mode 
##     25610 character character
summary(dfacci$GRAVEDAD_ACCIDENTE)
##    Length     Class      Mode 
##     25610 character character
summary(dfacci$CLASE_ACCIDENTE)
##    Length     Class      Mode 
##     25610 character character
summary(dfacci$SITIO_EXACTO_ACCIDENTE)
##    Length     Class      Mode 
##     25610 character character
summary(dfacci$MES_ACCIDENTE)
##    Length     Class      Mode 
##     25610 character character
summary(dfacci$DIA_ACCIDENTE)
##    Length     Class      Mode 
##     25610 character character

Observamos que la cantidad de datos de las variables es de 25,610, y todas son del tipo carácter.

Analisis de variables categoricas

barplot(sort(table(dfacci$CLASE_ACCIDENTE),decreasing=TRUE), col = "lightblue", main = "Frecuencia de Clases de Accidentes", las = 2)

table(dfacci$CLASE_ACCIDENTE)
## 
##      Atropello Caida Ocupante         Choque       Incendio           Otro 
##           1344            194          23819             13            123 
##    Volcamiento 
##            117
barplot(sort(table(dfacci$GRAVEDAD_ACCIDENTE),decreasing=TRUE), col = "#FF7F50", main = "Frecuencia de Gravedad de Accidentes")

table(dfacci$GRAVEDAD_ACCIDENTE)
## 
## Con heridos Con muertos  Solo daños 
##        9901         252       15457
barplot(sort(table(dfacci$MES_ACCIDENTE),decreasing=TRUE), col = "#CAFF70", main = "Frecuencia de Mes de Accidentes", las = 2)

table(dfacci$MES_ACCIDENTE)
## 
##     April    August  December  February   January      July      June     March 
##      2010      1918      2189      2477      2349      1932      2103      2446 
##       May  November   October September 
##      2121      1995      2090      1980
barplot(sort(table(dfacci$DIA_ACCIDENTE),decreasing=TRUE), col = "#BF3EFF", main = "Frecuencia de Dia de Accidentes")

table(dfacci$DIA_ACCIDENTE)
## 
##  Fri  Mon  Sat  Sun  Thu  Tue  Wed 
## 3920 3774 3735 2577 3756 4009 3839

En esta sección, presentamos gráficas que muestran la distribución de los datos en función de varias categorías relacionadas con los accidentes.

  • En la gráfica de Clase de Accidente, la mayoría de los datos se concentran en la categoría “Choque”, con 23,819 casos, mientras que la menor concentración se encuentra en “Incendio”, con solo 13 casos.

  • En la gráfica de Gravedad de Accidentes, la mayor concentración está en “Solo daños”, con 15,457 casos, y la menor en “De muertos”, con 252 casos.

  • En la gráfica de Mes de Accidente, febrero tiene el mayor número de accidentes, con 2,477, y agosto tiene el menor, con 1,918 accidentes en el mes.

  • En la gráfica de Día de Accidente, el día con mayor concentración de accidentes es el martes, con 4,009, y el día con menor concentración es el domingo, con 2,577.

## Warning: Removed 20059 rows containing non-finite values (`stat_count()`).

Analisis de variables categoricas entre si

addmargins(table(dfacci$CLASE_ACCIDENTE, dfacci$GRAVEDAD_ACCIDENTE))
##                 
##                  Con heridos Con muertos Solo daños   Sum
##   Atropello             1266          78          0  1344
##   Caida Ocupante         188           6          0   194
##   Choque                8277         157      15385 23819
##   Incendio                 1           0         12    13
##   Otro                    83           8         32   123
##   Volcamiento             86           3         28   117
##   Sum                   9901         252      15457 25610
chisq.test(table(dfacci$CLASE_ACCIDENTE, dfacci$GRAVEDAD_ACCIDENTE))
## 
##  Pearson's Chi-squared test
## 
## data:  table(dfacci$CLASE_ACCIDENTE, dfacci$GRAVEDAD_ACCIDENTE)
## X-squared = 2846.9, df = 10, p-value < 2.2e-16
addmargins(table(dfacci$DIA_ACCIDENTE, dfacci$GRAVEDAD_ACCIDENTE))
##      
##       Con heridos Con muertos Solo daños   Sum
##   Fri        1468          33       2419  3920
##   Mon        1507          43       2224  3774
##   Sat        1474          36       2225  3735
##   Sun        1256          55       1266  2577
##   Thu        1355          28       2373  3756
##   Tue        1439          25       2545  4009
##   Wed        1402          32       2405  3839
##   Sum        9901         252      15457 25610
chisq.test(table(dfacci$DIA_ACCIDENTE, dfacci$GRAVEDAD_ACCIDENTE))
## 
##  Pearson's Chi-squared test
## 
## data:  table(dfacci$DIA_ACCIDENTE, dfacci$GRAVEDAD_ACCIDENTE)
## X-squared = 206.58, df = 12, p-value < 2.2e-16
addmargins(table(dfacci$MES_ACCIDENTE, dfacci$CLASE_ACCIDENTE))
##            
##             Atropello Caida Ocupante Choque Incendio  Otro Volcamiento   Sum
##   April            98             20   1871        0    12           9  2010
##   August           83             13   1800        1    12           9  1918
##   December        121             21   2028        2    10           7  2189
##   February        130             15   2310        1     7          14  2477
##   January         133             20   2181        2     9           4  2349
##   July             83              5   1831        1     6           6  1932
##   June            114             12   1952        0    11          14  2103
##   March           126             20   2268        1    17          14  2446
##   May             104             23   1968        2    11          13  2121
##   November        110             16   1849        0    11           9  1995
##   October         123             16   1930        2     8          11  2090
##   September       119             13   1831        1     9           7  1980
##   Sum            1344            194  23819       13   123         117 25610
chisq.test(table(dfacci$MES_ACCIDENTE, dfacci$CLASE_ACCIDENTE))
## 
##  Pearson's Chi-squared test
## 
## data:  table(dfacci$MES_ACCIDENTE, dfacci$CLASE_ACCIDENTE)
## X-squared = 53.967, df = 55, p-value = 0.5141

1. Distribución por Mes y Clase de Accidente:

  • La clase de accidente más frecuente es Choque, con 23,819 casos, mientras que la menos común es Incendio con solo 13 incidentes.

  • Los accidentes parecen estar distribuidos de manera más uniforme a lo largo de los meses, con febrero registrando la mayor cantidad de accidentes (2,477) y agosto la menor (1,918).

2. Distribución por Gravedad de Accidentes y Clase de Accidente

  • Los accidentes con Solo daños son los más comunes, con 15,457 casos, en contraste con los accidentes Con muertos, que suman 252 casos.
  • En particular, los Choques representan una gran mayoría de los casos de Solo daños (15,385 de 15,457).

3. Distribución por Día de la Semana y Gravedad de Accidentes

  • Los días de la semana también muestran variaciones en la cantidad de accidentes, con el jueves registrando 4,009 accidentes y el domingo siendo el día con menos accidentes (2,577).
  • Los días más peligrosos, en términos de muertes, parecen ser el domingo, con 55 muertes reportadas en accidentes.

4. Pruebas de Chi-cuadrado

  • En todos los casos, las pruebas de Chi-cuadrado muestran p-valores mayores a 0.05, lo que sugiere que no hay una asociación estadísticamente significativa entre los meses y las clases de accidentes.
  • Sin embargo, las asociaciones entre las clases de accidentes, la gravedad de los accidentes y los días de la semana sí parecen ser significativas.

Analisis de las variables numericas

summary(dfacci$CANT_HERIDOS_EN._SITIO_ACCIDENTE)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##   1.000   1.000   1.000   1.472   2.000  42.000   15626
summary(dfacci$CANT_MUERTOS_EN._SITIO_ACCIDENTE)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##   1.000   1.000   1.000   1.036   1.000   2.000   25358
summary(dfacci$CANTIDAD_ACCIDENTES)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##       1       1       1       1       1       2
summary(dfacci$AÑO_ACCIDENTE)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    2018    2019    2020    2020    2021    2024
hist(dfacci$CANT_HERIDOS_EN._SITIO_ACCIDENTE, 
     main = "Distribución de Heridos en el Sitio del Accidente", 
     xlab = "Cantidad de Heridos en el Sitio del Accidente", col = "lightblue", border = "blue")

boxcanth <- boxplot(dfacci$CANT_HERIDOS_EN._SITIO_ACCIDENTE, 
        main = "Boxplot de Heridos en el Sitio del Accidente", 
        ylab = "Cantidad de Heridos en el Sitio del Accidente", col = "lightblue", border = "blue")

hist(dfacci$CANT_MUERTOS_EN._SITIO_ACCIDENTE, 
     main = "Distribución de Muertos en el Sitio del Accidente", 
     xlab = "Cantidad de Muertos en el Sitio del Accidente", col = "lightcoral", border = "red")

boxcantm <- boxplot(dfacci$CANT_MUERTOS_EN._SITIO_ACCIDENTE, 
        main = "Boxplot de Muertos en el Sitio del Accidente", 
        ylab = "Cantidad de Muertos en el Sitio del Accidente", col = "lightcoral", border = "red")

Análisis de Variables Numéricas

  1. Distribución de Heridos en el Sitio del Accidente:
    • Se observó que la mediana y la moda en la cantidad de heridos en el sitio del accidente es de 1. Sin embargo, la media muestra una ligera elevación, lo que sugiere la presencia de algunos casos con un número significativo de heridos.
  2. Distribución de Muertos en el Sitio del Accidente:
    • Similar a la variable anterior, la mediana y moda son de 1, lo que indica que la mayoría de los accidentes reportados tienen un solo fallecido. La distribución parece bastante homogénea, con un máximo de 2 muertos por accidente y presencia de valores NA.
  3. Cantidad de Accidentes:
    • La variable CANTIDAD_ACCIDENTES parece estar repartido en 1 y 2, con la mayoría de los registros reportando un solo accidente y muy pocos casos con dos accidentes.
  4. Distribución por Años:
    • El análisis de la variable AÑO_ACCIDENTE muestra que los datos abarcan desde 2018 hasta 2024. Hay una disminución notable en los reportes de accidentes en los últimos años.

Mapa de Calor de Correlaciones

Se elaboró un mapa de calor para evaluar las correlaciones entre las variables numéricas:

  • Una correlación moderada entre CANT_HERIDOS_EN._SITIO_ACCIDENTE y CANT_MUERTOS_EN._SITIO_ACCIDENTE (0.23), lo cual es lógico, dado que en accidentes con más heridos es más probable que también haya fallecidos.
  • CANTIDAD_ACCIDENTES muestra una correlación positiva perfecta consigo misma y con AÑO_ACCIDENTE, lo cual es esperable.
  • Las correlaciones entre otras variables son bajas.
canth <- table(dfacci$CANT_HERIDOS_EN._SITIO_ACCIDENTE)
canth
## 
##    1    2    3    4    5    6    7    8    9   10   11   12   13   14   15   16 
## 6911 2301  469  155   57   29   14    9    6    7    6    7    2    2    1    1 
##   18   19   20   21   22   23   42 
##    1    1    1    1    1    1    1
cantm <- table(dfacci$CANT_MUERTOS_EN._SITIO_ACCIDENTE)
cantm
## 
##   1   2 
## 243   9
canta <- table(dfacci$CANTIDAD_ACCIDENTES)
canta
## 
##     1     2 
## 25605     5
anoa <- table(dfacci$AÑO_ACCIDENTE)
anoa
## 
## 2018 2019 2020 2021 2022 2023 2024 
## 5898 5645 3281 4700 3683 1662  741

Tablas de Frecuencia

Se presentan las tablas de frecuencia para las variables categóricas y numéricas discretas:

  • Heridos en el Sitio del Accidente: La mayoría de los registros indican 1 herido, con una disminución notable en la frecuencia de valores más altos.
  • Muertos en el Sitio del Accidente: De manera similar, la mayoría de los registros reportan 1 muerto, con muy pocos casos de 2 muertos.
  • Cantidad de Accidentes: Como se mencionó anteriormente, la mayoría de los registros reportan un solo accidente.
  • Distribución por Años: Los años 2018 y 2019 tienen la mayor cantidad de reportes, con una disminución gradual en los años posteriores.

Filtrar la base de datos para entender mejor su estructura.

df2020 <- dfacci[dfacci$AÑO_ACCIDENTE == 2020, ]
head(df2020)
##       FECHA_ACCIDENTE HORA_ACCIDENTE GRAVEDAD_ACCIDENTE CLASE_ACCIDENTE
## 11544      2020-01-01    05:00:00:pm         Solo daños          Choque
## 11545      2020-01-01    05:30:00:am         Solo daños          Choque
## 11546      2020-01-01    05:40:00:pm         Solo daños          Choque
## 11547      2020-01-01    08:00:00:pm        Con heridos          Choque
## 11548      2020-01-01    08:10:00:pm         Solo daños          Choque
## 11549      2020-01-01    09:00:00:pm         Solo daños          Choque
##       SITIO_EXACTO_ACCIDENTE CANT_HERIDOS_EN._SITIO_ACCIDENTE
## 11544   AV CIRCUNVALAR CL 96                               NA
## 11545            CR 10 CL 10                               NA
## 11546           CL 114 CR 42                               NA
## 11547            CL 86 CR 9L                                1
## 11548         CL 72 CR 44 25                               NA
## 11549             CL 19 CR 2                               NA
##       CANT_MUERTOS_EN._SITIO_ACCIDENTE CANTIDAD_ACCIDENTES AÑO_ACCIDENTE
## 11544                               NA                   1          2020
## 11545                               NA                   1          2020
## 11546                               NA                   1          2020
## 11547                               NA                   1          2020
## 11548                               NA                   1          2020
## 11549                               NA                   1          2020
##       MES_ACCIDENTE DIA_ACCIDENTE
## 11544       January           Wed
## 11545       January           Wed
## 11546       January           Wed
## 11547       January           Wed
## 11548       January           Wed
## 11549       January           Wed
dfheri <- dfacci[dfacci$CANT_HERIDOS_EN._SITIO_ACCIDENTE > 0, ]
head(dfheri)
##      FECHA_ACCIDENTE HORA_ACCIDENTE GRAVEDAD_ACCIDENTE CLASE_ACCIDENTE
## 1         2018-01-01    01:30:00:am        Con heridos       Atropello
## NA              <NA>           <NA>               <NA>            <NA>
## NA.1            <NA>           <NA>               <NA>            <NA>
## NA.2            <NA>           <NA>               <NA>            <NA>
## NA.3            <NA>           <NA>               <NA>            <NA>
## 6         2018-01-01    06:00:00:pm        Con heridos          Choque
##      SITIO_EXACTO_ACCIDENTE CANT_HERIDOS_EN._SITIO_ACCIDENTE
## 1               CL 87 9H 24                                1
## NA                     <NA>                               NA
## NA.1                   <NA>                               NA
## NA.2                   <NA>                               NA
## NA.3                   <NA>                               NA
## 6                CR 8 CL 41                                3
##      CANT_MUERTOS_EN._SITIO_ACCIDENTE CANTIDAD_ACCIDENTES AÑO_ACCIDENTE
## 1                                  NA                   1          2018
## NA                                 NA                  NA            NA
## NA.1                               NA                  NA            NA
## NA.2                               NA                  NA            NA
## NA.3                               NA                  NA            NA
## 6                                  NA                   1          2018
##      MES_ACCIDENTE DIA_ACCIDENTE
## 1          January           Mon
## NA            <NA>          <NA>
## NA.1          <NA>          <NA>
## NA.2          <NA>          <NA>
## NA.3          <NA>          <NA>
## 6          January           Mon
dfchoq <- dfacci[dfacci$CLASE_ACCIDENTE == "Choque", ]
head(dfchoq)
##   FECHA_ACCIDENTE HORA_ACCIDENTE GRAVEDAD_ACCIDENTE CLASE_ACCIDENTE
## 2      2018-01-01    02:00:00:pm         Solo daños          Choque
## 3      2018-01-01    04:00:00:am         Solo daños          Choque
## 4      2018-01-01    04:30:00:am         Solo daños          Choque
## 5      2018-01-01    05:20:00:pm         Solo daños          Choque
## 6      2018-01-01    06:00:00:pm        Con heridos          Choque
## 8      2018-01-02    02:30:00:pm         Solo daños          Choque
##   SITIO_EXACTO_ACCIDENTE CANT_HERIDOS_EN._SITIO_ACCIDENTE
## 2           CL 110 CR 46                               NA
## 3   AV CIRCUNVALAR CR 9G                               NA
## 4         CLLE 72 CRA 29                               NA
## 5        VIA 40 CALLE 75                               NA
## 6             CR 8 CL 41                                3
## 8       CARRERA 25 37-42                               NA
##   CANT_MUERTOS_EN._SITIO_ACCIDENTE CANTIDAD_ACCIDENTES AÑO_ACCIDENTE
## 2                               NA                   1          2018
## 3                               NA                   1          2018
## 4                               NA                   1          2018
## 5                               NA                   1          2018
## 6                               NA                   1          2018
## 8                               NA                   1          2018
##   MES_ACCIDENTE DIA_ACCIDENTE
## 2       January           Mon
## 3       January           Mon
## 4       January           Mon
## 5       January           Mon
## 6       January           Mon
## 8       January           Tue
dfmanan <- dfacci[dfacci$MES_ACCIDENTE == "July", ]
head(dfmanan)  
##      FECHA_ACCIDENTE HORA_ACCIDENTE GRAVEDAD_ACCIDENTE CLASE_ACCIDENTE
## 2918      2018-07-01    01:30:00:am        Con heridos       Atropello
## 2919      2018-07-01    02:00:00:pm         Solo daños          Choque
## 2920      2018-07-01    02:00:00:pm         Solo daños          Choque
## 2921      2018-07-01    03:00:00:pm         Solo daños          Choque
## 2922      2018-07-01    05:00:00:pm        Con heridos          Choque
## 2923      2018-07-01    05:30:00:pm         Solo daños          Choque
##              SITIO_EXACTO_ACCIDENTE CANT_HERIDOS_EN._SITIO_ACCIDENTE
## 2918           CARRERA 15 SUR 72-16                                1
## 2919           CARRERA 46 CALLE 42B                               NA
## 2920                    CL 74 CR 57                               NA
## 2921                     CL 5 CR 30                               NA
## 2922 AVENIDA CIRCUNVALAR CARRERA 39                                2
## 2923            CALLE 94 CARRERA 4B                               NA
##      CANT_MUERTOS_EN._SITIO_ACCIDENTE CANTIDAD_ACCIDENTES AÑO_ACCIDENTE
## 2918                               NA                   1          2018
## 2919                               NA                   1          2018
## 2920                               NA                   1          2018
## 2921                               NA                   1          2018
## 2922                               NA                   1          2018
## 2923                               NA                   1          2018
##      MES_ACCIDENTE DIA_ACCIDENTE
## 2918          July           Sun
## 2919          July           Sun
## 2920          July           Sun
## 2921          July           Sun
## 2922          July           Sun
## 2923          July           Sun
dfsit <- dfacci[dfacci$SITIO_EXACTO_ACCIDENTE == "CL 110 CR 9G", ]
head(dfsit)
##      FECHA_ACCIDENTE HORA_ACCIDENTE GRAVEDAD_ACCIDENTE CLASE_ACCIDENTE
## 1220      2018-03-17    09:00:00:pm        Con heridos          Choque
## 3240      2018-07-21    12:40:00:pm         Solo daños          Choque
## 3669      2018-08-20    10:30:00:am        Con heridos          Choque
## 3674      2018-08-21    02:00:00:pm        Con heridos          Choque
## 3796      2018-08-29    08:30:00:am        Con heridos          Choque
## 4096      2018-09-16    10:00:00:am         Solo daños          Choque
##      SITIO_EXACTO_ACCIDENTE CANT_HERIDOS_EN._SITIO_ACCIDENTE
## 1220           CL 110 CR 9G                                2
## 3240           CL 110 CR 9G                               NA
## 3669           CL 110 CR 9G                                2
## 3674           CL 110 CR 9G                                2
## 3796           CL 110 CR 9G                                1
## 4096           CL 110 CR 9G                               NA
##      CANT_MUERTOS_EN._SITIO_ACCIDENTE CANTIDAD_ACCIDENTES AÑO_ACCIDENTE
## 1220                               NA                   1          2018
## 3240                               NA                   1          2018
## 3669                               NA                   1          2018
## 3674                               NA                   1          2018
## 3796                               NA                   1          2018
## 4096                               NA                   1          2018
##      MES_ACCIDENTE DIA_ACCIDENTE
## 1220         March           Sat
## 3240          July           Sat
## 3669        August           Mon
## 3674        August           Tue
## 3796        August           Wed
## 4096     September           Sun

Observamos cómo se distribuyen los accidentes en el año 2020, además de los accidentes que resultan en uno o más heridos. También analizamos los accidentes clasificados como choques y aquellos accidentes que pasaron en el mes de “July”. Por último, se muestra el lugar que previamente se identificó como el sitio con más accidentes.

Identifique los valores NA (Not Available)

sum(is.na(dfacci))  
## [1] 40984
colSums(is.na(dfacci))  
##                  FECHA_ACCIDENTE                   HORA_ACCIDENTE 
##                                0                                0 
##               GRAVEDAD_ACCIDENTE                  CLASE_ACCIDENTE 
##                                0                                0 
##           SITIO_EXACTO_ACCIDENTE CANT_HERIDOS_EN._SITIO_ACCIDENTE 
##                                0                            15626 
## CANT_MUERTOS_EN._SITIO_ACCIDENTE              CANTIDAD_ACCIDENTES 
##                            25358                                0 
##                    AÑO_ACCIDENTE                    MES_ACCIDENTE 
##                                0                                0 
##                    DIA_ACCIDENTE 
##                                0
unique(dfacci$CANT_HERIDOS_EN._SITIO_ACCIDENTE)
##  [1]  1 NA  3  2  5  7  8  4 11  6 10 12 20 22 13  9 16 14 42 19 21 23 18 15
unique(dfacci$CANT_MUERTOS_EN._SITIO_ACCIDENTE)
## [1] NA  1  2
suppressWarnings(require(Amelia))
## Loading required package: Amelia
## Loading required package: Rcpp
## ## 
## ## Amelia II: Multiple Imputation
## ## (Version 1.8.2, built: 2024-04-10)
## ## Copyright (C) 2005-2024 James Honaker, Gary King and Matthew Blackwell
## ## Refer to http://gking.harvard.edu/amelia/ for more information
## ##
suppressWarnings(missmap(dfacci))

suppressWarnings(missmap(as.data.frame(dfacci$CANT_HERIDOS_EN._SITIO_ACCIDENTE)))

suppressWarnings(missmap(as.data.frame(dfacci$CANT_MUERTOS_EN._SITIO_ACCIDENTE)))

Análisis de los NA’s:

Al analizar los valores NA en las variables CANT_HERIDOS_EN._SITIO_ACCIDENTE y CANT_MUERTOS_EN._SITIO_ACCIDENTE, se puede deducir que estos representan un “0” en esos casos, ya que los valores presentes en estas variables no incluyen el 0, como se observó anteriormente. No obstante, vamos a proceder con una serie de imputaciones utilizando los métodos dados en clase, como “norm.nob”, “norm”, “pmm” y “norm.predict”.

df_subset <- data.frame(
  CANT_HERIDOS_EN_SITIO_ACCIDENTE = dfacci$CANT_HERIDOS_EN._SITIO_ACCIDENTE,
  CANT_MUERTOS_EN_SITIO_ACCIDENTE = dfacci$CANT_MUERTOS_EN._SITIO_ACCIDENTE
)

methods1 <- c("pmm", "norm.predict")

impucamyh1 <- mice(df_subset, method = methods1, m = 1, maxit = 5)
## 
##  iter imp variable
##   1   1  CANT_HERIDOS_EN_SITIO_ACCIDENTE  CANT_MUERTOS_EN_SITIO_ACCIDENTE
##   2   1  CANT_HERIDOS_EN_SITIO_ACCIDENTE  CANT_MUERTOS_EN_SITIO_ACCIDENTE
##   3   1  CANT_HERIDOS_EN_SITIO_ACCIDENTE  CANT_MUERTOS_EN_SITIO_ACCIDENTE
##   4   1  CANT_HERIDOS_EN_SITIO_ACCIDENTE  CANT_MUERTOS_EN_SITIO_ACCIDENTE
##   5   1  CANT_HERIDOS_EN_SITIO_ACCIDENTE  CANT_MUERTOS_EN_SITIO_ACCIDENTE
imp1 <- complete(impucamyh1)
head(imp1)
##   CANT_HERIDOS_EN_SITIO_ACCIDENTE CANT_MUERTOS_EN_SITIO_ACCIDENTE
## 1                               1                        1.008943
## 2                               1                        1.008943
## 3                               1                        1.008943
## 4                               1                        1.008943
## 5                               1                        1.008943
## 6                               3                        1.084745
methods2 <- c("norm.nob", "norm")

impucamyh2 <- mice(df_subset, method = methods2, m = 1, maxit = 5)
## 
##  iter imp variable
##   1   1  CANT_HERIDOS_EN_SITIO_ACCIDENTE  CANT_MUERTOS_EN_SITIO_ACCIDENTE
##   2   1  CANT_HERIDOS_EN_SITIO_ACCIDENTE  CANT_MUERTOS_EN_SITIO_ACCIDENTE
##   3   1  CANT_HERIDOS_EN_SITIO_ACCIDENTE  CANT_MUERTOS_EN_SITIO_ACCIDENTE
##   4   1  CANT_HERIDOS_EN_SITIO_ACCIDENTE  CANT_MUERTOS_EN_SITIO_ACCIDENTE
##   5   1  CANT_HERIDOS_EN_SITIO_ACCIDENTE  CANT_MUERTOS_EN_SITIO_ACCIDENTE
imp2 <- complete(impucamyh2)
head(imp2, main = "metodos de inputacion norm.nob, norm", )
##   CANT_HERIDOS_EN_SITIO_ACCIDENTE CANT_MUERTOS_EN_SITIO_ACCIDENTE
## 1                       1.0000000                       1.0144790
## 2                       0.6917852                       0.8377020
## 3                       0.9222113                       1.0686513
## 4                       1.5872494                       1.0712101
## 5                       1.8544242                       0.6772743
## 6                       3.0000000                       1.0298078

Observamos cómo, mediante los métodos de imputación, se realizó el respectivo reemplazo de las variables con valores NA según el método utilizado.

Analisis de los datos atipicos:

p1 <- ggplot(dfacci, aes(y = CANT_HERIDOS_EN._SITIO_ACCIDENTE)) +
  geom_boxplot(fill = "lightblue", color = "blue") +
  labs(title = "Boxplot de Heridos en el Sitio del Accidente", y = "Cantidad de Heridos")

p2 <- ggplot(dfacci, aes(y = CANT_MUERTOS_EN._SITIO_ACCIDENTE)) +
  geom_boxplot(fill = "lightcoral", color = "red") +
  labs(title = "Boxplot de Muertos en el Sitio del Accidente", y = "Cantidad de Muertos")

p3 <- ggplot(dfacci, aes(y = CANTIDAD_ACCIDENTES)) +
  geom_boxplot(fill = "darkolivegreen2", color = "green") +
  labs(title = "Boxplot de Cantidad de Accidentes", y = "Cantidad de Accidentes")

p4 <- ggplot(dfacci, aes(y = AÑO_ACCIDENTE)) +
  geom_boxplot(fill = "orchid1", color = "purple") +
  labs(title = "Boxplot del Año del Accidente", y = "Año del Accidente")

grid.arrange(p1, p2, p3, p4, ncol = 2)
## Warning: Removed 15626 rows containing non-finite values (`stat_boxplot()`).
## Warning: Removed 25358 rows containing non-finite values (`stat_boxplot()`).

Análisis de Valores Atípicos con el Test de Grubbs

CANT_HERIDOS_EN._SITIO_ACCIDENTE, CANT_MUERTOS_EN._SITIO_ACCIDENTE, CANTIDAD_ACCIDENTES, y AÑO_ACCIDENTE. A continuación, se describen los resultados obtenidos para cada variable.

Hipótesis:

  • Hipótesis nula (H0): El valor más alto o más bajo no es un dato atipico.
  • Hipótesis alternativa (H1): El valor más alto o más bajo es un dato atipico.
grubbs.test(dfacci$CANT_HERIDOS_EN._SITIO_ACCIDENTE)
## 
##  Grubbs test for one outlier
## 
## data:  dfacci$CANT_HERIDOS_EN._SITIO_ACCIDENTE
## G = 35.03637, U = 0.87702, p-value < 2.2e-16
## alternative hypothesis: highest value 42 is an outlier
grubbs.test(dfacci$CANT_HERIDOS_EN._SITIO_ACCIDENTE, opposite = TRUE)
## 
##  Grubbs test for one outlier
## 
## data:  dfacci$CANT_HERIDOS_EN._SITIO_ACCIDENTE
## G = 0.40774, U = 0.99998, p-value = 1
## alternative hypothesis: lowest value 1 is an outlier
grubbs.test(dfacci$CANT_MUERTOS_EN._SITIO_ACCIDENTE)
## 
##  Grubbs test for one outlier
## 
## data:  dfacci$CANT_MUERTOS_EN._SITIO_ACCIDENTE
## G = 5.18583, U = 0.89243, p-value = 1.246e-05
## alternative hypothesis: highest value 2 is an outlier
grubbs.test(dfacci$CANT_MUERTOS_EN._SITIO_ACCIDENTE, opposite = TRUE)
## 
##  Grubbs test for one outlier
## 
## data:  dfacci$CANT_MUERTOS_EN._SITIO_ACCIDENTE
## G = 0.19207, U = 0.99985, p-value = 1
## alternative hypothesis: lowest value 1 is an outlier
grubbs.test(dfacci$CANTIDAD_ACCIDENTES)
## 
##  Grubbs test for one outlier
## 
## data:  dfacci$CANTIDAD_ACCIDENTES
## G = 71.55977, U = 0.80003, p-value < 2.2e-16
## alternative hypothesis: highest value 2 is an outlier
grubbs.test(dfacci$CANTIDAD_ACCIDENTES, opposite = TRUE)
## 
##  Grubbs test for one outlier
## 
## data:  dfacci$CANTIDAD_ACCIDENTES
## G = 0.013974, U = 1.000000, p-value = 1
## alternative hypothesis: lowest value 1 is an outlier
grubbs.test(dfacci$AÑO_ACCIDENTE)
## 
##  Grubbs test for one outlier
## 
## data:  dfacci$AÑO_ACCIDENTE
## G = 2.2752, U = 0.9998, p-value = 1
## alternative hypothesis: highest value 2024 is an outlier
grubbs.test(dfacci$AÑO_ACCIDENTE, opposite = TRUE)
## 
##  Grubbs test for one outlier
## 
## data:  dfacci$AÑO_ACCIDENTE
## G = 1.22560, U = 0.99994, p-value = 1
## alternative hypothesis: lowest value 2018 is an outlier

1. Variable: CANT_HERIDOS_EN._SITIO_ACCIDENTE:

  • Valor más alto (42): G = 35.04, p < 2.2e-16. Conclusión: Dado que el valor p es muy pequeño, rechazamos la hipótesis nula. Por lo tanto, el valor más alto 42 es un dato atipico.
  • Valor más bajo (1): G = 0.41, p = 1. Conclusión: Dado que el valor p es alto, no rechazamos la hipótesis nula. El valor más bajo 1 no es un dato atipico.

2. Variable: CANT_MUERTOS_EN._SITIO_ACCIDENTE:

  • Valor más alto (2): G = 5.19, p = 0.00001246. Conclusión: Dado que el valor p es muy pequeño, rechazamos la hipótesis nula. Por lo tanto, el valor más alto 2 es un dato atipico.
  • Valor más bajo (1): G = 0.19, p = 1. Conclusión: Dado que el valor p es alto, no rechazamos la hipótesis nula. El valor más bajo 1 no es un dato atipico.

3. Variable: CANTIDAD_ACCIDENTES:

  • Valor más alto (2): G = 71.56, p < 2.2e-16. Conclusión: Dado que el valor p es muy pequeño, rechazamos la hipótesis nula. Por lo tanto, el valor más alto 2 es un dato atipico.
  • Valor más bajo (1): G = 0.01, p = 1. Conclusión: Dado que el valor p es alto, no rechazamos la hipótesis nula. El valor más bajo 1 no es un dato atipico.

4. Variable: AÑO_ACCIDENTE

  • Valor más alto (2024): G = 2.28, p = 1. Conclusión: Dado que el valor p es alto, no rechazamos la hipótesis nula. El valor más alto 2024 no es un dato atipico.
  • Valor más bajo (2018): G = 1.23, p = 1. Conclusión: Dado que el valor p es alto, no rechazamos la hipótesis nula. El valor más bajo 2018 no es un dato atipico.
test <- rosnerTest(dfacci$CANT_HERIDOS_EN._SITIO_ACCIDENTE, k =152)
## Warning in rosnerTest(dfacci$CANT_HERIDOS_EN._SITIO_ACCIDENTE, k = 152): 15626
## observations with NA/NaN/Inf in 'x' removed.
## Warning in rosnerTest(dfacci$CANT_HERIDOS_EN._SITIO_ACCIDENTE, k = 152): The true Type I error may be larger than assumed.
## Although the help file for 'rosnerTest' has a table with information
## on the estimated Type I error level,
## simulations were not run for k > 10 or k > floor(n/2).
test$all.stats
##       i   Mean.i      SD.i Value Obs.Num     R.i+1 lambda.i+1 Outlier
## 1     0 1.471655 1.1567509    42   21268 35.036365   4.562185    TRUE
## 2     1 1.467595 1.0833463    23   24471 19.875828   4.562164    TRUE
## 3     2 1.465438 1.0617436    22    7117 19.340415   4.562143    TRUE
## 4     3 1.463380 1.0417086    21   23372 18.754399   4.562122    TRUE
## 5     4 1.461423 1.0232368    20    5434 18.117583   4.562100    TRUE
## 6     5 1.459565 1.0063157    19   22779 17.430350   4.562079    TRUE
## 7     6 1.457807 0.9909249    18   24502 16.693690   4.562058    TRUE
## 8     7 1.456149 0.9770351    16   13184 14.885700   4.562037    TRUE
## 9     8 1.454691 0.9661707    15   24714 14.019582   4.562016    TRUE
## 10    9 1.453333 0.9566515    14   19479 13.115190   4.561994    TRUE
## 11   10 1.452075 0.9484133    14   25275 13.230439   4.561973    TRUE
## 12   11 1.450817 0.9400996    13    9107 12.285063   4.561952    TRUE
## 13   12 1.449659 0.9330045    13   12001 12.379727   4.561931    TRUE
## 14   13 1.448501 0.9258521    12    4747 11.396528   4.561909    TRUE
## 15   14 1.447442 0.9198472    12   11308 11.472076   4.561888    TRUE
## 16   15 1.446384 0.9138005    12   12870 11.549147   4.561867    TRUE
## 17   16 1.445325 0.9077110    12   13289 11.627793   4.561846    TRUE
## 18   17 1.444266 0.9015779    12   20361 11.708067   4.561824    TRUE
## 19   18 1.443207 0.8954002    12   23366 11.790027   4.561803    TRUE
## 20   19 1.442148 0.8891772    12   24631 11.873733   4.561782    TRUE
## 21   20 1.441088 0.8829078    11    1047 10.826626   4.561761    TRUE
## 22   21 1.440128 0.8777422    11   17452 10.891435   4.561739    TRUE
## 23   22 1.439169 0.8725439    11   18713 10.957422   4.561718    TRUE
## 24   23 1.438209 0.8673123    11   20406 11.024622   4.561697    TRUE
## 25   24 1.437249 0.8620469    11   23337 11.093075   4.561676    TRUE
## 26   25 1.436289 0.8567470    11   24952 11.162819   4.561654    TRUE
## 27   26 1.435328 0.8514119    10    3461 10.059375   4.561633    TRUE
## 28   27 1.434468 0.8471166    10   11105 10.111397   4.561612    TRUE
## 29   28 1.433608 0.8427976    10   14225 10.164234   4.561591    TRUE
## 30   29 1.432747 0.8384547    10   15825 10.217908   4.561569    TRUE
## 31   30 1.431887 0.8340874    10   20907 10.272441   4.561548    TRUE
## 32   31 1.431026 0.8296953    10   22673 10.327857   4.561527    TRUE
## 33   32 1.430165 0.8252780    10   24328 10.384180   4.561505    TRUE
## 34   33 1.429304 0.8208352     9   12178  9.223163   4.561484    TRUE
## 35   34 1.428543 0.8173595     9   12716  9.263313   4.561463    TRUE
## 36   35 1.427782 0.8138676     9   18667  9.303993   4.561442    TRUE
## 37   36 1.427021 0.8103592     9   21472  9.345213   4.561420    TRUE
## 38   37 1.426259 0.8068342     9   22807  9.386985   4.561399    TRUE
## 39   38 1.425498 0.8032922     9   22900  9.429323   4.561378    TRUE
## 40   39 1.424736 0.7997331     8     172  8.221822   4.561356    TRUE
## 41   40 1.424075 0.7970501     8    2019  8.250329   4.561335    TRUE
## 42   41 1.423413 0.7943568     8    2181  8.279134   4.561314    TRUE
## 43   42 1.422752 0.7916533     8    3561  8.308243   4.561293    TRUE
## 44   43 1.422090 0.7889394     8    4109  8.337661   4.561271    TRUE
## 45   44 1.421429 0.7862151     8    4976  8.367394   4.561250    TRUE
## 46   45 1.420767 0.7834802     8   14345  8.397447   4.561229    TRUE
## 47   46 1.420105 0.7807346     8   20264  8.427826   4.561207    TRUE
## 48   47 1.419442 0.7779781     8   24707  8.458538   4.561186    TRUE
## 49   48 1.418780 0.7752108     7     118  7.199616   4.561165    TRUE
## 50   49 1.418218 0.7732246     7    1389  7.218836   4.561143    TRUE
## 51   50 1.417657 0.7712324     7    8824  7.238212   4.561122    TRUE
## 52   51 1.417095 0.7692343     7   12690  7.257744   4.561101    TRUE
## 53   52 1.416532 0.7672302     7   14417  7.277435   4.561079    TRUE
## 54   53 1.415970 0.7652200     7   15407  7.297287   4.561058    TRUE
## 55   54 1.415408 0.7632037     7   16102  7.317302   4.561037    TRUE
## 56   55 1.414845 0.7611812     7   16777  7.337484   4.561015    TRUE
## 57   56 1.414283 0.7591525     7   22373  7.357833   4.560994    TRUE
## 58   57 1.413720 0.7571176     7   22754  7.378352   4.560973    TRUE
## 59   58 1.413157 0.7550763     7   23241  7.399044   4.560951    TRUE
## 60   59 1.412594 0.7530287     7   23408  7.419911   4.560930    TRUE
## 61   60 1.412031 0.7509746     7   24653  7.440955   4.560909    TRUE
## 62   61 1.411468 0.7489141     7   25360  7.462180   4.560887    TRUE
## 63   62 1.410905 0.7468470     6    2349  6.144625   4.560866    TRUE
## 64   63 1.410442 0.7454620     6    3295  6.156662   4.560845    TRUE
## 65   64 1.409980 0.7440737     6    4797  6.168771   4.560823    TRUE
## 66   65 1.409517 0.7426824     6    9129  6.180950   4.560802    TRUE
## 67   66 1.409054 0.7412878     6    9484  6.193203   4.560781    TRUE
## 68   67 1.408591 0.7398900     6   12889  6.205528   4.560759    TRUE
## 69   68 1.408128 0.7384891     6   13072  6.217928   4.560738    TRUE
## 70   69 1.407665 0.7370848     6   13661  6.230402   4.560717    TRUE
## 71   70 1.407202 0.7356774     6   15414  6.242951   4.560695    TRUE
## 72   71 1.406739 0.7342666     6   16466  6.255577   4.560674    TRUE
## 73   72 1.406275 0.7328526     6   18086  6.268279   4.560652    TRUE
## 74   73 1.405812 0.7314352     6   18620  6.281060   4.560631    TRUE
## 75   74 1.405348 0.7300145     6   18903  6.293918   4.560610    TRUE
## 76   75 1.404884 0.7285905     6   19226  6.306856   4.560588    TRUE
## 77   76 1.404421 0.7271631     6   20565  6.319874   4.560567    TRUE
## 78   77 1.403957 0.7257323     6   20818  6.332973   4.560546    TRUE
## 79   78 1.403493 0.7242981     6   20926  6.346154   4.560524    TRUE
## 80   79 1.403029 0.7228604     6   21236  6.359418   4.560503    TRUE
## 81   80 1.402565 0.7214193     6   22476  6.372765   4.560481    TRUE
## 82   81 1.402100 0.7199747     6   22663  6.386196   4.560460    TRUE
## 83   82 1.401636 0.7185266     6   22834  6.399713   4.560439    TRUE
## 84   83 1.401172 0.7170750     6   22847  6.413315   4.560417    TRUE
## 85   84 1.400707 0.7156199     6   22998  6.427005   4.560396    TRUE
## 86   85 1.400242 0.7141612     6   23454  6.440783   4.560374    TRUE
## 87   86 1.399778 0.7126989     6   23477  6.454650   4.560353    TRUE
## 88   87 1.399313 0.7112330     6   24137  6.468607   4.560332    TRUE
## 89   88 1.398848 0.7097635     6   24241  6.482655   4.560310    TRUE
## 90   89 1.398383 0.7082903     6   24495  6.496795   4.560289    TRUE
## 91   90 1.397918 0.7068135     6   24851  6.511028   4.560267    TRUE
## 92   91 1.397453 0.7053329     5      76  5.107584   4.560246    TRUE
## 93   92 1.397089 0.7044378     5    1023  5.114592   4.560225    TRUE
## 94   93 1.396724 0.7035411     5    1657  5.121628   4.560203    TRUE
## 95   94 1.396360 0.7026429     5    1815  5.128693   4.560182    TRUE
## 96   95 1.395996 0.7017432     5    2558  5.135788   4.560160    TRUE
## 97   96 1.395631 0.7008420     5    2617  5.142913   4.560139    TRUE
## 98   97 1.395267 0.6999392     5    2714  5.150067   4.560117    TRUE
## 99   98 1.394902 0.6990349     5    3211  5.157251   4.560096    TRUE
## 100  99 1.394537 0.6981290     5    3686  5.164465   4.560075    TRUE
## 101 100 1.394172 0.6972216     5    4028  5.171709   4.560053    TRUE
## 102 101 1.393808 0.6963127     5    5147  5.178984   4.560032    TRUE
## 103 102 1.393443 0.6954022     5    5356  5.186290   4.560010    TRUE
## 104 103 1.393078 0.6944901     5    6678  5.193627   4.559989    TRUE
## 105 104 1.392713 0.6935764     5    7747  5.200995   4.559967    TRUE
## 106 105 1.392347 0.6926611     5    8961  5.208395   4.559946    TRUE
## 107 106 1.391982 0.6917443     5    9640  5.215826   4.559924    TRUE
## 108 107 1.391617 0.6908259     5   10024  5.223289   4.559903    TRUE
## 109 108 1.391252 0.6899058     5   10325  5.230784   4.559882    TRUE
## 110 109 1.390886 0.6889842     5   12631  5.238312   4.559860    TRUE
## 111 110 1.390521 0.6880609     5   12692  5.245872   4.559839    TRUE
## 112 111 1.390155 0.6871360     5   13139  5.253465   4.559817    TRUE
## 113 112 1.389789 0.6862095     5   13444  5.261091   4.559796    TRUE
## 114 113 1.389424 0.6852813     5   14382  5.268751   4.559774    TRUE
## 115 114 1.389058 0.6843515     5   14674  5.276443   4.559753    TRUE
## 116 115 1.388692 0.6834201     5   14832  5.284170   4.559731    TRUE
## 117 116 1.388326 0.6824870     5   15031  5.291931   4.559710    TRUE
## 118 117 1.387960 0.6815522     5   15517  5.299726   4.559688    TRUE
## 119 118 1.387594 0.6806158     5   15541  5.307556   4.559667    TRUE
## 120 119 1.387228 0.6796777     5   16574  5.315420   4.559645    TRUE
## 121 120 1.386861 0.6787379     5   16979  5.323320   4.559624    TRUE
## 122 121 1.386495 0.6777964     5   17389  5.331254   4.559603    TRUE
## 123 122 1.386129 0.6768532     5   17941  5.339225   4.559581    TRUE
## 124 123 1.385762 0.6759083     5   18817  5.347231   4.559560    TRUE
## 125 124 1.385396 0.6749617     5   19438  5.355274   4.559538    TRUE
## 126 125 1.385029 0.6740134     5   19880  5.363352   4.559517    TRUE
## 127 126 1.384662 0.6730633     5   20475  5.371468   4.559495    TRUE
## 128 127 1.384295 0.6721115     5   20613  5.379620   4.559474    TRUE
## 129 128 1.383929 0.6711580     5   21194  5.387810   4.559452    TRUE
## 130 129 1.383562 0.6702027     5   21970  5.396037   4.559431    TRUE
## 131 130 1.383195 0.6692456     5   22443  5.404302   4.559409    TRUE
## 132 131 1.382828 0.6682868     5   22472  5.412605   4.559388    TRUE
## 133 132 1.382460 0.6673262     5   22750  5.420946   4.559366    TRUE
## 134 133 1.382093 0.6663638     5   22884  5.429327   4.559345    TRUE
## 135 134 1.381726 0.6653996     5   22971  5.437746   4.559323    TRUE
## 136 135 1.381359 0.6644337     5   23021  5.446204   4.559302    TRUE
## 137 136 1.380991 0.6634659     5   23921  5.454702   4.559280    TRUE
## 138 137 1.380624 0.6624963     5   24087  5.463240   4.559259    TRUE
## 139 138 1.380256 0.6615249     5   24105  5.471818   4.559237    TRUE
## 140 139 1.379888 0.6605517     5   24233  5.480437   4.559215    TRUE
## 141 140 1.379521 0.6595766     5   24382  5.489096   4.559194    TRUE
## 142 141 1.379153 0.6585997     5   24433  5.497797   4.559172    TRUE
## 143 142 1.378785 0.6576209     5   24638  5.506539   4.559151    TRUE
## 144 143 1.378417 0.6566402     5   25071  5.515323   4.559129    TRUE
## 145 144 1.378049 0.6556577     5   25097  5.524149   4.559108    TRUE
## 146 145 1.377681 0.6546733     5   25125  5.533018   4.559086    TRUE
## 147 146 1.377312 0.6536870     5   25240  5.541930   4.559065    TRUE
## 148 147 1.376944 0.6526988     5   25551  5.550885   4.559043    TRUE
## 149 148 1.376576 0.6517087     4     246  4.025455   4.559022   FALSE
## 150 149 1.376309 0.6512047     4     259  4.028980   4.559000   FALSE
## 151 150 1.376042 0.6507000     4     603  4.032515   4.558979   FALSE
## 152 151 1.375775 0.6501948     4     644  4.036059   4.558957   FALSE

Aplicación del Test de Rosner

Aplicamos el Test de Rosner a la variable CANT_HERIDOS_EN._SITIO_ACCIDENTE debido a que, en la gráfica de boxplot, observamos una dispersión en los datos atípicos. Al realizar la prueba, se identificó que, a partir del dato 149, los valores dejan de considerarse atípicos, lo que sugiere que los datos previos a este punto son los verdaderos outliers.

Punto #2

head(dfgas)
##   BANDERA                     NOMBRE.COMERCIAL       PRODUCTO FECHA.REGISTRO
## 1  TERPEL   ESTACION DE SERVICIO AVENIDA SEXTA GASOLINA MOTOR    01-Jan-2018
## 2  TERPEL   ESTACION DE SERVICIO AVENIDA SEXTA         DIESEL    01-Jan-2018
## 3  BIOMAX                EDS ESSO BELLO MADERA          EXTRA    01-Jan-2018
## 4  BIOMAX                EDS ESSO BELLO MADERA         DIESEL    01-Jan-2018
## 5  BIOMAX                EDS ESSO BELLO MADERA GASOLINA MOTOR    01-Jan-2018
## 6  TERPEL ESTACION DE SERVICIO BOMBA VILLA LUZ         DIESEL    01-Jan-2018
##   DEPARTAMENTO MUNICIPIO VALOR.PRECIO
## 1     AMAZONAS   LETICIA         9030
## 2     AMAZONAS   LETICIA         8250
## 3    ANTIOQUIA     BELLO        11390
## 4    ANTIOQUIA     BELLO         8220
## 5    ANTIOQUIA     BELLO         8320
## 6    ANTIOQUIA   BETULIA         9050
names(dfgas)
## [1] "BANDERA"          "NOMBRE.COMERCIAL" "PRODUCTO"         "FECHA.REGISTRO"  
## [5] "DEPARTAMENTO"     "MUNICIPIO"        "VALOR.PRECIO"
dim(dfgas)
## [1] 1223000       7
str(dfgas)
## 'data.frame':    1223000 obs. of  7 variables:
##  $ BANDERA         : chr  "TERPEL" "TERPEL" "BIOMAX" "BIOMAX" ...
##  $ NOMBRE.COMERCIAL: chr  "ESTACION DE SERVICIO AVENIDA SEXTA" "ESTACION DE SERVICIO AVENIDA SEXTA" "EDS ESSO BELLO MADERA" "EDS ESSO BELLO MADERA" ...
##  $ PRODUCTO        : chr  "GASOLINA MOTOR" "DIESEL" "EXTRA" "DIESEL" ...
##  $ FECHA.REGISTRO  : chr  "01-Jan-2018" "01-Jan-2018" "01-Jan-2018" "01-Jan-2018" ...
##  $ DEPARTAMENTO    : chr  "AMAZONAS" "AMAZONAS" "ANTIOQUIA" "ANTIOQUIA" ...
##  $ MUNICIPIO       : chr  "LETICIA" "LETICIA" "BELLO" "BELLO" ...
##  $ VALOR.PRECIO    : num  9030 8250 11390 8220 8320 ...
summary(dfgas)
##    BANDERA          NOMBRE.COMERCIAL     PRODUCTO         FECHA.REGISTRO    
##  Length:1223000     Length:1223000     Length:1223000     Length:1223000    
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##  DEPARTAMENTO        MUNICIPIO          VALOR.PRECIO   
##  Length:1223000     Length:1223000     Min.   :     0  
##  Class :character   Class :character   1st Qu.:  8310  
##  Mode  :character   Mode  :character   Median :  8990  
##                                        Mean   :  9542  
##                                        3rd Qu.:  9685  
##                                        Max.   :120000

Analisis de la base de datos:

El data frame contiene información sobre al menos las siguientes variables:

  • BANDERA(Caracter): Posiblemente un identificador o bandera.
  • NOMBRE.COMERCIAL(Caracter): Probablemente el nombre comercial de una estación de servicio o distribuidor.
  • PRODUCTO(Caracter): Tipo de producto de gas.
  • FECHA.REGISTRO(Caracter): Fecha en la que se registró la información.
  • DEPARTAMENTO(Caracter): Departamento geográfico.
  • MUNICIPIO(Caracter): Municipio o ciudad.
  • VALOR.PRECIO(Numerico): Precio del producto de gas.

Hay 20 valores faltantes en la columna VALOR.PRECIO. El precio del gas tiene un rango bastante amplio, desde 0 hasta 79484.

table(dfgas$BANDERA)
## 
##                   -         AYATAWACOOP              BIOMAX               BRIO  
##                 177               32254              157832                3295 
##        COOMULPINORT              DISCOM         DISCOWACOOP                ECOS 
##               18939               12617               11962               15999 
##                ESSO              OCTANO               P Y B           PETRDECOL 
##               16664                5777                3907                9396 
##           PETROBRAS          PETRODECOL           PETROMIL             PLUS MAS 
##               25693               10126               71066                6756 
##              PRIMAX             PROXXON                PUMA                SAVE 
##              189431                 788               14295                1308 
##              TERPEL              TEXACO ZAPATA Y VELASQUEZ               ZEUSS  
##              451698              123957                3725               35338
table(dfgas$PRODUCTO)
## 
##         DIESEL          EXTRA GASOLINA MOTOR 
##         537933         164693         520374
table(head(dfgas$FECHA.REGISTRO, 50000))
## 
## 01-Apr-2018 01-Feb-2018 01-Jan-2018 01-Mar-2018 02-Apr-2018 02-Feb-2018 
##         878        5933         845        7259         839        4486 
## 02-Jan-2018 02-Mar-2018 03-Feb-2018 03-Jan-2018 03-Mar-2018 04-Feb-2018 
##        6140        2773        1464        2880         663         249 
## 04-Jan-2018 04-Mar-2018 05-Feb-2018 05-Jan-2018 05-Mar-2018 06-Feb-2018 
##        1318         134        1611         900        1046         825 
## 06-Jan-2018 06-Mar-2018 07-Feb-2018 07-Jan-2018 07-Mar-2018 08-Feb-2018 
##         156         724         645          28         536         510 
## 08-Jan-2018 08-Mar-2018 09-Feb-2018 09-Jan-2018 09-Mar-2018 10-Feb-2018 
##          54         305         328         261         240          82 
## 10-Jan-2018 10-Mar-2018 11-Feb-2018 11-Jan-2018 11-Mar-2018 12-Feb-2018 
##         170          66          19         300          17         234 
## 12-Jan-2018 12-Mar-2018 13-Feb-2018 13-Jan-2018 13-Mar-2018 14-Feb-2018 
##         152         169         162          77         129         202 
## 14-Jan-2018 14-Mar-2018 15-Feb-2018 15-Jan-2018 15-Mar-2018 16-Feb-2018 
##          21         207         278         107         113         226 
## 16-Jan-2018 16-Mar-2018 17-Feb-2018 17-Jan-2018 17-Mar-2018 18-Feb-2018 
##          76          87          66         139          50          17 
## 18-Jan-2018 18-Mar-2018 19-Feb-2018 19-Jan-2018 19-Mar-2018 20-Feb-2018 
##          99          11         163          87          14          93 
## 20-Jan-2018 20-Mar-2018 21-Feb-2018 21-Jan-2018 21-Mar-2018 22-Feb-2018 
##          45          99         121           5          93          76 
## 22-Jan-2018 22-Mar-2018 23-Feb-2018 23-Jan-2018 23-Mar-2018 24-Feb-2018 
##          92          89          92          85         130          52 
## 24-Jan-2018 24-Mar-2018 25-Feb-2018 25-Jan-2018 25-Mar-2018 26-Feb-2018 
##          97          50           5          85          17          93 
## 26-Jan-2018 26-Mar-2018 27-Feb-2018 27-Jan-2018 27-Mar-2018 28-Feb-2018 
##         116         126          93          52          96         141 
## 28-Jan-2018 28-Mar-2018 29-Jan-2018 29-Mar-2018 30-Jan-2018 30-Mar-2018 
##          12          93         122          10          54          13 
## 31-Jan-2018 31-Mar-2018 
##          70          13
table(dfgas$DEPARTAMENTO)
## 
##                                                        - 
##                                                      177 
##                                                 AMAZONAS 
##                                                     2826 
##                                                ANTIOQUIA 
##                                                   135851 
##                                                   ARAUCA 
##                                                    10563 
## ARCHIPIELAGO DE SAN ANDRES, SANTA CATALINA Y PROVIDENCIA 
##                                                     1276 
##                                                ATLANTICO 
##                                                    42723 
##                                              BOGOTA D.C. 
##                                                    89982 
##                                                  BOLIVAR 
##                                                    33194 
##                                                   BOYACA 
##                                                    42904 
##                                                   CALDAS 
##                                                    25351 
##                                                  CAQUETA 
##                                                    13057 
##                                                 CASANARE 
##                                                    14463 
##                                                    CAUCA 
##                                                    26016 
##                                                    CESAR 
##                                                    75707 
##                                                    CHOCO 
##                                                    12396 
##                                                  CORDOBA 
##                                                    34395 
##                                             CUNDINAMARCA 
##                                                    80871 
##                                                  GUAINIA 
##                                                     1575 
##                                                 GUAVIARE 
##                                                     4039 
##                                                    HUILA 
##                                                    29366 
##                                               LA GUAJIRA 
##                                                    48123 
##                                                MAGDALENA 
##                                                    19642 
##                                                     META 
##                                                    30488 
##                                                   NARIÑO 
##                                                   134055 
##                                       NORTE DE SANTANDER 
##                                                    53784 
##                                                 PUTUMAYO 
##                                                    31125 
##                                                  QUINDIO 
##                                                    12842 
##                                                RISARALDA 
##                                                    24557 
##                                                SANTANDER 
##                                                    48417 
##                                                    SUCRE 
##                                                    18465 
##                                                   TOLIMA 
##                                                    34734 
##                                          VALLE DEL CAUCA 
##                                                    85156 
##                                                   VAUPES 
##                                                      473 
##                                                  VICHADA 
##                                                     4407

Resumen de Distribuidores

En este resumen se muestran los datos relacionados con precios de combustible en Colombia y la distribución de ventas por marca y fecha:

  • Marcas principales:
    • Terpel lidera con 451,698 registros.
    • Primax sigue con 189,431 registros.
    • Texaco cuenta con 123,957 registros.
    • Otras marcas significativas incluyen Petromil (71,066 registros), Petrobras (25,693 registros) y ESSO (16,664 registros).
  • Tipos de combustible:
    • Diesel es el producto más distribuido con 537,933 unidades.
    • Gasolina Motor sigue con 520,374 unidades.
    • Extra tiene 164,693 unidades.
  • Fechas clave:
    • Se observan fluctuaciones en las ventas a lo largo de los años, con registros significativos en fechas como:
      • 01-Apr-2018: 878 registros.
      • 01-Aug-2018: 6,003 registros.
      • 01-Jul-2022: 8,413 registros.
    • Algunas fechas muestran caídas drásticas como:
      • 02-Apr-2024: 1,043 registros.
      • 02-Jun-2024: 194 registros.

ggplot(dfgas, aes(x = VALOR.PRECIO)) +
  geom_bar(binwidth = 1, fill = "blue", color = "#A52A2A") +
  facet_wrap(~ PRODUCTO, scales = "free_x") + 
  labs(title = "Histogramas de PRECIO por Tipo de Producto", x = "VALOR.PRECIO", y = "Frecuencia") +
  theme(axis.text.x = element_text(angle = 90, hjust = 1)) 
## Warning in geom_bar(binwidth = 1, fill = "blue", color = "#A52A2A"): Ignoring
## unknown parameters: `binwidth`

Análisis por producto:

  • Diesel: La distribución de precios para el Diesel parece ser más normal en comparación con los otros dos productos, con una menor concentración de precios en un rango específico.

  • Extra: La distribución de precios para el producto Extra es similar a la del Diesel, aunque con una ligera tendencia a tener precios ligeramente más altos.

  • Gasolina Motor: La distribución de precios para la Gasolina Motor es la más dispersa de las tres, con una mayor concentración de precios bajos y un pico muy pronunciado en un valor de precio específico.

valores_faltantes <- dfgas %>%
  summarise(across(everything(), ~sum(is.na(.)))) %>%
  pivot_longer(cols = everything(), names_to = "variable", values_to = "n_faltantes") %>%
  filter(n_faltantes > 0)

print("Valores faltantes por variable:")
## [1] "Valores faltantes por variable:"
print(valores_faltantes)
## # A tibble: 0 × 2
## # ℹ 2 variables: variable <chr>, n_faltantes <int>
colSums(is.na(dfgas)) 
##          BANDERA NOMBRE.COMERCIAL         PRODUCTO   FECHA.REGISTRO 
##                0                0                0                0 
##     DEPARTAMENTO        MUNICIPIO     VALOR.PRECIO 
##                0                0                0
suppressWarnings(require(Amelia))
suppressWarnings(missmap(dfgas))

suppressWarnings(missmap(as.data.frame(dfgas$VALOR.PRECIO)))

Valores faltantes

  • Se observan valores NA en la base de datos cuando se realizaron los descriptivos por categoría, pero son muy pocos en comparación con la cantidad total de datos disponibles.

Con respecto a esto, realizaremos lo siguiente: Eliminaremos estos valores faltantes (NA), ya que, aunque se observó su presencia en el resumen, son muy pocos y no afectan significativamente el análisis.

colSums(is.na(dfgana)) 
##          BANDERA NOMBRE.COMERCIAL         PRODUCTO   FECHA.REGISTRO 
##                0                0                0                0 
##     DEPARTAMENTO        MUNICIPIO     VALOR.PRECIO 
##                0                0                0

Luego de inputacion

Como observamos en estos tres histogramas, no se presentó ningún cambio significativo en la distribución de las gráficas.

Mapa geografico

Ahora analizaremos visualmente utilizando un mapa

## ℹ © Stadia Maps © Stamen Design © OpenMapTiles © OpenStreetMap contributors.

## Reading layer `COLOMBIA' from data source 
##   `/Users/juansebastianquintanacontreras/Documents/Python _Act/coordenadas/COLOMBIA/COLOMBIA.shp' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 33 features and 11 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -81.73575 ymin: -4.227907 xmax: -66.84735 ymax: 13.39453
## Geodetic CRS:  WGS 84
## Simple feature collection with 6 features and 11 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -77.13556 ymin: 3.726892 xmax: -71.94853 ymax: 11.1092
## Geodetic CRS:  WGS 84
##   OBJECTID DPTO_CCDGO DPTO_NANO_  DPTO_CNMBR                    DPTO_CACTO
## 1        1         05       1886   ANTIOQUIA Constitucion Politica de 1886
## 2        2         08       1910   ATLANTICO                Ley 21 de 1910
## 3        3         11          0 BOGOTA D.C.                          <NA>
## 4        4         13       1886     BOLIVAR Constitucion Politica de 1886
## 5        5         15       1886      BOYACA Constitucion Politica de 1886
## 6        6         17       1905      CALDAS           11 de Abril de 1905
##    DPTO_NAREA DPTO_CSMBL DPTO_NANO PAIS_PAIS_ SHAPE_Leng SHAPE_Area
## 1 63063325603          3      2005          1  21.137035  5.1557833
## 2  3326730008          3      2005          2   2.461077  0.2748252
## 3  1633209262          3      2005          3   3.731288  0.1330445
## 4 26665590821          3      2005          4  15.706980  2.1910550
## 5 23077053534          3      2005          5  15.280968  1.8833146
## 6  7415932693          3      2005          6   6.614200  0.6047122
##                         geometry
## 1 MULTIPOLYGON (((-76.40481 8...
## 2 MULTIPOLYGON (((-74.82969 1...
## 3 MULTIPOLYGON (((-74.07274 4...
## 4 MULTIPOLYGON (((-75.24966 1...
## 5 MULTIPOLYGON (((-72.01129 7...
## 6 MULTIPOLYGON (((-74.67118 5...
library(sf)
dfcorde_sf <- st_as_sf(dfcorde, crs = 4326)
dfcorde_sf <- st_as_sf(dfcorde_sf, coords = c("longitude", "latitude"), crs = 4326)  
print(head(dfcorde_sf))
## Simple feature collection with 6 features and 11 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -77.13556 ymin: 3.726892 xmax: -71.94853 ymax: 11.1092
## Geodetic CRS:  WGS 84
##   OBJECTID DPTO_CCDGO DPTO_NANO_  DPTO_CNMBR                    DPTO_CACTO
## 1        1         05       1886   ANTIOQUIA Constitucion Politica de 1886
## 2        2         08       1910   ATLANTICO                Ley 21 de 1910
## 3        3         11          0 BOGOTA D.C.                          <NA>
## 4        4         13       1886     BOLIVAR Constitucion Politica de 1886
## 5        5         15       1886      BOYACA Constitucion Politica de 1886
## 6        6         17       1905      CALDAS           11 de Abril de 1905
##    DPTO_NAREA DPTO_CSMBL DPTO_NANO PAIS_PAIS_ SHAPE_Leng SHAPE_Area
## 1 63063325603          3      2005          1  21.137035  5.1557833
## 2  3326730008          3      2005          2   2.461077  0.2748252
## 3  1633209262          3      2005          3   3.731288  0.1330445
## 4 26665590821          3      2005          4  15.706980  2.1910550
## 5 23077053534          3      2005          5  15.280968  1.8833146
## 6  7415932693          3      2005          6   6.614200  0.6047122
##                         geometry
## 1 MULTIPOLYGON (((-76.40481 8...
## 2 MULTIPOLYGON (((-74.82969 1...
## 3 MULTIPOLYGON (((-74.07274 4...
## 4 MULTIPOLYGON (((-75.24966 1...
## 5 MULTIPOLYGON (((-72.01129 7...
## 6 MULTIPOLYGON (((-74.67118 5...
ggplot(data = dfcorde_sf) +
  geom_sf() +
  ggtitle("Mapa de Coordenadas") +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5))  # Centra el título

Promediar VALOR PRECIO

Se promedia el valor de precio, que es donde se encuentra el precio de la gasolina, diésel y extra, para poder graficar en el mapa. Esto permite que el computador pueda trabajar de manera más eficiente, ya que de no hacerlo, el archivo sería demasiado pesado.

resumdi <- dfgas %>%
  filter(PRODUCTO == 'DIESEL') %>%
  group_by(DEPARTAMENTO) %>%
  summarise(precio = mean(VALOR.PRECIO, na.rm = TRUE)) %>%
  ungroup() 

print(resumdi)
## # A tibble: 34 × 2
##    DEPARTAMENTO               precio
##    <chr>                       <dbl>
##  1 -                           8961.
##  2 AMAZONAS                   10740.
##  3 ANTIOQUIA                   9105.
##  4 ARAUCA                      8332.
##  5 ARCHIPIELAGO DE SAN ANDRES 10098.
##  6 ATLANTICO                   8630.
##  7 BOGOTA D.C.                 8787.
##  8 BOLIVAR                     8715.
##  9 BOYACA                      8997.
## 10 CALDAS                      8993.
## # ℹ 24 more rows
resumex <- dfgas %>%
  filter(PRODUCTO == 'EXTRA') %>%
  group_by(DEPARTAMENTO) %>%
  summarise(precio = mean(VALOR.PRECIO, na.rm = TRUE)) %>%
  ungroup() 

print(resumex)
## # A tibble: 29 × 2
##    DEPARTAMENTO               precio
##    <chr>                       <dbl>
##  1 -                          12618.
##  2 ANTIOQUIA                  14504.
##  3 ARCHIPIELAGO DE SAN ANDRES 16314.
##  4 ATLANTICO                  13839.
##  5 BOGOTA D.C.                14162.
##  6 BOLIVAR                    13414.
##  7 BOYACA                     14390.
##  8 CALDAS                     13761.
##  9 CAQUETA                    13455.
## 10 CASANARE                   13113.
## # ℹ 19 more rows
resumgas <- dfgas %>%
  filter(PRODUCTO == 'GASOLINA MOTOR') %>%
  group_by(DEPARTAMENTO) %>%
  summarise(precio = mean(VALOR.PRECIO, na.rm = TRUE)) %>%
  ungroup() 

print(resumgas)
## # A tibble: 34 × 2
##    DEPARTAMENTO               precio
##    <chr>                       <dbl>
##  1 -                           9085.
##  2 AMAZONAS                   11947.
##  3 ANTIOQUIA                  10189.
##  4 ARAUCA                      9438.
##  5 ARCHIPIELAGO DE SAN ANDRES 11787.
##  6 ATLANTICO                   9773.
##  7 BOGOTA D.C.                 9523.
##  8 BOLIVAR                     9526.
##  9 BOYACA                     10138.
## 10 CALDAS                     10174.
## # ℹ 24 more rows

Usaremos Diesel

Usaremos este tipo de producto, ya que toma los 33 departamentos que nos proporciona el DataFrame de coordenadas, asegurando que todos los departamentos tengan un resultado. Además, es el producto con más datos disponibles.

Eliminares todos los ‘-’ que tenga la variable departamentos

resumdi <- resumdi[resumdi$DEPARTAMENTO != '-', ]
unique_departamentos <- unique(resumdi$DEPARTAMENTO)

print(unique_departamentos)
##  [1] "AMAZONAS"                   "ANTIOQUIA"                 
##  [3] "ARAUCA"                     "ARCHIPIELAGO DE SAN ANDRES"
##  [5] "ATLANTICO"                  "BOGOTA D.C."               
##  [7] "BOLIVAR"                    "BOYACA"                    
##  [9] "CALDAS"                     "CAQUETA"                   
## [11] "CASANARE"                   "CAUCA"                     
## [13] "CESAR"                      "CHOCO"                     
## [15] "CORDOBA"                    "CUNDINAMARCA"              
## [17] "GUAINIA"                    "GUAVIARE"                  
## [19] "HUILA"                      "LA GUAJIRA"                
## [21] "MAGDALENA"                  "META"                      
## [23] "NARIÑO"                     "NORTE DE SANTANDER"        
## [25] "PUTUMAYO"                   "QUINDIO"                   
## [27] "RISARALDA"                  "SANTANDER"                 
## [29] "SUCRE"                      "TOLIMA"                    
## [31] "VALLE DEL CAUCA"            "VAUPES"                    
## [33] "VICHADA"
munic_2 <- dfcorde_sf[['DPTO_CNMBR']]
print(munic_2)
##  [1] "ANTIOQUIA"                  "ATLANTICO"                 
##  [3] "BOGOTA D.C."                "BOLIVAR"                   
##  [5] "BOYACA"                     "CALDAS"                    
##  [7] "CAQUETA"                    "CAUCA"                     
##  [9] "CESAR"                      "CORDOBA"                   
## [11] "CUNDINAMARCA"               "CHOCO"                     
## [13] "HUILA"                      "LA GUAJIRA"                
## [15] "MAGDALENA"                  "META"                      
## [17] "NARI?O"                     "NORTE DE SANTANDER"        
## [19] "QUINDIO"                    "RISARALDA"                 
## [21] "SANTANDER"                  "SUCRE"                     
## [23] "TOLIMA"                     "VALLE DEL CAUCA"           
## [25] "ARAUCA"                     "CASANARE"                  
## [27] "PUTUMAYO"                   "AMAZONAS"                  
## [29] "GUAINIA"                    "GUAVIARE"                  
## [31] "VAUPES"                     "VICHADA"                   
## [33] "ARCHIPIELAGO DE SAN ANDRES"
munic_1 <- resumdi[['DEPARTAMENTO']]
print(munic_1)
##  [1] "AMAZONAS"                   "ANTIOQUIA"                 
##  [3] "ARAUCA"                     "ARCHIPIELAGO DE SAN ANDRES"
##  [5] "ATLANTICO"                  "BOGOTA D.C."               
##  [7] "BOLIVAR"                    "BOYACA"                    
##  [9] "CALDAS"                     "CAQUETA"                   
## [11] "CASANARE"                   "CAUCA"                     
## [13] "CESAR"                      "CHOCO"                     
## [15] "CORDOBA"                    "CUNDINAMARCA"              
## [17] "GUAINIA"                    "GUAVIARE"                  
## [19] "HUILA"                      "LA GUAJIRA"                
## [21] "MAGDALENA"                  "META"                      
## [23] "NARIÑO"                     "NORTE DE SANTANDER"        
## [25] "PUTUMAYO"                   "QUINDIO"                   
## [27] "RISARALDA"                  "SANTANDER"                 
## [29] "SUCRE"                      "TOLIMA"                    
## [31] "VALLE DEL CAUCA"            "VAUPES"                    
## [33] "VICHADA"

Observamos a primera vista un error en la escritura con respecto a “NARIÑO” en dfgas y en los datos de coordenadas aparece como “NARI?O”. Dado que existen errores de este tipo, procederemos a corregirlos.

Errores de escritura

aca corregiremos los errores que tengan las bases de datos por algun caracter.

##  [1] "amazonas"                   "antioquia"                 
##  [3] "arauca"                     "archipielago de san andres"
##  [5] "atlantico"                  "bogota d.c."               
##  [7] "bolivar"                    "boyaca"                    
##  [9] "caldas"                     "caqueta"                   
## [11] "casanare"                   "cauca"                     
## [13] "cesar"                      "choco"                     
## [15] "cordoba"                    "cundinamarca"              
## [17] "guainia"                    "guaviare"                  
## [19] "huila"                      "la guajira"                
## [21] "magdalena"                  "meta"                      
## [23] "nariño"                     "norte de santander"        
## [25] "putumayo"                   "quindio"                   
## [27] "risaralda"                  "santander"                 
## [29] "sucre"                      "tolima"                    
## [31] "valle del cauca"            "vaupes"                    
## [33] "vichada"
##  [1] "antioquia"                  "atlantico"                 
##  [3] "bogota d.c."                "bolivar"                   
##  [5] "boyaca"                     "caldas"                    
##  [7] "caqueta"                    "cauca"                     
##  [9] "cesar"                      "cordoba"                   
## [11] "cundinamarca"               "choco"                     
## [13] "huila"                      "la guajira"                
## [15] "magdalena"                  "meta"                      
## [17] "narino"                     "norte de santander"        
## [19] "quindio"                    "risaralda"                 
## [21] "santander"                  "sucre"                     
## [23] "tolima"                     "valle del cauca"           
## [25] "arauca"                     "casanare"                  
## [27] "putumayo"                   "amazonas"                  
## [29] "guainia"                    "guaviare"                  
## [31] "vaupes"                     "vichada"                   
## [33] "archipielago de san andres"

Datos que no estan en ambos df

find_non_matching_indices <- function(a, b) {
  set_b <- unique(b)
  indices <- which(!(a %in% set_b))  # Encontrar los índices de a que no están en b
  return(indices)
}
a1 <- find_non_matching_indices(munic_1, munic_2)
a2 <- find_non_matching_indices(munic_2, munic_1)

cat("Posiciones en munic_1 que no están en munic_2:", a1, "\n")
## Posiciones en munic_1 que no están en munic_2: 23
cat("Posiciones en munic_2 que no están en munic_1:", a2, "\n")
## Posiciones en munic_2 que no están en munic_1: 17
print(munic_1[a1])
## [1] "nariño"
print(munic_2[a2])
## [1] "narino"

Remplazamos los nombres que tengan errores de escritura

## [1] "nariño"
## [1] "narino"

Creamos columna para poder combinar bases de datos:

resumdi$codigo <- munic_1
dfcorde_sf$codigo <- munic_2
Datos_tot <- merge(dfcorde_sf, resumdi, by = "codigo", all = TRUE)
head(Datos_tot)
## Simple feature collection with 6 features and 14 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -81.73575 ymin: -4.227907 xmax: -69.39101 ymax: 13.39453
## Geodetic CRS:  WGS 84
##                       codigo OBJECTID DPTO_CCDGO DPTO_NANO_
## 1                   amazonas       28         91       1991
## 2                  antioquia        1         05       1886
## 3                     arauca       25         81       1991
## 4 archipielago de san andres       33         88       1991
## 5                  atlantico        2         08       1910
## 6                bogota d.c.        3         11          0
##                   DPTO_CNMBR                                         DPTO_CACTO
## 1                   AMAZONAS Decreto 2274 del 4 de Octubre de la Constitucion *
## 2                  ANTIOQUIA                      Constitucion Politica de 1886
## 3                     ARAUCA           5 de Julio Constitucion Politica de 1991
## 4 ARCHIPIELAGO DE SAN ANDRES         Artículo 310 Constitucion Politica de 1991
## 5                  ATLANTICO                                     Ley 21 de 1910
## 6                BOGOTA D.C.                                               <NA>
##     DPTO_NAREA DPTO_CSMBL DPTO_NANO PAIS_PAIS_ SHAPE_Leng  SHAPE_Area
## 1 1.100465e+11          3      2005         28 24.7478421 8.921606592
## 2 6.306333e+10          3      2005          1 21.1370351 5.155783322
## 3 2.380556e+10          3      2005         25  9.1629393 1.940327371
## 4 4.960214e+04          3      2005         12  0.6506981 0.004064367
## 5 3.326730e+09          3      2005          2  2.4610773 0.274825157
## 6 1.633209e+09          3      2005          3  3.7312885 0.133044539
##                 DEPARTAMENTO    precio                       geometry
## 1                   AMAZONAS 10739.547 MULTIPOLYGON (((-71.29212 0...
## 2                  ANTIOQUIA  9104.612 MULTIPOLYGON (((-76.40481 8...
## 3                     ARAUCA  8332.387 MULTIPOLYGON (((-70.67671 7...
## 4 ARCHIPIELAGO DE SAN ANDRES 10098.152 MULTIPOLYGON (((-81.70353 1...
## 5                  ATLANTICO  8629.520 MULTIPOLYGON (((-74.82969 1...
## 6                BOGOTA D.C.  8787.134 MULTIPOLYGON (((-74.07274 4...
length(Datos_tot$codigo)
## [1] 34
length(dfcorde_sf$codigo)
## [1] 33
ggplot(data = Datos_tot) +
  geom_sf(aes(fill = precio), color = NA) +  
  scale_fill_viridis_c(option = "C") 

  theme_void() +
  labs(title = "Precio de Diesel en Colombia", fill = "Precio") + 
  theme(legend.position = "right") 
## List of 98
##  $ line                      : list()
##   ..- attr(*, "class")= chr [1:2] "element_blank" "element"
##  $ rect                      : list()
##   ..- attr(*, "class")= chr [1:2] "element_blank" "element"
##  $ text                      :List of 11
##   ..$ family       : chr ""
##   ..$ face         : chr "plain"
##   ..$ colour       : chr "black"
##   ..$ size         : num 11
##   ..$ hjust        : num 0.5
##   ..$ vjust        : num 0.5
##   ..$ angle        : num 0
##   ..$ lineheight   : num 0.9
##   ..$ margin       : 'margin' num [1:4] 0points 0points 0points 0points
##   .. ..- attr(*, "unit")= int 8
##   ..$ debug        : logi FALSE
##   ..$ inherit.blank: logi TRUE
##   ..- attr(*, "class")= chr [1:2] "element_text" "element"
##  $ title                     : chr "Precio de Diesel en Colombia"
##  $ aspect.ratio              : NULL
##  $ axis.title                : list()
##   ..- attr(*, "class")= chr [1:2] "element_blank" "element"
##  $ axis.title.x              : NULL
##  $ axis.title.x.top          : NULL
##  $ axis.title.x.bottom       : NULL
##  $ axis.title.y              : NULL
##  $ axis.title.y.left         : NULL
##  $ axis.title.y.right        : NULL
##  $ axis.text                 : list()
##   ..- attr(*, "class")= chr [1:2] "element_blank" "element"
##  $ axis.text.x               : NULL
##  $ axis.text.x.top           : NULL
##  $ axis.text.x.bottom        : NULL
##  $ axis.text.y               : NULL
##  $ axis.text.y.left          : NULL
##  $ axis.text.y.right         : NULL
##  $ axis.ticks                : NULL
##  $ axis.ticks.x              : NULL
##  $ axis.ticks.x.top          : NULL
##  $ axis.ticks.x.bottom       : NULL
##  $ axis.ticks.y              : NULL
##  $ axis.ticks.y.left         : NULL
##  $ axis.ticks.y.right        : NULL
##  $ axis.ticks.length         : 'simpleUnit' num 0points
##   ..- attr(*, "unit")= int 8
##  $ axis.ticks.length.x       : NULL
##  $ axis.ticks.length.x.top   : NULL
##  $ axis.ticks.length.x.bottom: NULL
##  $ axis.ticks.length.y       : NULL
##  $ axis.ticks.length.y.left  : NULL
##  $ axis.ticks.length.y.right : NULL
##  $ axis.line                 : NULL
##  $ axis.line.x               : NULL
##  $ axis.line.x.top           : NULL
##  $ axis.line.x.bottom        : NULL
##  $ axis.line.y               : NULL
##  $ axis.line.y.left          : NULL
##  $ axis.line.y.right         : NULL
##  $ legend.background         : NULL
##  $ legend.margin             : NULL
##  $ legend.spacing            : NULL
##  $ legend.spacing.x          : NULL
##  $ legend.spacing.y          : NULL
##  $ legend.key                : NULL
##  $ legend.key.size           : 'simpleUnit' num 1.2lines
##   ..- attr(*, "unit")= int 3
##  $ legend.key.height         : NULL
##  $ legend.key.width          : NULL
##  $ legend.text               :List of 11
##   ..$ family       : NULL
##   ..$ face         : NULL
##   ..$ colour       : NULL
##   ..$ size         : 'rel' num 0.8
##   ..$ hjust        : NULL
##   ..$ vjust        : NULL
##   ..$ angle        : NULL
##   ..$ lineheight   : NULL
##   ..$ margin       : NULL
##   ..$ debug        : NULL
##   ..$ inherit.blank: logi TRUE
##   ..- attr(*, "class")= chr [1:2] "element_text" "element"
##  $ legend.text.align         : NULL
##  $ legend.title              :List of 11
##   ..$ family       : NULL
##   ..$ face         : NULL
##   ..$ colour       : NULL
##   ..$ size         : NULL
##   ..$ hjust        : num 0
##   ..$ vjust        : NULL
##   ..$ angle        : NULL
##   ..$ lineheight   : NULL
##   ..$ margin       : NULL
##   ..$ debug        : NULL
##   ..$ inherit.blank: logi TRUE
##   ..- attr(*, "class")= chr [1:2] "element_text" "element"
##  $ legend.title.align        : NULL
##  $ legend.position           : chr "right"
##  $ legend.direction          : NULL
##  $ legend.justification      : NULL
##  $ legend.box                : NULL
##  $ legend.box.just           : NULL
##  $ legend.box.margin         : NULL
##  $ legend.box.background     : NULL
##  $ legend.box.spacing        : NULL
##  $ panel.background          : NULL
##  $ panel.border              : NULL
##  $ panel.spacing             : 'simpleUnit' num 5.5points
##   ..- attr(*, "unit")= int 8
##  $ panel.spacing.x           : NULL
##  $ panel.spacing.y           : NULL
##  $ panel.grid                : NULL
##  $ panel.grid.major          : NULL
##  $ panel.grid.minor          : NULL
##  $ panel.grid.major.x        : NULL
##  $ panel.grid.major.y        : NULL
##  $ panel.grid.minor.x        : NULL
##  $ panel.grid.minor.y        : NULL
##  $ panel.ontop               : logi FALSE
##  $ plot.background           : NULL
##  $ plot.title                :List of 11
##   ..$ family       : NULL
##   ..$ face         : NULL
##   ..$ colour       : NULL
##   ..$ size         : 'rel' num 1.2
##   ..$ hjust        : num 0
##   ..$ vjust        : num 1
##   ..$ angle        : NULL
##   ..$ lineheight   : NULL
##   ..$ margin       : 'margin' num [1:4] 5.5points 0points 0points 0points
##   .. ..- attr(*, "unit")= int 8
##   ..$ debug        : NULL
##   ..$ inherit.blank: logi TRUE
##   ..- attr(*, "class")= chr [1:2] "element_text" "element"
##  $ plot.title.position       : chr "panel"
##  $ plot.subtitle             :List of 11
##   ..$ family       : NULL
##   ..$ face         : NULL
##   ..$ colour       : NULL
##   ..$ size         : NULL
##   ..$ hjust        : num 0
##   ..$ vjust        : num 1
##   ..$ angle        : NULL
##   ..$ lineheight   : NULL
##   ..$ margin       : 'margin' num [1:4] 5.5points 0points 0points 0points
##   .. ..- attr(*, "unit")= int 8
##   ..$ debug        : NULL
##   ..$ inherit.blank: logi TRUE
##   ..- attr(*, "class")= chr [1:2] "element_text" "element"
##  $ plot.caption              :List of 11
##   ..$ family       : NULL
##   ..$ face         : NULL
##   ..$ colour       : NULL
##   ..$ size         : 'rel' num 0.8
##   ..$ hjust        : num 1
##   ..$ vjust        : num 1
##   ..$ angle        : NULL
##   ..$ lineheight   : NULL
##   ..$ margin       : 'margin' num [1:4] 5.5points 0points 0points 0points
##   .. ..- attr(*, "unit")= int 8
##   ..$ debug        : NULL
##   ..$ inherit.blank: logi TRUE
##   ..- attr(*, "class")= chr [1:2] "element_text" "element"
##  $ plot.caption.position     : chr "panel"
##  $ plot.tag                  :List of 11
##   ..$ family       : NULL
##   ..$ face         : NULL
##   ..$ colour       : NULL
##   ..$ size         : 'rel' num 1.2
##   ..$ hjust        : num 0.5
##   ..$ vjust        : num 0.5
##   ..$ angle        : NULL
##   ..$ lineheight   : NULL
##   ..$ margin       : NULL
##   ..$ debug        : NULL
##   ..$ inherit.blank: logi TRUE
##   ..- attr(*, "class")= chr [1:2] "element_text" "element"
##  $ plot.tag.position         : chr "topleft"
##  $ plot.margin               : 'simpleUnit' num [1:4] 0lines 0lines 0lines 0lines
##   ..- attr(*, "unit")= int 3
##  $ strip.background          : NULL
##  $ strip.background.x        : NULL
##  $ strip.background.y        : NULL
##  $ strip.clip                : chr "inherit"
##  $ strip.placement           : NULL
##  $ strip.text                :List of 11
##   ..$ family       : NULL
##   ..$ face         : NULL
##   ..$ colour       : NULL
##   ..$ size         : 'rel' num 0.8
##   ..$ hjust        : NULL
##   ..$ vjust        : NULL
##   ..$ angle        : NULL
##   ..$ lineheight   : NULL
##   ..$ margin       : NULL
##   ..$ debug        : NULL
##   ..$ inherit.blank: logi TRUE
##   ..- attr(*, "class")= chr [1:2] "element_text" "element"
##  $ strip.text.x              : NULL
##  $ strip.text.x.bottom       : NULL
##  $ strip.text.x.top          : NULL
##  $ strip.text.y              : NULL
##  $ strip.text.y.left         : NULL
##  $ strip.text.y.right        : NULL
##  $ strip.switch.pad.grid     : 'simpleUnit' num 2.75points
##   ..- attr(*, "unit")= int 8
##  $ strip.switch.pad.wrap     : 'simpleUnit' num 2.75points
##   ..- attr(*, "unit")= int 8
##  $ fill                      : chr "Precio"
##  - attr(*, "class")= chr [1:2] "theme" "gg"
##  - attr(*, "complete")= logi TRUE
##  - attr(*, "validate")= logi TRUE

Observación del mapa

Se reflejan los puntos donde el costo de la gasolina es más alto en Colombia. Además, se observa el costo alrededor de cada departamento, representado según el color que le corresponde.