1 Latitud

1.1 Carga de datos

datos <- read.csv("Derrames_globales2.csv", header = TRUE, sep = ";" , dec = ".")
str(datos)
## 'data.frame':    3550 obs. of  23 variables:
##  $ Id                              : int  6786 6250 8220 6241 6216 6620 6262 6229 6201 6221 ...
##  $ Dia                             : int  19 3 21 16 19 7 10 12 18 29 ...
##  $ Mes                             : int  1 6 4 3 12 10 2 5 3 1 ...
##  $ Año                             : chr  "A" "1979" "2010" "1978" ...
##  $ Nombre                          : chr  "Arabian Gulf Spills; Persian Gulf, Kuwait" "IXTOC I; Bahia de Campeche, Mexico" "Deepwater Horizon; Gulf of Mexico" "Amoco Cadiz; Brittany, France" ...
##  $ Ubicacion                       : chr  "Persian Gulf, Kuwait" "Bahia de Campeche, Mexico" "Gulf of Mexico" "Brittany, France" ...
##  $ Latitud                         : chr  "29,5" "19,4083" "28,7367" "48,5833" ...
##  $ Longuitud                       : chr  "48" "-92,325" "-88,3872" "-4,71667" ...
##  $ Amenaza                         : chr  "Oil" "Oil" "Oil" "Oil" ...
##  $ Etiquetas                       : chr  "" "Collision" "" "Grounding" ...
##  $ Tipo_de_crudo                   : chr  "Kuwait crude oil" "IXTOC I crude oil" "Diesel, crude oil" "Arabian light crude, Iranian light crude, Bunker C" ...
##  $ Cantidad_recuperada_superficie  : int  NA NA 1 NA NA NA NA NA NA NA ...
##  $ Cantidad_recuperada_costas      : int  NA NA 1 NA NA NA NA NA NA NA ...
##  $ Cantidad_tratada_biologicamente : int  1 NA 1 1 NA NA NA NA NA NA ...
##  $ Cantidad_dispersada_quimicamente: int  NA 1 1 1 NA NA NA 1 1 1 ...
##  $ Cantidad_quemada                : int  NA 1 1 NA NA NA NA 1 1 1 ...
##  $ Maximo_liberacion_galones       : int  336000009 NA 205000000 68000017 NA NA NA 9240000 36100000 NA ...
##  $ Barreras_de_contencion_flotantes: int  35 12 182 17 3 3 7 8 5 6 ...
##  $ Causa_principal                 : chr  "Daño del tanque  " "Incendio y explosion " "Incendio y explosion " "Daño del tanque " ...
##  $ Volumen_derramados_galones      : chr  "336.000.000" "365.000.000" "600.000.000" "68.000.000" ...
##  $ Respuesta_actual_galones        : chr  "336000000" "252000000" "168000000" "68700000" ...
##  $ Fuente_respuesta                : chr  "description and posts" "posts" "description" "posts" ...
##  $ etiqueta_actualizacion          : chr  "RA updated" "RA newly acquired" "RA updated" "RA updated" ...

1.2 Extraer la variable

datos$Latitud <- as.numeric(as.character(datos$Latitud))
## Warning: NAs introduced by coercion

1.3 Tabla de frecuencias

#Creación de los rangos

rango_Latitud <- cut(datos$Latitud,
                   breaks = seq(floor(min(datos$Latitud, na.rm = TRUE)), ceiling(max(datos$Latitud, na.rm = TRUE)), by = 10),
                   right = FALSE)
# Generación de la tabla de frecuencias
TDF_Latitud <- table(rango_Latitud)
tabla_Latitud <- as.data.frame(TDF_Latitud)

# Cálculo de los porcentajes

hi_Latitud <- (tabla_Latitud$Freq / sum(tabla_Latitud$Freq)) * 100
tabla_Latitud$hi <- round(hi_Latitud, 2)

# Cálculo de frecuencias acumuladas

Niasc_Latitud <- cumsum(tabla_Latitud$Freq)
Hiasc_Latitud <- cumsum(hi_Latitud)
Nidsc_Latitud <- rev(cumsum(rev(tabla_Latitud$Freq)))
Hidsc_Latitud <- rev(cumsum(rev(hi_Latitud)))

# Creación de la tabla final 

tabla_Latitud_Final <- data.frame(
  Rango_Latitud = levels(rango_Latitud),  
  Frecuencia = tabla_Latitud$Freq,
  Porcentaje = tabla_Latitud$hi,
  Niasc = Niasc_Latitud,
  Hiasc = round(Hiasc_Latitud, 2),
  Nidsc = Nidsc_Latitud,
  Hidsc = round(Hidsc_Latitud, 2))

# Imprimir tabla final

print(tabla_Latitud_Final)
##    Rango_Latitud Frecuencia Porcentaje Niasc  Hiasc Nidsc  Hidsc
## 1      [-78,-68)          1       3.85     1   3.85    26 100.00
## 2      [-68,-58)          0       0.00     1   3.85    25  96.15
## 3      [-58,-48)          1       3.85     2   7.69    25  96.15
## 4      [-48,-38)          0       0.00     2   7.69    24  92.31
## 5      [-38,-28)          1       3.85     3  11.54    24  92.31
## 6      [-28,-18)          0       0.00     3  11.54    23  88.46
## 7       [-18,-8)          0       0.00     3  11.54    23  88.46
## 8         [-8,2)          0       0.00     3  11.54    23  88.46
## 9         [2,12)          1       3.85     4  15.38    23  88.46
## 10       [12,22)          5      19.23     9  34.62    22  84.62
## 11       [22,32)          9      34.62    18  69.23    17  65.38
## 12       [32,42)          5      19.23    23  88.46     8  30.77
## 13       [42,52)          3      11.54    26 100.00     3  11.54

