1.Carga de datos

setwd("/cloud/project/")
datos<-read.csv("DerramesEEUU.csv", header = TRUE, sep=";" , dec=",")
str(datos)
## 'data.frame':    2760 obs. of  59 variables:
##  $ NumeroInforme                          : int  20100064 20100054 20100092 20100098 20100101 20100102 20100113 20100120 20100039 20100150 ...
##  $ NumeroComplementario                   : int  15072 15114 15120 15127 15130 15132 15146 15162 15197 15205 ...
##  $ DiaAccidente                           : int  8 25 10 28 27 29 11 23 15 11 ...
##  $ MesAccidente                           : int  4 3 5 4 5 5 6 5 3 1 ...
##  $ AnioAccidente                          : int  2010 2010 2010 2010 2010 2010 2010 2010 2010 2010 ...
##  $ HoraAccidente                          : int  6 13 6 24 3 14 7 6 15 2 ...
##  $ AmPmAccidente                          : chr  "a. m." "p. m." "a. m." "p. m." ...
##  $ IDOperador                             : int  31684 18779 30829 12105 20160 30003 1248 300 18718 32296 ...
##  $ NombreOperador                         : chr  "CONOCOPHILLIPS" "SUNOCO, INC (R&M)" "TEPPCO CRUDE PIPELINE, LLC" "MAGELLAN AMMONIA PIPELINE, L.P." ...
##  $ NombreOleoductoInstalacion             : chr  "GD-03, GOLD LINE" "PHILADELPHIA REFINERY - WEST YARD" "HOBBS TO MIDLAND" "WHITING TO EARLY SEGMENT" ...
##  $ UbicacionOleoducto                     : chr  "ONSHORE" "ONSHORE" "ONSHORE" "ONSHORE" ...
##  $ TipoOleoducto                          : chr  "ABOVEGROUND" "ABOVEGROUND" "UNDERGROUND" "UNDERGROUND" ...
##  $ TipoLiquido                            : chr  "REFINED AND/OR PETROLEUM PRODUCT (NON-HVL), LIQUID" "REFINED AND/OR PETROLEUM PRODUCT (NON-HVL), LIQUID" "CRUDE OIL" "HVL OR OTHER FLAMMABLE OR TOXIC FLUID, GAS" ...
##  $ SubtipoLiquido                         : chr  "GASOLINE (NON-ETHANOL)" "OTHER" "-" "ANHYDROUS AMMONIA" ...
##  $ NombreLiquido                          : chr  "-" "VACUUM GAS OIL (VGO)" "-" "-" ...
##  $ CiudadAccidente                        : chr  "GREEN RIDGE" "PHILADELPHIA" "HOBBS" "SCHALLER" ...
##  $ CondadoAccidente                       : chr  "PETTIS" "PHILADELPHIA" "LEA" "IDA" ...
##  $ EstadoAccidente                        : chr  "MO" "PA" "NM" "IA" ...
##  $ LatitudAccidente                       : num  38.6 39.9 32.6 42.5 30.2 ...
##  $ LongitudAccidente                      : num  -93.4 -75.2 -103.1 -95.3 -91.2 ...
##  $ CategoriaCausa                         : chr  "NATURAL FORCE DAMAGE" "MATERIAL/WELD/EQUIP FAILURE" "CORROSION" "MATERIAL/WELD/EQUIP FAILURE" ...
##  $ SubcategoriaCausa                      : chr  "TEMPERATURE" "NON-THREADED CONNECTION FAILURE" "EXTERNAL" "CONSTRUCTION, INSTALLATION OR FABRICATION-RELATED" ...
##  $ LiberacionInvoluntariaBarriles         : num  0.24 1700 2 0.36 1.31 ...
##  $ LiberacionIntencionalBarriles          : chr  "0" "0" "-" "0.05" ...
##  $ RecuperacionLiquidoBarriles            : num  0.07 1699 0.48 0 0 ...
##  $ PerdidaNetaBarriles                    : num  0.17 1 1.52 0.36 1.31 ...
##  $ IgnicionLiquido                        : chr  "NO" "NO" "NO" "NO" ...
##  $ ExplosionLiquido                       : chr  "NO" "NO" "NO" "NO" ...
##  $ CierreOleoducto                        : chr  "YES" "YES" "NO" "NO" ...
##  $ DiaCierre                              : chr  "8" "25" "-" "-" ...
##  $ MesCierre                              : chr  "4" "3" "-" "-" ...
##  $ AnioCierre                             : chr  "2010" "2010" "-" "-" ...
##  $ HoraCierre                             : chr  "6" "18" "-" "-" ...
##  $ AmPmCierre                             : chr  "a. m." "p. m." "-" "-" ...
##  $ DiaReinicio                            : chr  "9" "28" "-" "-" ...
##  $ MesReinicio                            : chr  "4" "3" "-" "-" ...
##  $ AnioReinicio                           : chr  "2010" "2010" "-" "-" ...
##  $ HoraReinicio                           : chr  "10" "16" "-" "-" ...
##  $ AmPmReinicio                           : chr  "a. m." "p. m." "-" "-" ...
##  $ EvacuacionesPublicas                   : chr  "-" "0" "-" "-" ...
##  $ LesionesEmpleadosOperador              : chr  "-" "-" "-" "-" ...
##  $ LesionesContratistasOperador           : chr  "-" "-" "-" "-" ...
##  $ LesionesRescatistasEmergencia          : chr  "-" "-" "-" "-" ...
##  $ OtrasLesiones                          : chr  "-" "-" "-" "-" ...
##  $ LesionesPublico                        : chr  "-" "-" "-" "-" ...
##  $ TodasLesiones                          : chr  "-" "-" "-" "-" ...
##  $ FallecimientosEmpleadosOperador        : chr  "-" "-" "-" "-" ...
##  $ FallecimientosContratistasOperador     : chr  "-" "-" "-" "-" ...
##  $ FallecimientosRescatistasEmergencia    : chr  "-" "-" "-" "-" ...
##  $ OtrosFallecimientos                    : chr  "-" "-" "-" "-" ...
##  $ FallecimientosPublico                  : chr  "-" "-" "-" "-" ...
##  $ TodosFallecimientos                    : chr  "-" "-" "-" "-" ...
##  $ CostosDaniosPropiedad                  : chr  "0" "0" "30000" "12000" ...
##  $ CostosMercanciaPerdidas                : chr  "27" "0" "100" "30" ...
##  $ CostosDaniosPropiedadesPublicasPrivadas: chr  "0" "0" "1000" "5000" ...
##  $ CostosRespuestaEmergencia              : chr  "0" "0" "-" "0" ...
##  $ CostosRemediacionAmbiental             : chr  "0" "100000" "20000" "15000" ...
##  $ OtrosCostos                            : chr  "0" "0" "-" "0" ...
##  $ TodosCostos                            : int  27 100000 51100 32030 5220 150 7500 9965 11497 165593 ...

