1. CARGA DE DATOS Y LIBRERÍAS

# CARGA DE LIBRERÍAS
library(gt)
library(dplyr)
## 
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(knitr)
library(e1071)
library(moments)
## 
## Adjuntando el paquete: 'moments'
## The following objects are masked from 'package:e1071':
## 
##     kurtosis, moment, skewness
# Cargar datos
datos<- read.csv("C:/Users/arian/OneDrive/Documentos/Universidad/3er SEMESTRE/estadistica/2026/datos/dataset_geologico_limpio_80.csv")
cat(" Dimensiones:", nrow(datos), "observaciones:", ncol(datos), "variables\n\n")
##  Dimensiones: 27784 observaciones: 58 variables

2. SELECCION DE VARIABLE

# Extraer variable
longitud_raw<- datos$LONGITUDE
cat("Primeros valores de LONGITUDE:\n")
## Primeros valores de LONGITUDE:
head(longitud_raw)
## [1] -69.28333 -68.91667 -66.98333 -67.95000 -67.98333 -69.61667
# LIMPIEZA DE LA VARIABLE
longitud_raw <- as.numeric(longitud_raw)
longitud<- na.omit(longitud_raw)
summary(longitud)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## -170.52  -75.54  -70.97  -72.77  -70.17  123.56
# Número de datos
n <- length(longitud)
cat("Número de observaciones válidas (n):", n, "\n\n")
## Número de observaciones válidas (n): 27784

La variable LONGITUDE representa la posición geográfica este-oeste en la que fue recolectada cada muestra de sedimento marino. Es una variable cuantitativa continua, porque puede tomar valores decimales dentro de un intervalo. Para el análisis se eliminan los valores faltantes y se conservan únicamente las longitudes válidas, comprendidas entre −180° y 180°.

3. TABLA DE DISTRIBUCIÓN DE FRECUENCIA

TABLA DE DISTRIBUCIÓN DE CANTIDAD POR STURGES

La distribución de LONGITUDE se construye aplicando directamente la regla de Sturges, sin limitar previamente el número de clases. De esta manera, los valores de longitud se organizan en intervalos de clase, permitiendo presentar la agrupación teórica recomendada de acuerdo con el tamaño de la muestra y facilitando el análisis de la ubicación este-oeste de las muestras de sedimento marino.

# Numero de datos
n <- length(longitud)

# Parámetros de Sturges
minimo<- min(longitud)
maximo<- max(longitud)
R <- maximo - minimo
k <- floor(1 + 3.3 * log10(n))
A <- R / k

cat("PARÁMETROS:\n")
## PARÁMETROS:
cat("  Rango (R)            :", round(R, 4), "grados\n")
##   Rango (R)            : 294.0768 grados
cat("  Número intervalos (k):", k, "\n")
##   Número intervalos (k): 15
cat("  Amplitud clase (A)   :", round(A, 4), "grados\n\n")
##   Amplitud clase (A)   : 19.6051 grados
# Límites de clase
li <- seq(from = min(longitud), to = max(longitud) - A, by = A)
ls <- seq(from = min(longitud) + A, to = max(longitud), by = A)
MC <- round((li + ls) / 2,2)
# Frecuencias absolutas agrupadas
n_i <- numeric(length (li))
for (i in 1:length (li)) {
  n_i[i] <- sum(longitud >= li[i] & longitud < ls[i])
}
n_i[length(li)] <- sum(longitud >= li[length(li)] & longitud<= maximo)

# Frecuencias relativas y acumuladas
h_i <- (n_i / sum(n_i)) * 100
Ni_asc <- cumsum(n_i)
Hi_asc <- round(cumsum(h_i),2)
Ni_desc <- rev(cumsum(rev(n_i)))
Hi_desc <- round(rev(cumsum(rev(h_i))),2)
# Crear tabla agrupada
TablaFrecuenciasAgrupada <- round(data.frame(
  li, ls,MC,n_i,h_i,Ni_asc,Hi_asc,Ni_desc,Hi_desc
),2)