1.3.1 Histograma

par(mar = c(8, 4, 4, 2))  

bp1 <- barplot(tabla_Latitud_Final$Frecuencia,
               names.arg = tabla_Latitud_Final$Rango_Latitud,
               main = "Frecuencia de la Latitud en los derrames globales",
               cex.main = 0.9,
               xlab = "Latitud",
               ylab = "Frecuencia",
               col = terrain.colors(length(tabla_Latitud_Final$Frecuencia)),
               border = "black",
               las = 2,             # 🔹 Rota etiquetas (vertical)
               cex.names = 0.8)     # 🔹 Reduce tamaño de fuente

# Añadir valores encima de cada barra
text(x = bp1, 
     y = tabla_Latitud_Final$Frecuencia,
     labels = tabla_Latitud_Final$Frecuencia,
     pos = 3, cex = 0.7, col = "black")

1.3.2 Diagrama de cajas

boxplot(
  datos$Latitud,
  horizontal = TRUE,
  col = "beige",
  main = " Diagrama de Caja de la Latitud en Derrames Petroleros a Nivel Global",
  cex.main = 0.8,
  xlab = "Latitud"
)

1.3.3 Ojiva ascendente y descendente

x_Latitud <- 1:length(tabla_Latitud_Final$Rango_Latitud)  
y_ni_asc_Latitud <- tabla_Latitud_Final$Niasc
y_ni_dsc_Latitud <- tabla_Latitud_Final$Nidsc

plot(x_Latitud, y_ni_asc_Latitud,
     type = "b",
     main = " Ojivas de la Latitud en Derrames Petroleros a Nivel Global",
     cex.main = 0.8,
     xlab = " Latitud",
     ylab = "Frecuencia acumulada",
     col = "black")
lines(x_Latitud, y_ni_dsc_Latitud, col = "blue", type = "b")
grid()

# Leyenda más a la izquierda

legend("topleft", legend = c("Ascendente", "Descendente"), 
       col = c("black", "blue"), lty = 1, cex = 0.8, inset = c(0.02, 0.29))

1.4 Conclusión

Los resultados muestran que la latitud con mayor frecuencia se encuentra en el rango [22,32) con un 34.62% , seguido por el rango [12,22) Y [32,42) con un 19.23% . La distribución es ligeramente asimétrica hacia el hemisferio norte y las ojivas confirman que más del 80% de los derrames ocurren en los primeros cuatro rangos. El diagrama de caja evidencia que la mayoría de los datos se concentran cerca de la mediana, con pocos valores extremos.

2 Longitud

2.1 Extraer la variable

datos$Longuitud <- as.numeric(as.character(datos$Longuitud))
## Warning: NAs introduced by coercion

2.2 Tabla de frecuencias

# Creación de los rangos para la radiación solar

rango_Longuitud <- cut(datos$Longuitud,
                       breaks = seq(floor(min(datos$Longuitud, na.rm = TRUE)),
                                    ceiling(max(datos$Longuitud, na.rm = TRUE)),
                                    by = 20), 
                       right = FALSE)

# Generación de la tabla de frecuencias

TDF_Longuitud <- table(rango_Longuitud)
tabla_Longuitud <- as.data.frame(TDF_Longuitud)

# Cálculo de los porcentajes

hi_Longuitud <- (tabla_Longuitud$Freq / sum(tabla_Longuitud$Freq)) * 100
tabla_Longuitud$hi <- round(hi_Longuitud, 2)

# Cálculo de frecuencias acumuladas

Niasc_Longuitud <- cumsum(tabla_Longuitud$Freq)
Hiasc_Longuitud <- cumsum(hi_Longuitud)
Nidsc_Longuitud <- rev(cumsum(rev(tabla_Longuitud$Freq)))
Hidsc_Longuitud <- rev(cumsum(rev(hi_Longuitud)))

# Creación de la tabla final con todos los cálculos

tabla_Longuitud_Final <- data.frame(
  Rango_Longuitud = levels(rango_Longuitud),  
  Frecuencia = tabla_Longuitud$Freq,
  Porcentaje = tabla_Longuitud$hi,
  Niasc = Niasc_Longuitud,
  Hiasc = round(Hiasc_Longuitud, 2),
  Nidsc = Nidsc_Longuitud,
  Hidsc = round(Hidsc_Longuitud, 2)
)

# Imprimir tabla final