2.Extracción de datos

AnioAccidente <- datos$AnioAccidente

2.1 Gráfica de la variable

2.1.1 Distribución de frecuencias

# Frecuencias simples
TDFAnioAccidente <- table(AnioAccidente)
TablaAnioAccidente <- as.data.frame(TDFAnioAccidente)
names(TablaAnioAccidente) <- c("Anio","ni")
TablaAnioAccidente$hi_porc <- round((TablaAnioAccidente$ni / sum(TablaAnioAccidente$ni)) * 100, 2)


#  Frecuencias Acumuladas
TablaAnioAccidente$Ni_asc <- cumsum(TablaAnioAccidente$ni)
TablaAnioAccidente$Ni_dsc <- rev(cumsum(rev(TablaAnioAccidente$ni)))
TablaAnioAccidente$Hi_asc <- round(cumsum(TablaAnioAccidente$hi_porc), 3)
TablaAnioAccidente$Hi_dsc <- round(rev(cumsum(rev(TablaAnioAccidente$hi_porc))), 3)

2.1.2 Tabla de distribución de frecuencias

TDFFinalAnioAccidente<- rbind(TablaAnioAccidente, data.frame(
  Anio = "TOTAL",
  ni = sum(TablaAnioAccidente$ni),
  hi_porc = 100,
  Ni_asc = " ",
  Ni_dsc = " ",
  Hi_asc = " ",
  Hi_dsc = " "
  ))