TablaFrecuenciasAgrupada[nrow(TablaFrecuenciasAgrupada) + 1, ] <- 
  c(NA, NA, "TOTAL", sum(n_i), round(sum(h_i), 2), NA, NA, NA, NA)

TablaFrecuenciasAgrupada
##         li      ls      MC   n_i   h_i Ni_asc Hi_asc Ni_desc Hi_desc
## 1  -170.52 -150.91 -160.72   118  0.42    118   0.42   27784     100
## 2  -150.91 -131.31 -141.11   265  0.95    383   1.38   27666   99.58
## 3  -131.31  -111.7 -121.51   714  2.57   1097   3.95   27401   98.62
## 4   -111.7   -92.1  -101.9   357  1.28   1454   5.23   26687   96.05
## 5    -92.1  -72.49   -82.3  9969 35.88  11423  41.11   26330   94.77
## 6   -72.49  -52.89  -62.69 15803 56.88  27226  97.99   16361   58.89
## 7   -52.89  -33.28  -43.09     0     0  27226  97.99     558    2.01
## 8   -33.28  -13.68  -23.48     0     0  27226  97.99     558    2.01
## 9   -13.68    5.93   -3.88   166   0.6  27392  98.59     558    2.01
## 10    5.93   25.53   15.73    19  0.07  27411  98.66     392    1.41
## 11   25.53   45.14   35.33     0     0  27411  98.66     373    1.34
## 12   45.14   64.74   54.94     0     0  27411  98.66     373    1.34
## 13   64.74   84.35   74.54    15  0.05  27426  98.71     373    1.34
## 14   84.35  103.95   94.15     5  0.02  27431  98.73     358    1.29
## 15  103.95  123.56  113.75   353  1.27  27784    100     353    1.27
## 16    <NA>    <NA>   TOTAL 27784   100   <NA>   <NA>    <NA>    <NA>
# Mostrar tabla con formato mejorada

Tabla_GT <- TablaFrecuenciasAgrupada %>%
  gt() %>%
  tab_header(
    title = md("**Tabla N.º 1**"),
    subtitle = md("**Tabla de distribución de frecuencias de la variable LONGITUDE  
                  en  Depositos Marinos**")
  ) %>%
  tab_source_note(
    source_note = md("**Autor: Grupo 2**")
  ) %>%
  cols_label(
    li = "Límite Inferior",
    ls = "Límite Superior",
    MC = "Marca de Clase",
    n_i = "ni",
    h_i = "hi (%)",
    Ni_asc = "Ni Asc",
    Hi_asc = "Hi Asc (%)",
    Ni_desc = "Ni Desc",
    Hi_desc = "Hi Desc (%)"
  ) %>%
  fmt_number(
    columns = c(li, ls, MC),
    decimals = 2
  ) %>%
  tab_options(
    table.border.top.color = "black",
    table.border.bottom.color = "black",
    table.border.top.style = "solid",
    table.border.bottom.style = "solid",
    column_labels.border.top.color = "black",
    column_labels.border.bottom.color = "black",
    column_labels.border.bottom.width = px(2),
    row.striping.include_table_body = TRUE,
    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 = MC == "TOTAL"
    )
  )