print(tabla_Longuitud_Final)
##    Rango_Longuitud Frecuencia Porcentaje Niasc  Hiasc Nidsc  Hidsc
## 1      [-174,-154)          5      11.36     5  11.36    44 100.00
## 2      [-154,-134)          3       6.82     8  18.18    39  88.64
## 3      [-134,-114)          4       9.09    12  27.27    36  81.82
## 4       [-114,-94)          4       9.09    16  36.36    32  72.73
## 5        [-94,-74)         16      36.36    32  72.73    28  63.64
## 6        [-74,-54)          8      18.18    40  90.91    12  27.27
## 7        [-54,-34)          0       0.00    40  90.91     4   9.09
## 8        [-34,-14)          0       0.00    40  90.91     4   9.09
## 9          [-14,6)          1       2.27    41  93.18     4   9.09
## 10          [6,26)          1       2.27    42  95.45     3   6.82
## 11         [26,46)          0       0.00    42  95.45     2   4.55
## 12         [46,66)          2       4.55    44 100.00     2   4.55
## 13         [66,86)          0       0.00    44 100.00     0   0.00
## 14        [86,106)          0       0.00    44 100.00     0   0.00
## 15       [106,126)          0       0.00    44 100.00     0   0.00
## 16       [126,146)          0       0.00    44 100.00     0   0.00

2.3 Gráficos

2.3.1 Histograma Local

par(mar = c(8, 4, 4, 2))  

bp1 <- barplot(tabla_Longuitud_Final$Frecuencia,
               names.arg = tabla_Longuitud_Final$Rango_Longuitud,
               main = "Frecuencia de la Longitud en Derrames Petroleros a Nivel Global",
               cex.main = 0.9,
               xlab = "Longitud",
               ylab = "Frecuencia",
               col = terrain.colors(length(tabla_Longuitud_Final$Frecuencia)),
               border = "black",
               las = 2,            
               cex.names = 0.5)    

# Añadir valores encima de cada barra
text(x = bp1, 
     y = tabla_Longuitud_Final$Frecuencia, 
     labels = tabla_Longuitud_Final$Frecuencia,
     pos = 3, cex = 0.7, col = "black")

2.3.2 Diagrama de cajas

boxplot(datos$Longuitud,
        horizontal = TRUE,
        col = "beige",
        main = "Diagrama de Caja de la Longitud en Derrames Petroleros a Nivel Global",
        cex.main = 0.8,
        xlab = "Longitud")

2.3.3 Ojiva ascendente y descendente

x_Longuitud <- 1:length(tabla_Longuitud_Final$Rango_Longuitud)  # solo índice
y_ni_asc_Longuitud <- tabla_Longuitud_Final$Niasc
y_ni_dsc_Longuitud <- tabla_Longuitud_Final$Nidsc

plot(x_Longuitud, y_ni_asc_Longuitud,
     type = "b",
     main = "Ojivas de la Longitud en Derrames Petroleros a Nivel Global",
     cex.main = 0.8,
     xlab = "Longitud ",
     ylab = "Frecuencia acumulada",
     col = "black")
lines(x_Longuitud, y_ni_dsc_Longuitud, col = "blue", type = "b")
grid()
legend("right", legend = c("Ascendente", "Descendente"),
       col = c("black", "blue"), lty = 1, cex = 0.6)

2.4 Conclusión

Los resultados muestran que la mayor concentración de derrames petroleros se encuentra en los rangos de longitud negativa, destacando el intervalo [-94, -74) con un 36.4%, seguido por [-74, -54) con un 18.2%. Esto evidencia que la mayoría de los eventos se registran en el hemisferio occidental. El diagrama de caja confirma esta tendencia, ya que la mediana se concentra alrededor de valores negativos, mientras que se observan valores atípicos en longitudes positivas que representan pocos casos aislados. Finalmente, las ojivas muestran que más del 70% de los derrames se acumulan en los primeros cinco rangos, lo cual indica una distribución predominantemente agrupada hacia el occidente, con una menor frecuencia en otras regiones longitudinales.

3 Maxima Liberación de petróleo

3.1 Carga de datos

setwd("/cloud/project")
datos <- read.csv("Derrames_globales2.csv", header = TRUE, sep = ";" , dec = ".")
str(datos)
## 'data.frame':    3550 obs. of  23 variables:
##  $ Id                              : int  6786 6250 8220 6241 6216 6620 6262 6229 6201 6221 ...
##  $ Dia                             : int  19 3 21 16 19 7 10 12 18 29 ...
##  $ Mes                             : int  1 6 4 3 12 10 2 5 3 1 ...
##  $ Año                             : chr  "A" "1979" "2010" "1978" ...
##  $ Nombre                          : chr  "Arabian Gulf Spills; Persian Gulf, Kuwait" "IXTOC I; Bahia de Campeche, Mexico" "Deepwater Horizon; Gulf of Mexico" "Amoco Cadiz; Brittany, France" ...
##  $ Ubicacion                       : chr  "Persian Gulf, Kuwait" "Bahia de Campeche, Mexico" "Gulf of Mexico" "Brittany, France" ...
##  $ Latitud                         : chr  "29,5" "19,4083" "28,7367" "48,5833" ...
##  $ Longuitud                       : chr  "48" "-92,325" "-88,3872" "-4,71667" ...
##  $ Amenaza                         : chr  "Oil" "Oil" "Oil" "Oil" ...
##  $ Etiquetas                       : chr  "" "Collision" "" "Grounding" ...
##  $ Tipo_de_crudo                   : chr  "Kuwait crude oil" "IXTOC I crude oil" "Diesel, crude oil" "Arabian light crude, Iranian light crude, Bunker C" ...
##  $ Cantidad_recuperada_superficie  : int  NA NA 1 NA NA NA NA NA NA NA ...
##  $ Cantidad_recuperada_costas      : int  NA NA 1 NA NA NA NA NA NA NA ...
##  $ Cantidad_tratada_biologicamente : int  1 NA 1 1 NA NA NA NA NA NA ...
##  $ Cantidad_dispersada_quimicamente: int  NA 1 1 1 NA NA NA 1 1 1 ...
##  $ Cantidad_quemada                : int  NA 1 1 NA NA NA NA 1 1 1 ...
##  $ Maximo_liberacion_galones       : int  336000009 NA 205000000 68000017 NA NA NA 9240000 36100000 NA ...
##  $ Barreras_de_contencion_flotantes: int  35 12 182 17 3 3 7 8 5 6 ...
##  $ Causa_principal                 : chr  "Daño del tanque  " "Incendio y explosion " "Incendio y explosion " "Daño del tanque " ...
##  $ Volumen_derramados_galones      : chr  "336.000.000" "365.000.000" "600.000.000" "68.000.000" ...
##  $ Respuesta_actual_galones        : chr  "336000000" "252000000" "168000000" "68700000" ...
##  $ Fuente_respuesta                : chr  "description and posts" "posts" "description" "posts" ...
##  $ etiqueta_actualizacion          : chr  "RA updated" "RA newly acquired" "RA updated" "RA updated" ...