library(gt)
tabla_AnioAccidente <- TDFFinalAnioAccidente %>%
  gt() %>%
  cols_label(
    Anio = md("**Año**"),
    ni = md("**ni**"),
    hi_porc = md("**hi (%)**"),
    Ni_asc = md("**Ni ↑**"),
    Ni_dsc = md("**Ni ↓**"),
    Hi_asc = md("**Hi ↑ (%)**"),
    Hi_dsc = md("**Hi ↓ (%)**")
  ) %>%
  tab_header(
    title = md("**Tabla N° 1**"),
    subtitle = md("**Distribución de accidentes en oleoductos por año en EE.UU. (2010-2017)**")
  ) %>%
  tab_source_note(
    source_note = md("Autor: Grupo 1")
  ) %>%
  tab_options(
    table.background.color = "white",
    row.striping.background_color = "white",
    table.border.top.color = "black",
    table.border.bottom.color = "black",
    table.border.top.style = "solid",
    table.border.bottom.style = "solid",
    column_labels.font.weight = "bold",
    column_labels.border.top.color = "black",
    column_labels.border.bottom.color = "black",
    column_labels.border.bottom.width = px(2),
    heading.border.bottom.color = "black",
    heading.border.bottom.width = px(2),
    table_body.hlines.color = "gray",
    table_body.border.bottom.color = "black"
  ) %>%
  tab_style(
    style = cell_text(weight = "bold"),
    locations = cells_body(
      rows = as.character(Anio) == "TOTAL"
    )
  )

tabla_AnioAccidente
Tabla N° 1
Distribución de accidentes en oleoductos por año en EE.UU. (2010-2017)
Año ni hi (%) Ni ↑ Ni ↓ Hi ↑ (%) Hi ↓ (%)
2010 346 12.54 346 2760 12.54 100
2011 336 12.17 682 2414 24.71 87.46
2012 362 13.12 1044 2078 37.83 75.29
2013 400 14.49 1444 1716 52.32 62.17
2014 447 16.20 1891 1316 68.52 47.68
2015 453 16.41 2344 869 84.93 31.48
2016 414 15.00 2758 416 99.93 15.07
2017 2 0.07 2760 2 100 0.07
TOTAL 2760 100.00
Autor: Grupo 1

2.1.3 Gráfica de frecuencia absoluta (Escala Local)

par(mar = c(6, 6, 4, 2)) 
barplot(
  TablaAnioAccidente$ni, 
  main = "Gráfica No.1: Distribución de la cantidad de accidentes
  por año en EE.UU.",
  xlab = "Año",
  ylab = "Cantidad",
  col = "tan1",
  names.arg = TablaAnioAccidente$Anio,
  las = 1,
  cex.main = 1.2,    
  cex.lab = 1.2,   
  cex.axis = 0.8,
  cex.names = 0.8
)

3. Conjetura del Modelo

Se considera que la variable AñoAccidente, podría seguir una distribución uniforme discreta. Bajo el modelo uniforme se asume que todos los años tienen la misma probabilidad de accidentes.

3.1 Definición de Hipótesis

  • Hipótesis nula (Ho): Los accidentes siguen una distribución uniforme.
  • Hipótesis alternativa (H1): Los accidentes no siguen una distribución uniforme.

3.2 Calculo de Frecuencias

3.2.1 Frecuencias Observadas

Fo <- TablaAnioAccidente$ni

3.2.2 Frecuencias Esperadas bajo modelo uniforme

# Número de categorías (años distintos)
k <- length(Fo)
# Total de accidentes
total_accidentes <- sum(Fo)

Fe <- rep(total_accidentes / k, k)  

3.2.3 Tabla Final