Tabla_GT
Tabla N.º 1
Tabla de distribución de frecuencias de la variable LONGITUDE
en Depositos Marinos
Límite Inferior Límite Superior Marca de Clase ni hi (%) Ni Asc Hi Asc (%) Ni Desc Hi Desc (%)
-170.52 -150.91 -160.72 118 0.42 118 0.42 27784 100
-150.91 -131.31 -141.11 265 0.95 383 1.38 27666 99.58
-131.31 -111.7 -121.51 714 2.57 1097 3.95 27401 98.62
-111.7 -92.1 -101.9 357 1.28 1454 5.23 26687 96.05
-92.1 -72.49 -82.3 9969 35.88 11423 41.11 26330 94.77
-72.49 -52.89 -62.69 15803 56.88 27226 97.99 16361 58.89
-52.89 -33.28 -43.09 0 0 27226 97.99 558 2.01
-33.28 -13.68 -23.48 0 0 27226 97.99 558 2.01
-13.68 5.93 -3.88 166 0.6 27392 98.59 558 2.01
5.93 25.53 15.73 19 0.07 27411 98.66 392 1.41
25.53 45.14 35.33 0 0 27411 98.66 373 1.34
45.14 64.74 54.94 0 0 27411 98.66 373 1.34
64.74 84.35 74.54 15 0.05 27426 98.71 373 1.34
84.35 103.95 94.15 5 0.02 27431 98.73 358 1.29
103.95 123.56 113.75 353 1.27 27784 100 353 1.27
NA NA TOTAL 27784 100 NA NA NA NA
Autor: Grupo 2

La distribución obtenida mediante la regla de Sturges genera 15 intervalos de clase. Aunque esta agrupación es estadísticamente válida, la cantidad de intervalos dificulta la lectura y comparación de la distribución. Por esta razón, se construye una tabla simplificada de 12 clases, utilizando límites más sencillos y una amplitud aproximada de 25 grados. Esta agrupación facilita la interpretación y permite representar posteriormente la distribución mediante un histograma de 12 barras, sin modificar la naturaleza cuantitativa continua de la variable LONGITUDE.

TABLA DE DISTRIBUCIÓN SIMPLIFICADA

cat("TABLA DE FRECUENCIAS SIMPLE (AGRUPADA)\n")
## TABLA DE FRECUENCIAS SIMPLE (AGRUPADA)
# Límites extremos redondeados a múltiplos de 10
limite_inferior <- -175
limite_superior <- 125

# Amplitud de clase
A <- 25

# Límites de clase
li <- seq(from = limite_inferior,
          to = limite_superior - A,
          by = A)

ls <- seq(from = limite_inferior + A,
          to = limite_superior,
          by = A)

# Número de intervalos y rango
k <- length(li)
R <- limite_superior - limite_inferior

cat("PARÁMETROS:\n")
## PARÁMETROS:
cat("  Rango (R)            :", round(R, 4), "grados\n")
##   Rango (R)            : 300 grados
cat("  Número intervalos (k):", k, "\n")
##   Número intervalos (k): 12
cat("  Amplitud clase (A)   :", A, "grados\n\n")
##   Amplitud clase (A)   : 25 grados
# Marca de clase
MC <- round((li + ls) / 2, 2)

# Frecuencias absolutas agrupadas
n_i <- numeric(length(li))

for (i in 1:length(li)) {
  n_i[i] <- sum(longitud >= li[i] & longitud < ls[i])
}

# Corregir el último intervalo para incluir el valor máximo
n_i[length(li)] <- sum(longitud >= li[length(li)] &
                         longitud <= limite_superior)

# Frecuencias relativas y acumuladas
h_i <- round((n_i / sum(n_i)) * 100, 2)
Ni_asc <- cumsum(n_i)
Hi_asc <- round((Ni_asc / sum(n_i)) * 100, 2)
Ni_desc <- rev(cumsum(rev(n_i)))
Hi_desc <- round((Ni_desc / sum(n_i)) * 100, 2)

# Crear tabla agrupada
TablaFrecuenciasAgrupada <- data.frame(
  LI = li,
  LS = ls,
  MC = MC,
  ni = n_i,
  hi = h_i,
  Ni_asc = Ni_asc,
  Hi_asc = Hi_asc,
  Ni_desc = Ni_desc,
  Hi_desc = Hi_desc
)

# Fila TOTAL
TablaFrecuenciasAgrupada[nrow(TablaFrecuenciasAgrupada) + 1, ] <-
  c(NA, NA, NA, sum(n_i), round(sum(h_i), 1), NA, NA, NA, NA)