3.2 Extraer la variable

Maximo_liberacion_galones <- datos$Maximo_liberacion_galones
Maximo_liberacion_galones <- na.omit(Maximo_liberacion_galones)

3.3 Rango 1: 0-40000

breaks_1 <- seq(0, 40000, by = 2666.66)
cut_1 <- cut(Maximo_liberacion_galones[Maximo_liberacion_galones >= 0 & Maximo_liberacion_galones <= 40000],
             breaks = breaks_1, right = TRUE, include.lowest = TRUE)
TDF_1 <- table(cut_1)
Tabla_1 <- as.data.frame(TDF_1)
hi_1 <- (Tabla_1$Freq / sum(Tabla_1$Freq)) * 100
Ni_asc_1 <- cumsum(Tabla_1$Freq)
Hi_asc_1 <- cumsum(hi_1)
Ni_dsc_1 <- rev(cumsum(rev(Tabla_1$Freq)))
Hi_dsc_1 <- rev(cumsum(rev(hi_1)))
Tabla_Final_1 <- data.frame(
  Intervalo = as.character(Tabla_1$cut_1),
  ni = Tabla_1$Freq,
  hi = round(hi_1, 2),
  Ni_asc = Ni_asc_1,
  Hi_asc = round(Hi_asc_1, 2),
  Ni_dsc = Ni_dsc_1,
  Hi_dsc = round(Hi_dsc_1, 2)
)

print(Tabla_Final_1)
##              Intervalo   ni    hi Ni_asc Hi_asc Ni_dsc Hi_dsc
## 1         [0,2.67e+03] 1014 60.75   1014  60.75   1669 100.00
## 2  (2.67e+03,5.33e+03]  236 14.14   1250  74.90    655  39.25
## 3     (5.33e+03,8e+03]   90  5.39   1340  80.29    419  25.10
## 4     (8e+03,1.07e+04]   93  5.57   1433  85.86    329  19.71
## 5  (1.07e+04,1.33e+04]   43  2.58   1476  88.44    236  14.14
## 6   (1.33e+04,1.6e+04]   30  1.80   1506  90.23    193  11.56
## 7   (1.6e+04,1.87e+04]   19  1.14   1525  91.37    163   9.77
## 8  (1.87e+04,2.13e+04]   41  2.46   1566  93.83    144   8.63
## 9   (2.13e+04,2.4e+04]    9  0.54   1575  94.37    103   6.17
## 10  (2.4e+04,2.67e+04]   28  1.68   1603  96.05     94   5.63
## 11 (2.67e+04,2.93e+04]    9  0.54   1612  96.58     66   3.95
## 12  (2.93e+04,3.2e+04]   21  1.26   1633  97.84     57   3.42
## 13  (3.2e+04,3.47e+04]   16  0.96   1649  98.80     36   2.16
## 14 (3.47e+04,3.73e+04]   12  0.72   1661  99.52     20   1.20
## 15    (3.73e+04,4e+04]    8  0.48   1669 100.00      8   0.48

3.3.1 Histograma

barplot(
  Tabla_Final_1$ni,
  names.arg = Tabla_Final_1$Intervalo,
  col = "skyblue",
  main = "Distribución de la Maxima Liberación Petrolera a Nivel Global (Rango 1)",
  xlab = "Máximo de liberación ",
  ylab = "Frecuencia",
  las = 2,
  cex.names = 0.6,
  border = "black",
  xaxt = "n")

3.3.2 Diagrama de caja

boxplot(
  Maximo_liberacion_galones[Maximo_liberacion_galones >= 0 & Maximo_liberacion_galones <= 40000],
  horizontal = TRUE,
  col = "lightblue",
  main = "Distribución de la Maxima Liberación Petrolera a Nivel Global(Rango 1)",
  xlab = "Máximo de liberación ",
  cex.main = 0.9,
  xaxt = "n")

axis(1, at = pretty(Maximo_liberacion_galones[Maximo_liberacion_galones >= 0 & Maximo_liberacion_galones <= 50000]),
     labels = format(pretty(Maximo_liberacion_galones[Maximo_liberacion_galones >= 0 & Maximo_liberacion_galones <= 50000]),
                     scientific = FALSE))

3.3.3 Ojiva ascendente y descendente

