1. CARGA DE LIBRERIAS Y DATOS

#Carga de Librerías
library(readxl)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(gt)

#  Cargar base de datos
datos_nuevoartes <- read_excel("datos_nuevoartes.xlsx")

2. DEFINICIÓN DE LA VARIABLE

longitude <- datos_nuevoartes$longitude
longitude <- longitude[!is.na(longitude)]

3. PARÁMETROS DE CLASIFICACIÓN

k_long <- 12
n_long <- length(longitude)

min_long <- min(longitude)
max_long <- max(longitude)

R_long <- max_long - min_long
A_real <- R_long / k_long

4. AJUSTE DE AMPLITUD DE CLASE

A_long <- ifelse(
  A_real <= 2, 2,
  ifelse(
    A_real <= 5, 5,
    ifelse(
      A_real <= 10, 10,
      ceiling(A_real / 10) * 10
    )
  )
)

5. DEFINICIÓN DE CLASES

Li0 <- floor(min_long / A_long) * A_long

Li_long <- seq(Li0, by = A_long, length.out = k_long)
Ls_long <- Li_long + A_long

MC_long <- round((Li_long + Ls_long) / 2, 2)

6. CÁLCULO DE FRECUENCIAS

ni_long <- numeric(k_long)

for (i in 1:k_long) {
  if (i < k_long) {
    ni_long[i] <- sum(longitude >= Li_long[i] & longitude < Ls_long[i])
  } else {
    ni_long[i] <- sum(longitude >= Li_long[i] & longitude <= max_long)
  }
}

hi_long <- round((ni_long / sum(ni_long)) * 100, 2)

Ni_asc_long <- cumsum(ni_long)
Ni_dsc_long <- rev(cumsum(rev(ni_long)))

Hi_asc_long <- round(cumsum(hi_long), 2)
Hi_dsc_long <- round(rev(cumsum(rev(hi_long))), 2)

7. TABLA DE FRECUENCIAS

TDF_longitude <- data.frame(
  Li = Li_long,
  Ls = Ls_long,
  MC = MC_long,
  ni = ni_long,
  hi = hi_long,
  Ni_asc = Ni_asc_long,
  Ni_dsc = Ni_dsc_long,
  Hi_asc = Hi_asc_long,
  Hi_dsc = Hi_dsc_long
)

TDF_longitude <- rbind(
  TDF_longitude,
  data.frame(
    Li = "TOTAL",
    Ls = "",
    MC = "",
    ni = sum(ni_long),
    hi = 100,
    Ni_asc = "",
    Ni_dsc = "",
    Hi_asc = "",
    Hi_dsc = ""
  )
)

8. TABLA DE PRESENTACIÓN

tabla_longitude <- TDF_longitude %>%
  gt() %>%
  fmt_number(columns = MC, decimals = 2) %>%
  tab_header(
    title = md("Tabla N° 1"),
    subtitle = md("Distribución de frecuencias de Longitude (12 clases)")
  ) %>%
  tab_source_note(
    source_note = md("Autor: Grupo Geología")
  ) %>%
  tab_style(
    style = cell_text(weight = "bold"),
    locations = cells_body(rows = Li == "TOTAL")
  )

tabla_longitude
Tabla N° 1
Distribución de frecuencias de Longitude (12 clases)
Li Ls MC ni hi Ni_asc Ni_dsc Hi_asc Hi_dsc
-180 -150 -165 85 0.77 85 11033 0.77 100.02
-150 -120 -135 1893 17.16 1978 10948 17.93 99.25
-120 -90 -105 1221 11.07 3199 9055 29 82.09
-90 -60 -75 1526 13.83 4725 7834 42.83 71.02
-60 -30 -45 228 2.07 4953 6308 44.9 57.19
-30 0 -15 318 2.88 5271 6080 47.78 55.12
0 30 15 334 3.03 5605 5762 50.81 52.24
30 60 45 279 2.53 5884 5428 53.34 49.21
60 90 75 2034 18.44 7918 5149 71.78 46.68
90 120 105 1784 16.17 9702 3115 87.95 28.24
120 150 135 1083 9.82 10785 1331 97.77 12.07
150 180 165 248 2.25 11033 248 100.02 2.25
TOTAL 11033 100.00
Autor: Grupo Geología

9. HISTOGRAMAS

9.1 Histograma local ni

hist(
  longitude,
  breaks = c(Li_long, max(Ls_long)),
  right = FALSE,
  freq = TRUE,
  col = "grey",
  border = "black",
  main = "Histograma local de Longitude (ni)",
  xlab = "Longitude (°)",
  ylab = "Frecuencia absoluta (ni)"
)

9.2. Histograma global ni

hist(
  longitude,
  breaks = c(Li_long, max(Ls_long)),
  right = FALSE,
  freq = TRUE,
  col = "grey",
  border = "black",
  ylim = c(0, sum(ni_long)),
  main = "Histograma global de Longitude (ni)",
  xlab = "Longitude (°)",
  ylab = "Frecuencia absoluta acumulable"
)

9.3. Histograma local hi

