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)
}
}
# --- AJUSTE DE PRECISIÓN PARA EVITAR EL 100.02 ---
# Calculamos hi con 2 decimales para todas menos la última
hi_long <- round((ni_long / sum(ni_long)) * 100, 2)
# Forzamos que la suma sea exactamente 100 ajustando la última fila
hi_long[k_long] <- 100 - sum(hi_long[1:(k_long-1)])
Ni_asc_long <- cumsum(ni_long)
Ni_dsc_long <- rev(cumsum(rev(ni_long)))
# Recalculamos acumuladas sobre los valores ya ajustados
Hi_asc_long <- cumsum(hi_long)
Hi_dsc_long <- rev(cumsum(rev(hi_long)))
7. TABLA DE FRECUENCIAS
TDF_longitude <- data.frame(
Li = as.character(Li_long), # Convertimos a carácter para permitir el "TOTAL"
Ls = as.character(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 = NA, ni = sum(ni_long), hi = 100,
Ni_asc = NA, Ni_dsc = NA, Hi_asc = NA, Hi_dsc = NA
)
)
8. TABLA DE PRESENTACIÓN
tabla_longitude <- TDF_longitude %>%
# Aseguramos que las columnas sean numéricas para el formato de gt
mutate(across(c(ni, hi, Ni_asc, Ni_dsc, Hi_asc, Hi_dsc, MC), as.numeric)) %>%
gt() %>%
tab_header(
title = md("**Tabla N° 18**"),
subtitle = md("Distribución de frecuencias de Longitud (°) de los eventos a nivel mundial")
) %>%
# Formato de 2 decimales para relativas y marca de clase
fmt_number(
columns = c(hi, Hi_asc, Hi_dsc, MC),
decimals = 2
) %>%
# Formato de 0 decimales para absolutas
fmt_number(
columns = c(ni, Ni_asc, Ni_dsc),
decimals = 0
) %>%
cols_label(
Li = "L. Inferior",
Ls = "L. Superior",
MC = "Marca Clase",
ni = "ni",
hi = "hi (%)",
Ni_asc = "Ni (asc)",
Ni_dsc = "Ni (desc)",
Hi_asc = "Hi (asc %)",
Hi_dsc = "Hi (desc %)"
) %>%
sub_missing(columns = everything(), missing_text = "") %>%
tab_style(
style = cell_text(weight = "bold"),
locations = cells_body(rows = Li == "TOTAL")
) %>%
tab_source_note(
source_note = md("Elaborado por: Grupo 2 – Carrera de Geología")
)
tabla_longitude
| Tabla N° 18 |
| Distribución de frecuencias de Longitud (°) de los eventos a nivel mundial |
| L. Inferior |
L. Superior |
Marca Clase |
ni |
hi (%) |
Ni (asc) |
Ni (desc) |
Hi (asc %) |
Hi (desc %) |
| -180 |
-150 |
−165.00 |
85 |
0.77 |
85 |
11,033 |
0.77 |
100.00 |
| -150 |
-120 |
−135.00 |
1,893 |
17.16 |
1,978 |
10,948 |
17.93 |
99.23 |
| -120 |
-90 |
−105.00 |
1,221 |
11.07 |
3,199 |
9,055 |
29.00 |
82.07 |
| -90 |
-60 |
−75.00 |
1,526 |
13.83 |
4,725 |
7,834 |
42.83 |
71.00 |
| -60 |
-30 |
−45.00 |
228 |
2.07 |
4,953 |
6,308 |
44.90 |
57.17 |
| -30 |
0 |
−15.00 |
318 |
2.88 |
5,271 |
6,080 |
47.78 |
55.10 |
| 0 |
30 |
15.00 |
334 |
3.03 |
5,605 |
5,762 |
50.81 |
52.22 |
| 30 |
60 |
45.00 |
279 |
2.53 |
5,884 |
5,428 |
53.34 |
49.19 |
| 60 |
90 |
75.00 |
2,034 |
18.44 |
7,918 |
5,149 |
71.78 |
46.66 |
| 90 |
120 |
105.00 |
1,784 |
16.17 |
9,702 |
3,115 |
87.95 |
28.22 |
| 120 |
150 |
135.00 |
1,083 |
9.82 |
10,785 |
1,331 |
97.77 |
12.05 |
| 150 |
180 |
165.00 |
248 |
2.23 |
11,033 |
248 |
100.00 |
2.23 |
| TOTAL |
|
|
11,033 |
100.00 |
|
|
|
|
| Elaborado por: Grupo 2 – Carrera de Geología |
9. HISTOGRAMAS
9.1 Histograma Local de (ni)
# Margen inferior amplio para los valores del eje X
par(mar=c(5, 4, 4, 2))
# 1. Graficamos sin eje X (names.arg = NULL) para colocarlo manualmente
pos_x <- barplot(ni_long,
col = "grey",
border = "black",
space = 0,
las = 1,
main = "Gráfica 31: Distribución local de la frecuencia absoluta\nde la Longitud (°) de los eventos a nivel mundial",
xlab = "Longitud (°)",
ylab = "Frecuencia absoluta (ni)",
axes = TRUE)
# 2. Dibujamos el eje X en las intersecciones (puntos de corte)
# Los puntos de corte son Li_long y el último Ls_long
cortes_x <- c(Li_long, max(Ls_long))
# 'pos_x' devuelve el centro de las barras. Al ser space=0,
# los límites están en 0, 1, 2, ..., k
axis(side = 1, at = 0:length(ni_long), labels = cortes_x, cex.axis = 0.7)