x_vals_1 <- seq_along(Tabla_Final_1$Intervalo)
ymax_1 <- max(Tabla_Final_1$Ni_asc, Tabla_Final_1$Ni_dsc) * 1.1 
plot(x_vals_1, Tabla_Final_1$Ni_asc,
     type = "b", pch = 19, col = "blue", 
     ylim = c(0, ymax_1),
     xaxt = "n",
     main = "Ojiva ascendente (Rango 1)",
     xlab = "Maximo de liberación", ylab = "Frecuencia acumulada")
axis(1, at = x_vals_1, labels = Tabla_Final_1$Intervalo, las = 2, cex.axis = 0.7)

plot(x_vals_1, Tabla_Final_1$Ni_dsc,
     type = "b", pch = 19, col = "red",
     ylim = c(0, ymax_1),
     xaxt = "n",
     main = "Ojiva descendente (Rango 1)",
     xlab = "Maximo de liberación", ylab = "Frecuencia acumulada")
axis(1, at = x_vals_1, labels = Tabla_Final_1$Intervalo, las = 2, cex.axis = 0.7)

plot(x_vals_1, Tabla_Final_1$Ni_asc,
     type = "b", pch = 19, col = "blue",
     ylim = c(0, ymax_1),
     xaxt = "n",
     main = "Ojivas Ascendente y Descendente de la Maxima Liberación Petrolera a Nivel Global (Rango 1)",
     cex.main = 0.9,
     xlab = "Maximo de liberación", ylab = "Frecuencia acumulada")
lines(x_vals_1, Tabla_Final_1$Ni_dsc, type = "b", pch = 19, col = "red")
axis(1, at = x_vals_1, labels = Tabla_Final_1$Intervalo, las = 2, cex.axis = 0.7)
legend("topright", legend = c("Ascendente", "Descendente"), col = c("blue", "red"), pch = 19)

3.4 Rango 2: 40001-336000009

breaks_2 <- seq(40001, 336000009, by = 22397333.86)
cut_2 <- cut(Maximo_liberacion_galones[
  Maximo_liberacion_galones >= 40001 & Maximo_liberacion_galones <= 336000009
],
breaks = breaks_2, right = TRUE, include.lowest = TRUE)
TDF_2 <- table(cut_2)
Tabla_2 <- as.data.frame(TDF_2)
hi_2 <- (Tabla_2$Freq / sum(Tabla_2$Freq)) * 100
Ni_asc_2 <- cumsum(Tabla_2$Freq)
Hi_asc_2 <- cumsum(hi_2)
Ni_dsc_2 <- rev(cumsum(rev(Tabla_2$Freq)))
Hi_dsc_2 <- rev(cumsum(rev(hi_2)))
Tabla_Final_2 <- data.frame(
  Intervalo = as.character(Tabla_2$cut_2),
  ni = Tabla_2$Freq,
  hi = round(hi_2, 2),
  Ni_asc = Ni_asc_2,
  Hi_asc = round(Hi_asc_2, 2),
  Ni_dsc = Ni_dsc_2,
  Hi_dsc = round(Hi_dsc_2, 2)
)

print(Tabla_Final_2)
##              Intervalo  ni    hi Ni_asc Hi_asc Ni_dsc Hi_dsc
## 1     [4e+04,2.24e+07] 467 97.29    467  97.29    480 100.00
## 2  (2.24e+07,4.48e+07]  11  2.29    478  99.58     13   2.71
## 3  (4.48e+07,6.72e+07]   0  0.00    478  99.58      2   0.42
## 4  (6.72e+07,8.96e+07]   1  0.21    479  99.79      2   0.42
## 5  (8.96e+07,1.12e+08]   0  0.00    479  99.79      1   0.21
## 6  (1.12e+08,1.34e+08]   0  0.00    479  99.79      1   0.21
## 7  (1.34e+08,1.57e+08]   0  0.00    479  99.79      1   0.21
## 8  (1.57e+08,1.79e+08]   0  0.00    479  99.79      1   0.21
## 9  (1.79e+08,2.02e+08]   0  0.00    479  99.79      1   0.21
## 10 (2.02e+08,2.24e+08]   1  0.21    480 100.00      1   0.21
## 11 (2.24e+08,2.46e+08]   0  0.00    480 100.00      0   0.00
## 12 (2.46e+08,2.69e+08]   0  0.00    480 100.00      0   0.00
## 13 (2.69e+08,2.91e+08]   0  0.00    480 100.00      0   0.00
## 14 (2.91e+08,3.14e+08]   0  0.00    480 100.00      0   0.00
## 15 (3.14e+08,3.36e+08]   0  0.00    480 100.00      0   0.00

3.4.1 Histograma

barplot(
  Tabla_Final_2$ni,
  names.arg = Tabla_Final_2$Intervalo,
  col = "purple",
  main = "Distribución de la Maxima Liberación Petrolera a Nivel Global(Rango 2)",
  xlab = "Máximo de liberación ",
  ylab = "Máximo de liberación ",
  las = 2,
  cex.names = 0.6,
  border = "black",
  xaxt = "n")

3.4.2 Diagrama de caja

boxplot(
  Maximo_liberacion_galones[
    Maximo_liberacion_galones >= 40001 & Maximo_liberacion_galones <= 336000009
  ],
  horizontal = TRUE,
  col = "purple3",
  main = "Distribución de la Maxima Liberación Petrolera a Nivel Global (Rango 2)",
  xlab = "Maximo de liberación",
  cex.main = 0.95)