# Mostrar tabla
TablaFrecuenciasAgrupada
##      LI   LS     MC    ni     hi Ni_asc Hi_asc Ni_desc Hi_desc
## 1  -175 -150 -162.5   118   0.42    118   0.42   27784  100.00
## 2  -150 -125 -137.5   275   0.99    393   1.41   27666   99.58
## 3  -125 -100 -112.5   706   2.54   1099   3.96   27391   98.59
## 4  -100  -75  -87.5  6170  22.21   7269  26.16   26685   96.04
## 5   -75  -50  -62.5 19957  71.83  27226  97.99   20515   73.84
## 6   -50  -25  -37.5     0   0.00  27226  97.99     558    2.01
## 7   -25    0  -12.5    48   0.17  27274  98.16     558    2.01
## 8     0   25   12.5   137   0.49  27411  98.66     510    1.84
## 9    25   50   37.5     0   0.00  27411  98.66     373    1.34
## 10   50   75   62.5     2   0.01  27413  98.66     373    1.34
## 11   75  100   87.5    18   0.06  27431  98.73     371    1.34
## 12  100  125  112.5   353   1.27  27784 100.00     353    1.27
## 13   NA   NA     NA 27784 100.00     NA     NA      NA      NA
library(gt)

TablaFrecuenciasAgrupada_gt <- TablaFrecuenciasAgrupada %>%
  gt() %>%
  tab_header(
    title = md("**Tabla de distribución de frecuencias agrupada**"),
    subtitle = "Variable: longitud"
  ) %>%
  cols_label(
    LI = "Límite inferior",
    LS = "Límite superior",
    MC = "Marca de clase",
    ni = "ni",
    hi = "hi (%)",
    Ni_asc = "Ni ↑",
    Hi_asc = "Hi ↑ (%)",
    Ni_desc = "Ni ↓",
    Hi_desc = "Hi ↓ (%)"
  ) %>%
  fmt_number(
    columns = c(LI, LS, MC, hi, Hi_asc, Hi_desc),
    decimals = 2
  ) %>%
  fmt_number(
    columns = c(ni, Ni_asc, Ni_desc),
    decimals = 0
  ) %>%
  tab_style(
    style = cell_text(weight = "bold"),
    locations = cells_body(
      rows = is.na(LI)
    )
  ) %>%
  tab_options(
    table.font.size = px(13),
    heading.title.font.size = px(18),
    heading.subtitle.font.size = px(14),
    table.width = pct(100)
  )

TablaFrecuenciasAgrupada_gt
Tabla de distribución de frecuencias agrupada
Variable: longitud
Límite inferior Límite superior Marca de clase ni hi (%) Ni ↑ Hi ↑ (%) Ni ↓ Hi ↓ (%)
−175.00 −150.00 −162.50 118 0.42 118 0.42 27,784 100.00
−150.00 −125.00 −137.50 275 0.99 393 1.41 27,666 99.58
−125.00 −100.00 −112.50 706 2.54 1,099 3.96 27,391 98.59
−100.00 −75.00 −87.50 6,170 22.21 7,269 26.16 26,685 96.04
−75.00 −50.00 −62.50 19,957 71.83 27,226 97.99 20,515 73.84
−50.00 −25.00 −37.50 0 0.00 27,226 97.99 558 2.01
−25.00 0.00 −12.50 48 0.17 27,274 98.16 558 2.01
0.00 25.00 12.50 137 0.49 27,411 98.66 510 1.84
25.00 50.00 37.50 0 0.00 27,411 98.66 373 1.34
50.00 75.00 62.50 2 0.01 27,413 98.66 373 1.34
75.00 100.00 87.50 18 0.06 27,431 98.73 371 1.34
100.00 125.00 112.50 353 1.27 27,784 100.00 353 1.27
NA NA NA 27,784 100.00 NA NA NA NA
TablaFrecuenciasAgrupada <- data.frame(
  Intervalo = paste0("[", li, " - ", ls, ")"),
  LI = li,
  LS = ls,
  MC = MC,
  ni = n_i,
  hi = h_i,
  Ni_asc = Ni_asc,
  Hi_asc = Hi_asc,
  Ni_desc = Ni_desc,
  Hi_desc = Hi_desc
)