tabla_mouniforme <- data.frame(
  Año = TablaAnioAccidente$Anio,
  Observado = as.numeric(Fo),
  Esperado = Fe
)

library(gt)

tabla_Mo <- tabla_mouniforme %>%
  gt() %>%
  cols_label(
    Año = md("**Año**"),
    Observado = md("**Frecuencia Observada**"),
    Esperado = md("**Frecuencia Esperada**")
  ) %>%
  tab_header(
    title = md("**Tabla N° 1**"),
    subtitle = md("**Distribución de Frecuencias Observadas y Esperadas
                  de todos los años de los accidentes en oleoductos EE.UU (2010-2017)**")
  ) %>%
  tab_source_note(
    source_note = md("Autor: Grupo 1")
  ) %>%
  tab_options(
    table.background.color = "white",
    row.striping.background_color = "white",
    table.border.top.color = "black",
    table.border.bottom.color = "black",
    table.border.top.style = "solid",
    table.border.bottom.style = "solid",
    column_labels.font.weight = "bold",
    column_labels.border.top.color = "black",
    column_labels.border.bottom.color = "black",
    column_labels.border.bottom.width = px(2),
    heading.border.bottom.color = "black",
    heading.border.bottom.width = px(2),
    table_body.hlines.color = "gray",
    table_body.border.bottom.color = "black"
  )

tabla_Mo
Tabla N° 1
Distribución de Frecuencias Observadas y Esperadas de todos los años de los accidentes en oleoductos EE.UU (2010-2017)
Año Frecuencia Observada Frecuencia Esperada
2010 346 345
2011 336 345
2012 362 345
2013 400 345
2014 447 345
2015 453 345
2016 414 345
2017 2 345
Autor: Grupo 1

3.2.4 Gráfico de Comparación

par(mar = c(6, 6, 6, 2), xpd = TRUE)
barplot(rbind(Fo, Fe),
        beside = TRUE,
        col = c("tan1", "darkgreen"),
        names.arg = names(Fo),
        xlab = "Año de accidente",
        ylab = "Frecuencia",
        las = 1,
        cex.names = 0.8,
        cex.axis = 1)

title(main = "Gráfica No.1: Comparación realidad y modelo uniforme de 
        los años de accidentes",
      cex.main = 1.2,
      line = 2.4) 

legend( x = 19, y = 500,
       legend = c("Modelo Observado", "Modelo Uniforme"),
       fill = c("tan1", "darkgreen"),
       bty = "o",
       y.intersp = 0.7,
       inset = 0.2,
       cex = 0.7)

3.3 Test

3.3.1 Test de Pearson (Correlación de frecuencias)

Fo_num <- as.numeric(Fo)
Fe_num <- as.numeric(Fe)
cor_uniforme <- cor(Fo_num, Fe_num)
## Warning in cor(Fo_num, Fe_num): the standard deviation is zero

Gráfico de correlación

plot(Fo_num, Fe_num,
     main = "Gráfico No.2: Correlación Observadas vs Esperadas
     (Uniforme)",
     xlab = "Frecuencias Observadas",
     ylab = "Frecuencias Esperadas",
     pch = 19, col = "darkgreen")
abline(lm(Fe ~ Fo), col = "red", lwd = 2)

3.3.2 Test de Bondad de ajuste

Chi-cuadrado

x2 <- sum((Fo - Fe)^2 / Fe)

Estadístico Chi-cuadrado (X2): 428.6203

Nivel de significancia y grados de libertad

nivel_significancia <- 0.05
grados_libertad <- k - 1

Valor crítico

Vc <- qchisq(1 - nivel_significancia, grados_libertad)

Valor crítico: 14.06714

4. Decisión del Modelo

if (x2 < Vc) {
  cat("Conclusión: No se rechaza H0, los accidentes podrían seguir una distribución uniforme.")
} else {
  cat("Conclusión: Se rechaza H0, los accidentes NO siguen una distribución uniforme.")
}
## Conclusión: Se rechaza H0, los accidentes NO siguen una distribución uniforme.