3.4.3 Ojiva ascendente y descendente

x_vals_2 <- seq_along(Tabla_Final_2$Intervalo)
ymax_2 <- max(Tabla_Final_2$Ni_asc, Tabla_Final_2$Ni_dsc) * 1.1  
plot(x_vals_2, Tabla_Final_2$Ni_asc,
     type = "b", pch = 19, col = "blue",  
     ylim = c(0, ymax_2),
     xaxt = "n",
     main = "Ojiva ascendente (Rango 2)",
     xlab = "Maximo de liberación", ylab = "Frecuencia acumulada")
axis(1, at = x_vals_2, labels = Tabla_Final_2$Intervalo, las = 2, cex.axis = 0.7)

plot(x_vals_2, Tabla_Final_2$Ni_dsc,
     type = "b", pch = 19, col = "red",
     ylim = c(0, ymax_2),
     xaxt = "n",
     main = "Ojiva descendente (Rango 2)",
     xlab = "Maximo de liberación", ylab = "Frecuencia acumulada")
axis(1, at = x_vals_2, labels = Tabla_Final_2$Intervalo, las = 2, cex.axis = 0.7)

plot(x_vals_2, Tabla_Final_2$Ni_asc,
     type = "b", pch = 19, col = "blue",
     ylim = c(0, ymax_2),
     xaxt = "n",
     main = "Ojivas Ascendente y Descendente (Rango 2)",
     cex.main = 0.9,
     xlab = "Maximo de liberación", ylab = "Frecuencia acumulada")
lines(x_vals_2, Tabla_Final_2$Ni_dsc, type = "b", pch = 19, col = "red")
axis(1, at = x_vals_2, labels = Tabla_Final_2$Intervalo, las = 2, cex.axis = 0.7)
legend("topright", legend = c("Ascendente", "Descendente"), col = c("blue", "red"), pch = 19)

3.5 Conclusión

La variable que nos indica la Maxima Liberación Petrolera a Nivel Global nos muestra que en el Rango 1, la distribución se concentra en valores bajos y presenta pocos valores atípicos, mostrando una menor dispersión y una forma más homogénea. En cambio, el Rango 2 evidencia una mayor variabilidad y una gran cantidad de outliers, con algunos valores extremadamente altos que generan una distribución más sesgada y dispersa. Esto indica que los eventos del Rango 1 son más frecuentes y estables, mientras que en el Rango 2 predominan casos excepcionales de gran magnitud.

4 Respuesta actual

4.1 Cargar datos

Respuesta_actual_galones <- as.numeric(datos$Respuesta_actual_galones)
## Warning: NAs introduced by coercion
Respuesta_actual_galones <- na.omit(Respuesta_actual_galones)

4.2 Extraer la variable

Respuesta_actual_galones <- as.numeric(datos$Respuesta_actual_galones)
## Warning: NAs introduced by coercion
Respuesta_actual_galones <- na.omit(Respuesta_actual_galones)

4.3 Rango 1: 0 - 10000

breaks_1 <- seq(0, 10000, by = 500)
cut_1 <- cut(Respuesta_actual_galones[Respuesta_actual_galones >= 0 & Respuesta_actual_galones <= 10000], breaks = breaks_1, right = TRUE, include.lowest = TRUE)
TDF_1 <- table(cut_1)
Tabla_1 <- as.data.frame(TDF_1)
hi_1 <- (Tabla_1$Freq / sum(Tabla_1$Freq)) * 100
Ni_asc_1 <- cumsum(Tabla_1$Freq)
Hi_asc_1 <- cumsum(hi_1)
Ni_dsc_1 <- rev(cumsum(rev(Tabla_1$Freq)))
Hi_dsc_1 <- rev(cumsum(rev(hi_1)))
Tabla_Final_1 <- data.frame(
  Intervalo = Tabla_1$cut_1,
  ni = Tabla_1$Freq,
  hi = round(hi_1, 2),
  Ni_asc = Ni_asc_1,
  Hi_asc = round(Hi_asc_1, 2),
  Ni_dsc = Ni_dsc_1,
  Hi_dsc = round(Hi_dsc_1, 2)
)
print(Tabla_Final_1)
##          Intervalo  ni    hi Ni_asc Hi_asc Ni_dsc Hi_dsc
## 1          [0,500] 778 57.50    778  57.50   1353 100.00
## 2      (500,1e+03] 146 10.79    924  68.29    575  42.50
## 3  (1e+03,1.5e+03]  53  3.92    977  72.21    429  31.71
## 4  (1.5e+03,2e+03]  65  4.80   1042  77.01    376  27.79
## 5  (2e+03,2.5e+03]  44  3.25   1086  80.27    311  22.99
## 6  (2.5e+03,3e+03]  44  3.25   1130  83.52    267  19.73
## 7  (3e+03,3.5e+03]  17  1.26   1147  84.77    223  16.48
## 8  (3.5e+03,4e+03]  28  2.07   1175  86.84    206  15.23
## 9  (4e+03,4.5e+03]  42  3.10   1217  89.95    178  13.16
## 10 (4.5e+03,5e+03]  34  2.51   1251  92.46    136  10.05
## 11 (5e+03,5.5e+03]   4  0.30   1255  92.76    102   7.54
## 12 (5.5e+03,6e+03]  11  0.81   1266  93.57     98   7.24
## 13 (6e+03,6.5e+03]   5  0.37   1271  93.94     87   6.43
## 14 (6.5e+03,7e+03]  17  1.26   1288  95.20     82   6.06
## 15 (7e+03,7.5e+03]   2  0.15   1290  95.34     65   4.80
## 16 (7.5e+03,8e+03]  11  0.81   1301  96.16     63   4.66
## 17 (8e+03,8.5e+03]  19  1.40   1320  97.56     52   3.84
## 18 (8.5e+03,9e+03]   8  0.59   1328  98.15     33   2.44
## 19 (9e+03,9.5e+03]   3  0.22   1331  98.37     25   1.85
## 20 (9.5e+03,1e+04]  22  1.63   1353 100.00     22   1.63