TablaFrecuenciasAgrupada[nrow(TablaFrecuenciasAgrupada) + 1, ] <-
  c("TOTAL", NA, NA, NA, sum(n_i), round(sum(h_i), 1), NA, NA, NA, NA)

4. GRÁFICAS DE DISTRIBUCIÓN DE FRECUENCIA

## HISTOGRAMA LOCAL - FRECUENCIAS ABSOLUTAS
hist(longitud,
     breaks = c(li, limite_superior),
     main = "Gráfica 1: Distribución de Cantidad de la Longitud
     de Depósitos Marinos",
     xlab = "Longitud (grados)",
     ylab = "Cantidad (ni)",
     col = "lightcoral",
     border = "white",
     xaxt = "n",
     ylim = c(0, max(n_i) * 1.10))

axis(1,
     at = c(li, limite_superior),
     labels = c(li, limite_superior),
     las = 2,
     cex.axis = 0.7)

# HISTOGRAMA GLOBAL - FRECUENCIAS ABSOLUTAS

hist(longitud,
     breaks = c(li, limite_superior),
     main = "Gráfica 2: Distribución Global de Cantidad de la Longitud
     de Depósitos Marinos",
     xlab = "Longitud (grados)",
     ylab = "Cantidad (ni)",
     col = "steelblue",
     border = "white",
     xaxt = "n",
     ylim = c(0, n))

axis(1,
     at = c(li, limite_superior),
     labels = c(li, limite_superior),
     las = 2,
     cex.axis = 0.7)

# HISTOGRAMA LOCAL - FRECUENCIAS RELATIVAS

etiquetas <- paste0(
  "[", li, ", ", ls, ")"
)

# Corregir visualmente el último intervalo
etiquetas[length(etiquetas)] <- paste0(
  "[", li[length(li)], ", ", ls[length(ls)], "]"
)

bp <- barplot(h_i,
              main = "Gráfica 3: Distribución de Porcentaje de la Longitud
              de Depósitos Marinos",
              xlab = "Intervalos de Longitud",
              ylab = "Porcentaje (%)",
              col = "mediumpurple",
              border = "white",
              names.arg = etiquetas,
              las = 2,
              cex.names = 0.65,
              space = 0,
              ylim = c(0, max(h_i) * 1.10))

box()

# HISTOGRAMA GLOBAL - FRECUENCIAS RELATIVAS

bp <- barplot(h_i,
              main = "Gráfica 4: Distribución Global de Porcentaje
              de la Longitud de Depósitos Marinos",
              xlab = "Intervalos de Longitud",
              ylab = "Porcentaje (%)",
              col = "darkorange",
              border = "white",
              names.arg = etiquetas,
              las = 2,
              cex.names = 0.65,
              space = 0,
              ylim = c(0, 100))

box()

# OJIVAS - FRECUENCIAS ABSOLUTAS

plot(MC, Ni_asc,
     type = "b",
     main = "Gráfica 5: Ojivas Combinadas de Cantidad Acumulada
     de la Longitud de Depósitos Marinos",
     xlab = "Longitud (grados)",
     ylab = "Cantidad Acumulada (Ni)",
     col = "blue",
     lwd = 2,
     pch = 16,
     cex = 1.2,
     las = 1,
     ylim = c(0, n))

lines(MC, Ni_desc,
      type = "b",
      col = "red",
      lwd = 2,
      pch = 16,
      cex = 1.2)

legend("right",
       legend = c("Ascendente", "Descendente"),
       col = c("blue", "red"),
       lty = 1,
       lwd = 2,
       pch = 16,
       bty = "n")

grid(col = "gray", lty = "dotted")

# OJIVAS - FRECUENCIAS RELATIVAS