hist(
  longitude,
  breaks = c(Li_long, max(Ls_long)),
  right = FALSE,
  freq = FALSE,                 # <- frecuencia relativa
  col = "grey",
  border = "black",
  main = "Histograma local de Longitude (hi)",
  xlab = "Longitude (°)",
  ylab = "Frecuencia relativa"
)

9.4. Histograma global hi

hist(
  longitude,
  breaks = c(Li_long, max(Ls_long)),
  right = FALSE,
  freq = FALSE,                 # <- frecuencia relativa
  col = "grey",
  border = "black",
  ylim = c(0, max(hi_long) / 100 * 1.2),
  main = "Histograma global de Longitude (hi)",
  xlab = "Longitude (°)",
  ylab = "Frecuencia relativa"
)

10. DIAGRAMA DE OJIVAS

plot(
  Ls_long,
  Ni_asc_long,
  type = "o",
  pch = 19,
  col = "blue",
  ylim = c(0, max(Ni_asc_long)),
  main = "Ojiva combinada de Longitude",
  xlab = "Límites de clase (°)",
  ylab = "Frecuencia acumulada"
)

lines(
  Li_long,
  Ni_dsc_long,
  type = "o",
  pch = 17,
  col = "red"
)
legend(
  "right",
  legend = c("Ojiva ascendente (Ni ≤)", "Ojiva descendente (Ni ≥)"),
  col = c("blue", "red"),
  pch = c(19, 17),
  lty = 1,
  cex = 0.8,
  bty = "b"
)

11. DIAGRAMA DE CAJAS

boxplot(
  longitude,
  horizontal = TRUE,
  col = "grey",
  border = "black",
  main = "Diagrama de caja de Longitude (con outliers)",
  xlab = "Longitude (°)",
  outline = TRUE,        # asegura que se muestren los outliers
  pch = 19,              # símbolo de los outliers
  outcol = "red"         # color de los outliers
)

12. INDICADORES ESTADÍSTICOS

ri <- -180
rs <-  180
x  <- mean(longitude)
Me <- median(longitude)

Mo <- as.numeric(
  names(sort(table(round(longitude, 1)), decreasing = TRUE)[1])
)

sd_long <- sd(longitude)
CV <- (sd_long / x) * 100

As <- mean((longitude - x)^3) / sd_long^3
K  <- mean((longitude - x)^4) / sd_long^4 - 3

12.1. Tabla de indicadores

TablaIndicadores_longitude <- data.frame(
  Var = "Longitude",
  ri = ri,
  rs = rs,
  x  = round(x, 2),
  Me = round(Me, 2),
  Mo = round(Mo, 2),
  sd = round(sd_long, 2),
  CV = round(CV, 2),
  As = round(As, 2),
  K  = round(K, 2)
)

tabla_longitude_indicadores <- TablaIndicadores_longitude %>%
  gt() %>%
  tab_header(
    title = md("Tabla N° X"),
    subtitle = md("Indicadores estadísticos de la variable Longitude")
  ) %>%
  tab_source_note(
    source_note = md("Autor: Grupo Geología")
  )

tabla_longitude_indicadores
Tabla N° X
Indicadores estadísticos de la variable Longitude
Var ri rs x Me Mo sd CV As K
Longitude -180 180 2.52 19.69 -122.3 100.91 4003.6 -0.06 -1.67
Autor: Grupo Geología

13. DETECCIÓN DE OUTLIERS – VARIABLE LONGITUDE (IQR)

13.1. CUARTILES E IQR

Q1 <- quantile(longitude, 0.25)
Q3 <- quantile(longitude, 0.75)
IQR_long <- Q3 - Q1

13.2. LÍMITES DE OUTLIERS

minimo <- Q1 - 1.5 * IQR_long
maximo <- Q3 + 1.5 * IQR_long

13.3. IDENTIFICAR OUTLIERS

outliers <- longitude[longitude < minimo | longitude > maximo]

n_outliers <- length(outliers)

13.4. TABLA DE OUTLIERS

Tabla_outliers <- data.frame(
  Outliers = ifelse(n_outliers == 0, "No se detectan", n_outliers),
  minimo   = round(minimo, 2),
  máximo   = round(maximo, 2)
)

13.5. TABLA PRESENTACIÓN

tabla_outliers_gt <- Tabla_outliers %>%
  gt() %>%
  tab_header(
    title = md("Tabla 11.1"),
    subtitle = md("Detección de outliers – Variable Longitude (método IQR)")
  ) %>%
  cols_label(
    Outliers = "Outliers",
    minimo = "Límite inferior",
    máximo = "Límite superior"
  ) %>%
  tab_source_note(
    source_note = md("Autor: Grupo Geología")
  ) %>%
  tab_options(
    table.border.top.color = "black",
    table.border.bottom.color = "black",
    column_labels.border.bottom.color = "black",
    heading.border.bottom.color = "black"
  )

tabla_outliers_gt
Tabla 11.1
Detección de outliers – Variable Longitude (método IQR)
Outliers Límite inferior Límite superior
No se detectan -410.6 396.68
Autor: Grupo Geología

14. CONCLUSIÓN