4.3.1 Histograma

barplot(
  Tabla_Final_1$ni,
  names.arg = Tabla_Final_1$Intervalo,
  col = "purple2",
  main = "Distribución de la Cantidad recolectada de los derrames a Nivel Global (Rango 1)",
  xlab = "Cantidad recolectada",
  ylab = "Frecuencia",
  las = 2,
  cex.names = 0.6,
  border = "black")

4.3.2 Diagrama de caja

boxplot(
  Respuesta_actual_galones[Respuesta_actual_galones >= 0 & Respuesta_actual_galones <= 10000],
  horizontal = TRUE,
  col = "purple2",
  main = "Distribución de la Cantidad recolectada de los derrames a Nivel Global (Rango 1)",
  xlab = "Cantidad Recolectada",
  cex.main = 0.95,
  xaxt = "n")

axis(1, at = pretty(Respuesta_actual_galones[Respuesta_actual_galones >= 0 & Respuesta_actual_galones <= 500000]),
     labels = format(pretty(Respuesta_actual_galones[Respuesta_actual_galones >= 0 & Respuesta_actual_galones <= 500000]),
                     scientific = FALSE))

4.3.3 Ojiva ascendente y descendente

x_vals_1 <- seq_along(Tabla_Final_1$Intervalo) 
ymax_1 <- max(Tabla_Final_1$Ni_asc) * 1.1

plot(x_vals_1, Tabla_Final_1$Ni_asc,
     type = "b", pch = 19, col = "blue", lwd = 2,
     ylim = c(0, ymax_1),
     xaxt = "n",
     main = "Ojiva ascendente (Rango 1)",
     xlab = "Cantidad Recolectada", ylab = "Frecuencia acumulada")
axis(1, at = x_vals_1, labels = Tabla_Final_1$Intervalo, las = 2, cex.axis = 0.7)

plot(x_vals_1, Tabla_Final_1$Ni_dsc,
     type = "b", pch = 19, col = "red", lwd = 2,
     ylim = c(0, ymax_1),
     xaxt = "n",
     main = "Ojiva descendente (Rango 1)",
     xlab = "Cantidad Recolectada", ylab = "Frecuencia acumulada")
axis(1, at = x_vals_1, labels = Tabla_Final_1$Intervalo, las = 2, cex.axis = 0.7)

plot(x_vals_1, Tabla_Final_1$Ni_asc,
     type = "b", pch = 19, col = "blue", lwd = 2,
     ylim = c(0, ymax_1),
     xaxt = "n",
     main = "Ojivas Ascendente y Descendente de la Cantidad recolectada de los derrames a Nivel Global (Rango 1)",
     xlab = "Cantidad Recolectada", ylab = "Frecuencia acumulada")
lines(x_vals_1, Tabla_Final_1$Ni_dsc, col = "red", lwd = 2, type = "b", pch = 19)
axis(1, at = x_vals_1, labels = Tabla_Final_1$Intervalo, las = 2, cex.axis = 0.7)
legend("topright",
       legend = c("Ascendente", "Descendente"),
       col = c("blue", "red"),
       lty = 1, pch = 19, lwd = 2,
       cex = 0.7)

4.4 Rango 2: 10001 - 336000000