9.2 HISTOGRAMAS Global de (ni)
par(mar=c(5, 5, 4, 2)) # Margen izquierdo ligeramente mayor para el número 11033
# Definimos el tamaño muestral
n_total_long <- 11033
# 1. Ploteo Global (Eje Y hasta 11033)
pos_global <- barplot(ni_long,
col = "grey",
border = "black",
space = 0,
las = 1,
ylim = c(0, n_total_long),
yaxt = "n", # Desactivamos el eje Y por defecto
main = "Gráfica 32: Distribución global de la frecuencia absoluta\nde la Longitud (°) de los eventos a nivel mundial",
xlab = "Longitud (°)",
ylab = "Frecuencia absoluta (ni)")
# 2. Representación manual del eje Y con el tamaño muestral
# Creamos marcas que incluyan el valor 11033
ticks_y <- c(0, 2000, 4000, 6000, 8000, 10000, n_total_long)
axis(side = 2, at = ticks_y, labels = ticks_y, las = 1)
# 3. Eje X en las intersecciones de las barras
axis(side = 1, at = 0:length(ni_long), labels = c(Li_long, max(Ls_long)), cex.axis = 0.7)
# Línea punteada opcional para marcar el tope muestral
abline(h = n_total_long, col = "red", lty = 2)

9.3. Histograma local hi
# Configuración de márgenes
par(mar=c(5, 5, 4, 2))
# 1. Identificamos el valor máximo de hi para el tope del eje Y
max_hi_local <- max(hi_long)
# 2. Ploteo Local de hi (El tope es el máximo valor porcentual de la variable)
pos_hi_local <- barplot(hi_long,
col = "#CDB79E", # Color para análisis local
border = "black",
space = 0,
las = 1,
ylim = c(0, max_hi_local), # El tope es el valor máximo real
yaxt = "n", # Desactivamos eje Y automático
main = "Gráfica 33: Distribución local de la frecuencia relativa\nde la Longitud (°) de los eventos por intervalos",
xlab = "Longitud (°)",
ylab = "Porcentaje (%)")
# 3. Representación manual del eje Y hasta el valor máximo
# Creamos marcas sugeridas y añadimos el valor máximo exacto
ticks_y_local <- seq(0, max_hi_local, length.out = 5)
axis(side = 2, at = ticks_y_local, labels = round(ticks_y_local, 2), las = 1)
# 4. Eje X en las intersecciones (Límites de clase)
axis(side = 1,
at = 0:length(hi_long),
labels = c(Li_long, max(Ls_long)),
cex.axis = 0.7)

9.4. Histograma global hi
# Configuración de márgenes
par(mar=c(5, 5, 4, 2))
# 1. Ploteo Global de hi (Eje Y forzado a 100)
pos_hi_global <- barplot(hi_long,
col = "#CDB79E",
border = "black",
space = 0,
las = 1,
ylim = c(0, 100), # Fijamos el tope en 100%
yaxt = "n", # Desactivamos eje Y automático
main = "Gráfica 34: Distribución global de la frecuencia relativa\nde la Longitud (°) de los eventos a nivel mundial",
xlab = "Longitud (°)",
ylab = "Porcentaje (%)")
# 2. Representación manual del eje Y (incluyendo el 100%)
ticks_hi <- seq(0, 100, by = 20)
axis(side = 2, at = ticks_hi, labels = paste0(ticks_hi, "%"), las = 1)
# 3. Eje X en las intersecciones (Límites de clase)
axis(side = 1,
at = 0:length(hi_long),
labels = c(Li_long, max(Ls_long)),
cex.axis = 0.7)
# 4. Línea de referencia en el 100%
abline(h = 100, col = "blue", lty = 2, lwd = 1.5)

10. DIAGRAMA DE OJIVAS
plot(
Ls_long,
Ni_asc_long,
type = "o",
pch = 19,
col = "blue",
ylim = c(0, max(Ni_asc_long)),
main = "Gráfica 35: Ojivas combinadas de Longitud (°) de
los eventos a nivel mundial",
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 = " Gráfica 36: Diagrama de caja de Longitud (°) de
los eventos a nivel mundial ",
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° 19"),
subtitle = md("Indicadores estadísticos de la variable Longitud (°) de los
eventos a nivel mundial")
) %>%
tab_source_note(
source_note = md("Autor: Grupo Geología")
)
tabla_longitude_indicadores
| Tabla N° 19 |
| Indicadores estadísticos de la variable Longitud (°) de los
eventos a nivel mundial |
| 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 N° 20"),
subtitle = md("Detección de valores atípicos (Outliers) en la variable longitud (°)
de eventos a nivel mundial (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 N° 20 |
| Detección de valores atípicos (Outliers) en la variable longitud (°)
de eventos a nivel mundial (método IQR) |
| Outliers |
Límite inferior |
Límite superior |
| No se detectan |
-410.6 |
396.68 |
| Autor: Grupo Geología |
14. CONCLUSIÓN
La variable longitud (°) fluctúa desde -180° hasta 180°, sus valores
están en torno a 2.52°, con una desviación estándar de 100.91 siendo un
conjunto de valores muy heterogeneo, cuyos valores se presentan en la
parte media baja y media alta de la variable con sesgos hacia la
izquierda y derecha representando un modelo bimodal.