plot(MC, Hi_asc,
     type = "b",
     main = "Gráfica 6: Ojivas Combinadas de Porcentaje Acumulado
     de la Longitud de Depósitos Marinos",
     xlab = "Longitud (grados)",
     ylab = "Porcentaje Acumulado (%)",
     col = "blue",
     lwd = 2,
     pch = 16,
     cex = 1.2,
     las = 1,
     ylim = c(0, 100))

lines(MC, Hi_desc,
      type = "b",
      col = "red",
      lwd = 2,
      pch = 16,
      cex = 1.2)

legend("right",
       legend = c("Ascendente (%)", "Descendente (%)"),
       col = c("blue", "red"),
       lty = 1,
       lwd = 2,
       pch = 16,
       bty = "n")

grid(col = "gray", lty = "dotted")

# DIAGRAMA DE CAJA

media <- mean(longitud)

boxplot(longitud,
        horizontal = TRUE,
        main = "Gráfica 7: Diagrama de Caja de la Longitud
        de Depósitos Marinos",
        xlab = "Longitud (grados)",
        col = "lightgreen",
        border = "darkgreen",
        outcol = "red",
        outpch = 16,
        las = 1)

points(media,
       1,
       pch = 23,
       bg = "blue",
       cex = 1.5)

# GRÁFICA 8: HISTOGRAMA CON DIAGRAMA DE CAJA SOBREPUESTO

# Histograma de densidad usando los mismos límites
# de la tabla simplificada
h <- hist(
  longitud,
  breaks = c(li, limite_superior),
  probability = TRUE,
  main = "Gráfica 8: Histograma y Diagrama de Caja Sobrepuesto
  de la Longitud de Depósitos Marinos",
  xlab = "Longitud (grados)",
  ylab = "Densidad",
  col = "lightgray",
  border = "black",
  xaxt = "n"
)

# Eje X con los límites de las 12 clases
axis(
  1,
  at = c(li, limite_superior),
  labels = c(li, limite_superior),
  las = 2,
  cex.axis = 0.7
)

# Altura donde se colocará el boxplot
altura_caja <- max(h$density) * 0.5

# Diagrama de caja horizontal sobre el histograma
boxplot(
  longitud,
  horizontal = TRUE,
  add = TRUE,
  at = altura_caja,
  axes = FALSE,
  boxwex = max(h$density) * 0.75,
  col = rgb(0, 0.75, 1, 0.5),
  border = "black",
  outline = TRUE
)

grid(
  col = "gray",
  lty = "dotted"
)

# GRÁFICA 9: POLÍGONO DE FRECUENCIAS RELATIVAS
# CON HISTOGRAMA DE FONDO

h <- hist(
  longitud,
  breaks = c(li, limite_superior),
  plot = FALSE
)

# Sustituir las frecuencias absolutas
# por los porcentajes de la tabla simplificada
h$counts <- h_i

plot(
  h,
  freq = TRUE,
  main = "Gráfica 9: Polígono de Frecuencias Relativas
  de la Longitud de Depósitos Marinos",
  xlab = "Longitud (grados)",
  ylab = "Porcentaje (%)",
  col = "white",
  border = "black",
  xaxt = "n",
  ylim = c(0, max(h_i) * 1.15)
)

axis(
  1,
  at = c(li, limite_superior),
  labels = c(li, limite_superior),
  las = 2,
  cex.axis = 0.7
)

# Puntos adicionales para cerrar el polígono
MC_pol <- c(
  MC[1] - A,
  MC,
  MC[length(MC)] + A
)

h_i_pol <- c(
  0,
  h_i,
  0
)

lines(
  MC_pol,
  h_i_pol,
  type = "b",
  lwd = 3,
  pch = 16,
  col = "blue"
)

grid(
  col = "gray",
  lty = "dotted"
)

6. INDICADORES ESTADÍSTICOS

# Cálculo de indicadores

minimo <- min(longitud)
maximo <- max(longitud)
rango <- maximo - minimo
media <- mean(longitud)
mediana <- median(longitud)
moda <- as.numeric(names(sort(table(longitud), decreasing = TRUE)[1]))