breaks_2 <- seq(10001, 336000000, by = 16800000 )
cut_2 <- cut(Respuesta_actual_galones[
  Respuesta_actual_galones >= 10001 & Respuesta_actual_galones <=  336000000
],
breaks = breaks_2, right = TRUE, include.lowest = TRUE)
TDF_2 <- table(cut_2)
Tabla_2 <- as.data.frame(TDF_2)
hi_2 <- (Tabla_2$Freq / sum(Tabla_2$Freq)) * 100
Ni_asc_2 <- cumsum(Tabla_2$Freq)
Hi_asc_2 <- cumsum(hi_2)
Ni_dsc_2 <- rev(cumsum(rev(Tabla_2$Freq)))
Hi_dsc_2 <- rev(cumsum(rev(hi_2)))
Tabla_Final_2 <- data.frame(
  Intervalo = as.character(Tabla_2$cut_2),
  ni = Tabla_2$Freq,
  hi = round(hi_2, 2),
  Ni_asc = Ni_asc_2,
  Hi_asc = round(Hi_asc_2, 2),
  Ni_dsc = Ni_dsc_2,
  Hi_dsc = round(Hi_dsc_2, 2)
)
print(Tabla_Final_2)
##              Intervalo  ni    hi Ni_asc Hi_asc Ni_dsc Hi_dsc
## 1     [1e+04,1.68e+07] 429 97.72    429  97.72    439 100.00
## 2  (1.68e+07,3.36e+07]   5  1.14    434  98.86     10   2.28
## 3  (3.36e+07,5.04e+07]   2  0.46    436  99.32      5   1.14
## 4  (5.04e+07,6.72e+07]   0  0.00    436  99.32      3   0.68
## 5   (6.72e+07,8.4e+07]   1  0.23    437  99.54      3   0.68
## 6   (8.4e+07,1.01e+08]   0  0.00    437  99.54      2   0.46
## 7  (1.01e+08,1.18e+08]   0  0.00    437  99.54      2   0.46
## 8  (1.18e+08,1.34e+08]   0  0.00    437  99.54      2   0.46
## 9  (1.34e+08,1.51e+08]   0  0.00    437  99.54      2   0.46
## 10 (1.51e+08,1.68e+08]   1  0.23    438  99.77      2   0.46
## 11 (1.68e+08,1.85e+08]   0  0.00    438  99.77      1   0.23
## 12 (1.85e+08,2.02e+08]   0  0.00    438  99.77      1   0.23
## 13 (2.02e+08,2.18e+08]   0  0.00    438  99.77      1   0.23
## 14 (2.18e+08,2.35e+08]   0  0.00    438  99.77      1   0.23
## 15 (2.35e+08,2.52e+08]   1  0.23    439 100.00      1   0.23
## 16 (2.52e+08,2.69e+08]   0  0.00    439 100.00      0   0.00
## 17 (2.69e+08,2.86e+08]   0  0.00    439 100.00      0   0.00
## 18 (2.86e+08,3.02e+08]   0  0.00    439 100.00      0   0.00
## 19 (3.02e+08,3.19e+08]   0  0.00    439 100.00      0   0.00

4.4.1 Histograma

barplot(
  Tabla_Final_2$ni,
  names.arg = Tabla_Final_2$Intervalo,
  col = "skyblue",
  main = " Distribución de la Cantidad recolectada de los derrames a Nivel Global (Rango 2)",
  xlab = "Cantidad recolectada",
  ylab = "Frecuencia",
  las = 2,
  cex.names = 0.6,
  border = "black")

4.4.2 Diagrama de caja

boxplot(
  Respuesta_actual_galones[
    Respuesta_actual_galones >= 10001 & Respuesta_actual_galones <= 336000000 ],
  horizontal = TRUE,
  col = "lightblue",
  main = "Distribución de la Cantidad recolectada de los derrames a Nivel Global (Rango 2)",
  xlab = "Cantidad Recolectada",
  cex.main = 0.95,
   xaxt = "n")

axis(1,
     at = pretty(Respuesta_actual_galones[
       Respuesta_actual_galones >= 10001 & Respuesta_actual_galones <= 336000000
     ]),
     labels = format(pretty(Respuesta_actual_galones[
       Respuesta_actual_galones >= 10001 & Respuesta_actual_galones <= 336000000
     ]),
     scientific = FALSE)
)

4.4.3 Ojiva ascendente y descendente

x_vals_2 <- seq_along(Tabla_Final_2$Intervalo)
ymax_2 <- max(Tabla_Final_2$Ni_asc) * 1.1
plot(x_vals_2, Tabla_Final_2$Ni_asc,
     type = "b", pch = 19, col = "blue", lwd = 2,
     ylim = c(0, ymax_2),
     xaxt = "n",
     main = "Ojiva ascendente (Rango 2)",
     xlab = "Cantidad Recolectada", ylab = "Frecuencia acumulada")
axis(1, at = x_vals_2, labels = Tabla_Final_2$Intervalo, las = 2, cex.axis = 0.7)

plot(x_vals_2, rev(Tabla_Final_2$Ni_dsc),
     type = "b", pch = 19, col = "red", lwd = 2,
     ylim = c(0, ymax_2),
     xaxt = "n",
     main = "Ojiva descendente (Rango 2 )",
     xlab = "Cantidad Recolectada", ylab = "Frecuencia acumulada")
axis(1, at = x_vals_2, labels = Tabla_Final_2$Intervalo, las = 2, cex.axis = 0.7)

plot(x_vals_2, Tabla_Final_2$Ni_asc,
     type = "b", pch = 19, col = "blue", lwd = 2,
     ylim = c(0, ymax_2),
     xaxt = "n",
     main = "Ojivas Ascendente y Descendente de la Cantidad recolectada de los derrames a Nivel Global (Rango 2)",
     xlab = "Cantidad Recolectada", ylab = "Frecuencia acumulada")
lines(x_vals_2, rev(Tabla_Final_2$Ni_dsc),
      col = "red", lwd = 2, type = "b", pch = 19)
axis(1, at = x_vals_2, labels = Tabla_Final_2$Intervalo, las = 2, cex.axis = 0.7)
legend("topright",
       legend = c("Ascendente", "Descendente"),
       col = c("blue", "red"),
       lty = 1, pch = 19, lwd = 2,
       cex = 0.8)

4.5 Conclusión

La variable que nos indica la Cantidad recolectada de los derrames a Nivel Global nos muestra que en el Rango 1, la distribución se concentra en valores bajos y presenta pocos valores atípicos, mostrando una menor dispersión y una forma más homogénea. En cambio, el Rango 2 evidencia una mayor variabilidad y una gran cantidad de outliers, con algunos valores extremadamente altos que generan una distribución más sesgada y dispersa. Esto indica que los eventos del Rango 1 son más frecuentes y estables, mientras que en el Rango 2 predominan casos excepcionales de gran magnitud.