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 -1 205000000 68000017 -1 -1 -1 9240000 36100000 -1 ...
##  $ Barreras_de_contencion_flotantes: int  35 12 182 17 3 3 7 8 5 6 ...
##  $ Causa_principal                 : chr  "Daño del tanque  " "Incendio y explosión " "Incendio y explosión " "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" ...

2 Extraer la variable

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

3 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),  # Intervalos de 10
                       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

4 Gráficos

4.1 Histograma Local

bp1 <- barplot(tabla_Longuitud_Final$Frecuencia,
               names.arg = tabla_Longuitud_Final$Rango_Longuitud,
               main = "Gráfica N°1: Frecuencia de la Longitud en los derrames globales",
               cex.main = 0.8,
               xlab = "Longitud",
               ylab = "Frecuencia",
               col = terrain.colors(length(TDF_Longuitud)),
               border = "black")

# 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")

4.2 Histograma global

bp2 <- barplot(TDF_Longuitud,
               main = "Gráfica N°2: Frecuencia Total de la Longitud en Derrames Petroleros a Nivel Global",
               cex.main = 0.8,
               xlab = "Longitud",
               ylab = "Cantidad",
               names.arg = tabla_Longuitud_Final$Rango_Longuitud,
               col = rainbow(length(TDF_Longuitud)),
               ylim = c(0, sum(TDF_Longuitud)))

# Añadir valores encima de cada barra 

text(x = bp2,y = TDF_Longuitud,labels = TDF_Longuitud, pos = 3, cex = 0.7, col = "black")

4.3 Histograma porcentual local

bp3 <- barplot(tabla_Longuitud_Final$Porcentaje,
               main = "Gráfica N°3: Porcentaje Local de la Longitud en Derrames Petroleros a Nivel Global",
               cex.main = 0.8,
               xlab = "Longitud",
               ylab = "Porcentaje",
               col = terrain.colors(length(TDF_Longuitud)),
               names.arg = tabla_Longuitud_Final$Rango_Longuitud,
               ylim = c(0, max(tabla_Longuitud_Final$Porcentaje) * 1.1))

# Añadir valores encima de cada barra 

text(x = bp3, y = tabla_Longuitud_Final$Porcentaje,
     labels = paste0(round(tabla_Longuitud_Final$Porcentaje, 1), "%"),
     pos = 3, cex = 0.7, col = "black")

4.4 Histograma porcentual global

bp4 <- barplot(tabla_Longuitud_Final$Porcentaje,
               main = "Gráfica N°4: Porcentaje Global de la Longitud en Derrames Petroleros a Nivel Global",
               cex.main = 0.8,
               xlab = "Longitud",
               ylab = "Porcentaje",
               col = rainbow(length(TDF_Longuitud)),
               names.arg = tabla_Longuitud_Final$Rango_Longuitud,
               ylim = c(0, 100))

# Añadir valores encima de cada barra 

text(x = bp4,y = tabla_Longuitud_Final$Porcentaje,
     labels = paste0(round(tabla_Longuitud_Final$Porcentaje, 1), "%"),
     pos = 3, cex = 0.7, col = "black")

4.5 Diagrama de cajas

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

4.6 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 = "Gráfica N°6: 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)

5 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.