varianza <- var(longitud)
desviacion_estandar <- sd(longitud)
rango <- range(longitud)
coeficiente_variacion <- (desviacion_estandar / media) * 100


asimetria <- skewness(longitud)
curtosis <- kurtosis(longitud)

TablaIndicadores <- data.frame(
  Variable = "longitud (%)",
  Minimo = round(minimo,2),
  Maximo = round(maximo,2),
  Media = round(media,2),
  Mediana = round(mediana,2),
  Desv_Est = round(desviacion_estandar,2),
  CV = coeficiente_variacion,
  Asimetria = asimetria,
  Curtosis = curtosis
)

TablaIndicadores
##       Variable  Minimo Maximo  Media Mediana Desv_Est        CV Asimetria
## 1 longitud (%) -170.52 123.56 -72.77  -70.97     25.4 -34.90761  4.416136
##   Curtosis
## 1 36.10975
# Tabla Mejorada
TablaIndicadores %>%
  gt() %>%
  tab_header(
    title = md("**Tabla Nº3**"),
    subtitle = md("Indicadores estadísticos de la variable longitud (%)")
  ) %>%
  tab_source_note(
    source_note = md("Autor: Grupo 2")
  )
Tabla Nº3
Indicadores estadísticos de la variable longitud (%)
Variable Minimo Maximo Media Mediana Desv_Est CV Asimetria Curtosis
longitud (%) -170.52 123.56 -72.77 -70.97 25.4 -34.90761 4.416136 36.10975
Autor: Grupo 2

OUTLIERS

# Cuartiles
Q1 <- quantile(longitud, 0.25)
Q3 <- quantile(longitud, 0.75)
IQR_val <- IQR(longitud)

# Límites
limite_inferior <- Q1 - 1.5 * IQR_val
limite_superior <- Q3 + 1.5 * IQR_val

#Outliers
outliers <- longitud[longitud < limite_inferior | longitud > limite_superior]
num_outliers <- length(outliers)
porcentaje_outliers <- round((num_outliers / n) * 100, 2)

TablaOutliers <- data.frame(
  num_outliers =num_outliers,
  porc_outliers = porcentaje_outliers,
  minimo = limite_inferior,
  máximo = limite_superior
)


TablaOutliers
##     num_outliers porc_outliers    minimo    máximo
## 25%         5027         18.09 -83.59956 -62.10694
#Tabla Mejorada 
TablaOutliers %>%
  gt() %>%
  tab_header(
    title = md("**Tabla Nº4**"),
    subtitle = md("Valores atípicos de la variable longitud (%)")
  ) %>%
  tab_source_note(
    source_note = md("Autor: Grupo 2")
  )
Tabla Nº4
Valores atípicos de la variable longitud (%)
num_outliers porc_outliers minimo máximo
5027 18.09 -83.59956 -62.10694
Autor: Grupo 2

7. CONCLUSION

La variable LONGITUDE presenta valores comprendidos entre −170.52° y 123.56°, con una media de −72.77° y una mediana de −70.97°, lo que indica que una parte importante de las muestras se concentra alrededor de longitudes cercanas a −70°. La desviación estándar de 25.40° refleja una dispersión considerable de las ubicaciones longitudinales respecto a su valor central.

La distribución presenta una asimetría positiva elevada de 4.42, indicando una extensión pronunciada hacia valores de longitud más altos. Asimismo, la curtosis de 36.11 evidencia una distribución fuertemente concentrada y con presencia de valores extremos. Mediante el criterio del rango intercuartílico se identificaron 5027 valores atípicos, equivalentes aproximadamente al 18.09 % de las observaciones. Sin embargo, al tratarse de una coordenada geográfica, estos valores no deben interpretarse automáticamente como errores, ya que pueden corresponder a muestras recolectadas en regiones alejadas de la zona donde se concentra la mayoría de los registros. En conjunto, LONGITUDE presenta una distribución espacial no uniforme, con una fuerte concentración en determinadas regiones longitudinales y una menor cantidad de observaciones en zonas más alejadas.