1. CARGA DE LIBRERÍAS Y DATOS
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)
library(e1071)
datos_nuevoartes <- read_excel("datos_nuevoartes.xlsx")
# Extracción de la variable año desde la fecha
anio <- as.numeric(format(datos_nuevoartes$event_date, "%Y"))
anio <- anio[!is.na(anio)]
N_total <- length(anio)
2. MÉTODO DE STURGES
# Calculamos Sturges y restamos 1 para eliminar la última fila
k_base <- round(1 + 3.322 * log10(N_total))
k <- ifelse(k_base >= 12, 11, k_base) - 1
val_min <- min(anio)
val_max <- max(anio)
R <- val_max - val_min
A <- ceiling(R / k)
# Generación de límites CONTINUOS
# Li empieza en val_min, Ls es Li + Amplitud
Li <- seq(val_min, by = A, length.out = k)
Ls <- Li + A # Aquí se asegura que Ls[i] sea igual a Li[i+1]
# Ajuste del último límite para cerrar la tabla en el máximo real
Ls[k] <- val_max
clases_etiquetas <- paste(Li, Ls, sep = "–")
3. CÁLCULO DE FRECUENCIAS
ni <- numeric(length(Li))
for (i in seq_along(Li)) {
# En intervalos continuos: [Li, Ls). El último es [Li, Ls]
if (i < k) {
ni[i] <- sum(anio >= Li[i] & anio < Ls[i])
} else {
ni[i] <- sum(anio >= Li[i] & anio <= Ls[i])
}
}
MC <- (Li + Ls) / 2
hi <- (ni / N_total) * 100
Ni_asc <- cumsum(ni)
Ni_dsc <- rev(cumsum(rev(ni)))
Hi_asc <- cumsum(hi)
Hi_dsc <- rev(cumsum(rev(hi)))
4. TABLA DE FRECUENCIAS
# Creación de la tabla base (asegúrate de que Li, Ls y MC estén definidos)
TDF_final <- data.frame(
Clase = clases_etiquetas,
Li = Li,
Ls = Ls,
MC = MC,
ni = ni,
hi = hi,
Ni_asc = Ni_asc,
Ni_dsc = Ni_dsc,
Hi_asc = Hi_asc,
Hi_dsc = Hi_dsc
)
5. TABLA DE PRESENTACIÓN
tabla_presentacion <- TDF_final %>%
rbind(data.frame(Clase="TOTAL", Li=NA, Ls=NA, MC=NA, ni=sum(ni), hi=100,
Ni_asc=NA, Ni_dsc=NA, Hi_asc=NA, Hi_dsc=NA)) %>%
gt() %>%
tab_header(
title = md("**Tabla N° 15**"),
subtitle = md("Distribución de frecuencias del año de ocurrecia de deslizamientos
a nivel mundial")
) %>%
# --- AJUSTE: Li, Ls y MC COMO ENTEROS Y SIN SEPARADOR DE MILES ---
fmt_number(
columns = c(Li, Ls, MC),
decimals = 0,
use_seps = FALSE
) %>%
# --- PORCENTAJES CON 2 DECIMALES ---
fmt_number(
columns = c(hi, Hi_asc, Hi_dsc),
decimals = 2
) %>%
# -----------------------------------------------------------------
sub_missing(columns = everything(), missing_text = "") %>%
cols_label(
Clase = "Periodo",
Li = "L. Inferior",
Ls = "L. Superior",
MC = "Marca Clase",
ni = "ni (Eventos)",
hi = "hi (%)",
Ni_asc = "Ni (asc)",
Ni_dsc = "Ni (desc)",
Hi_asc = "Hi (asc %)",
Hi_dsc = "Hi (desc %)"
) %>%
tab_style(
style = cell_text(weight = "bold"),
locations = cells_body(rows = Clase == "TOTAL")
) %>%
tab_source_note(source_note = md("Elaborado por: Grupo 2 – Carrera de Geología"))
# Visualizar la tabla
tabla_presentacion
| Tabla N° 15 |
Distribución de frecuencias del año de ocurrecia de deslizamientos
a nivel mundial |
| Periodo |
L. Inferior |
L. Superior |
Marca Clase |
ni (Eventos) |
hi (%) |
Ni (asc) |
Ni (desc) |
Hi (asc %) |
Hi (desc %) |
| 1988–1991 |
1988 |
1991 |
1990 |
1 |
0.01 |
1 |
11033 |
0.01 |
100.00 |
| 1991–1994 |
1991 |
1994 |
1992 |
1 |
0.01 |
2 |
11032 |
0.02 |
99.99 |
| 1994–1997 |
1994 |
1997 |
1996 |
3 |
0.03 |
5 |
11031 |
0.05 |
99.98 |
| 1997–2000 |
1997 |
2000 |
1998 |
22 |
0.20 |
27 |
11028 |
0.24 |
99.95 |
| 2000–2003 |
2000 |
2003 |
2002 |
0 |
0.00 |
27 |
11006 |
0.24 |
99.76 |
| 2003–2006 |
2003 |
2006 |
2004 |
5 |
0.05 |
32 |
11006 |
0.29 |
99.76 |
| 2006–2009 |
2006 |
2009 |
2008 |
1120 |
10.15 |
1152 |
11001 |
10.44 |
99.71 |
| 2009–2012 |
2009 |
2012 |
2010 |
3211 |
29.10 |
4363 |
9881 |
39.55 |
89.56 |
| 2012–2015 |
2012 |
2015 |
2014 |
2933 |
26.58 |
7296 |
6670 |
66.13 |
60.45 |
| 2015–2017 |
2015 |
2017 |
2016 |
3737 |
33.87 |
11033 |
3737 |
100.00 |
33.87 |
| TOTAL |
|
|
|
11033 |
100.00 |
|
|
|
|
| Elaborado por: Grupo 2 – Carrera de Geología |
6. HISTOGRAMAS
6.1 Histograma Local de (ni)
# Margen estándar
par(mar=c(5, 4, 4, 2))
# 1. Identificamos el máximo real para el eje Y
max_ni_anio <- max(ni)
# 2. Graficamos Local ni
pos_x_anio <- barplot(ni,
col = "#EEDFCC",
border = "black",
space = 0,
las = 1,
ylim = c(0, max_ni_anio),
yaxt = "n",
main = "Gráfica 25: Distribución local de la frecuencia absoluta\ndel año de ocurrencia de deslizamientos",
xlab = "Año de Ocurrencia",
ylab = "Frecuencia absoluta (ni)")
# 3. Eje Y manual (sin decimales)
ticks_y_local <- round(seq(0, max_ni_anio, length.out = 5), 0)
axis(side = 2, at = ticks_y_local, labels = ticks_y_local, las = 1)
# 4. Eje X en las intersecciones (Límites de clase)
axis(side = 1, at = 0:length(ni), labels = c(Li, max(Ls)), cex.axis = 0.8)

6.2 Histograma Global de (ni)
# Margen izquierdo ajustado para el número 11033
par(mar=c(5, 5, 4, 2))
n_total_anio <- 11033
# 1. Ploteo Global (Eje Y hasta 11033)
barplot(ni,
col = "#EEDFCC",
border = "black",
space = 0,
las = 1,
ylim = c(0, n_total_anio),
yaxt = "n",
main = "Gráfica 26: Distribución global de la frecuencia absoluta\ndel año de ocurrencia a nivel mundial",
xlab = "Año de Ocurrencia",
ylab = "Frecuencia absoluta (ni)")
# 2. Eje Y manual con el tope 11033
ticks_y_global <- c(0, 2000, 4000, 6000, 8000, 10000, n_total_anio)
axis(side = 2, at = ticks_y_global, labels = ticks_y_global, las = 1)
# 3. Eje X en las intersecciones
axis(side = 1, at = 0:length(ni), labels = c(Li, max(Ls)), cex.axis = 0.8)
# Línea de tope muestral
abline(h = n_total_anio, col = "red", lty = 2)

6.3 Histograma Local de (hi)
par(mar=c(5, 5, 4, 2))
max_hi_anio <- max(hi)
# 1. Ploteo Local de hi
barplot(hi,
col = "#CDB79E",
border = "black",
space = 0,
las = 1,
ylim = c(0, max_hi_anio),
yaxt = "n",
main = "Gráfica 27: Distribución local de la frecuencia relativa\ndel año de ocurrencia",
xlab = "Año de Ocurrencia",
ylab = "Porcentaje (%)")
# 2. Eje Y manual redondeado a 2 decimales para limpieza visual
ticks_y_hi_local <- seq(0, max_hi_anio, length.out = 5)
axis(side = 2, at = ticks_y_hi_local, labels = round(ticks_y_hi_local, 2), las = 1)
# 3. Eje X en las intersecciones
axis(side = 1, at = 0:length(hi), labels = c(Li, max(Ls)), cex.axis = 0.8)

6.4 Histograma Global de (hi)
par(mar=c(5, 5, 4, 2))
# 1. Ploteo Global de hi (Tope 100%)
barplot(hi,
col = "#CDB79E",
border = "black",
space = 0,
las = 1,
ylim = c(0, 100),
yaxt = "n",
main = "Gráfica 28: Distribución global de la frecuencia relativa\ndel año de ocurrencia a nivel mundial",
xlab = "Año de Ocurrencia",
ylab = "Porcentaje (%)")
# 2. Eje Y manual (0% a 100%)
ticks_hi_global <- seq(0, 100, by = 20)
axis(side = 2, at = ticks_hi_global, labels = paste0(ticks_hi_global, "%"), las = 1)
# 3. Eje X en las intersecciones
axis(side = 1, at = 0:length(hi), labels = c(Li, max(Ls)), cex.axis = 0.8)
# Línea de referencia 100%
abline(h = 100, col = "blue", lty = 2, lwd = 1.5)

7. DIAGRAMA DE CAJA (BOXPLOT)
par(mfrow = c(1, 1), mar = c(5, 4, 4, 2))
boxplot(anio, col = "lightblue", main = "Gráfica 29: Diagrama de Caja de la
variable año de ocurrencia de deslizamientos a nivel mundial ",
horizontal = TRUE, xlab = "Línea de Tiempo (Años)")

8. DIAGRAMA DE OJIVAS COMBINADAS
par(mar = c(7, 5, 4, 11))
plot(1:length(ni), Ni_asc, type = "b", pch = 17, col = "black",
xaxt = "n", xlab = "", ylab = "Eventos Acumulados",
main = "Gráfica 30: Ojivas combinadas de la variable año de
ocuurencia de deslizamientos a nivel mundial",
ylim = c(0, max(Ni_asc, na.rm = TRUE)))
lines(1:length(ni), Ni_dsc, type = "b", pch = 16, col = "red")
axis(1, at = 1:length(ni), labels = clases_etiquetas, las = 2)
mtext("Periodos", side = 1, line = 5)
legend(
"topright",
inset = c(-0.45, 0),
xpd = TRUE,
legend = c("Ascendente (Ni ≤)", "Descendente (Ni ≥)"),
col = c("black", "red"),
pch = c(17, 16),
lty = 1,
bty = "n",
title = "Tipo de Ojiva",
cex = 0.85
)

9. INDICADORES ESTADÍSTICOS
# 1. Cálculos de los indicadores
x_bar <- mean(anio)
Me <- median(anio)
Mo <- as.numeric(names(sort(table(anio), decreasing = TRUE)[1]))
SD <- sd(anio)
CV <- (SD / x_bar) * 100
As <- skewness(anio)
K <- kurtosis(anio)
# 2. Creación del dataframe
tabla_indicadores <- data.frame(
Variable = "Año de Ocurrencia",
Min = min(anio),
Max = max(anio),
Media = x_bar,
Mediana = Me,
Moda = Mo,
SD = SD,
CV = CV,
Asimetria = As,
Curtosis = K
)
# 3. Construcción de la tabla con formatos específicos
tabla_indicadores_gt <- tabla_indicadores %>%
gt() %>%
tab_header(
title = md("**Tabla N° 16**"),
subtitle = md("Indicadores Estadísticos de la variable año de ocurrencia a nivel mundial")
) %>%
# --- FORMATEO PARA AÑOS: ENTEROS Y SIN COMAS ---
fmt_number(
columns = c(Min, Max, Media, Mediana, Moda),
decimals = 0,
use_seps = FALSE
) %>%
# --- FORMATEO PARA ESTADÍSTICOS: 2 DECIMALES ---
fmt_number(
columns = c(SD, CV, Asimetria, Curtosis),
decimals = 2
) %>%
# --- ETIQUETAS DE COLUMNAS ---
cols_label(
Min = "Mínimo",
Max = "Máximo",
SD = "Desv. Est.",
CV = "CV (%)",
Asimetria = "Asimetría"
) %>%
tab_source_note(source_note = md("Elaborado por: Grupo 2 – Carrera de Geología"))
# Visualizar la tabla
tabla_indicadores_gt
| Tabla N° 16 |
| Indicadores Estadísticos de la variable año de ocurrencia a nivel mundial |
| Variable |
Mínimo |
Máximo |
Media |
Mediana |
Moda |
Desv. Est. |
CV (%) |
Asimetría |
Curtosis |
| Año de Ocurrencia |
1988 |
2017 |
2013 |
2013 |
2010 |
3.03 |
0.15 |
−0.49 |
0.76 |
| Elaborado por: Grupo 2 – Carrera de Geología |
10. DETECCIÓN DE OURLIERS
# 1. Cálculos de los umbrales de detección (Método de Tukey)
Q1 <- quantile(anio, 0.25)
Q3 <- quantile(anio, 0.75)
IQR_a <- Q3 - Q1
lim_inf <- Q1 - 1.5 * IQR_a
lim_sup <- Q3 + 1.5 * IQR_a
# 2. Identificación de valores atípicos
outliers_vec <- anio[anio < lim_inf | anio > lim_sup]
# 3. Creación del dataframe para la tabla
tabla_outliers <- data.frame(
Variable = "Año de Ocurrencia",
Outliers_Detectados = length(outliers_vec),
Limite_Inferior = lim_inf,
Limite_Superior = lim_sup,
Q1 = Q1,
Q3 = Q3
)
# 4. Construcción de la tabla con gt()
tabla_outliers_gt <- tabla_outliers %>%
gt() %>%
tab_header(
title = md("**Tabla N° 17**"),
subtitle = md("Detección de valores atípicos (Outliers) en la variable Año de ocurrencia
de deslizamientos a nivel mundial")
) %>%
# --- FORMATEO: ENTEROS Y SIN COMAS PARA AÑOS Y CONTEO ---
fmt_number(
columns = c(Outliers_Detectados, Limite_Inferior, Limite_Superior, Q1, Q3),
decimals = 0,
use_seps = FALSE
) %>%
# --- ETIQUETAS DE COLUMNAS ---
cols_label(
Outliers_Detectados = "N° de Outliers",
Limite_Inferior = "Límite Inf.",
Limite_Superior = "Límite Sup.",
Q1 = "Cuartil 1 (Q1)",
Q3 = "Cuartil 3 (Q3)"
) %>%
tab_source_note(source_note = md("Elaborado por: Grupo 2 – Carrera de Geología"))
# Visualizar la tabla
tabla_outliers_gt
| Tabla N° 17 |
| Detección de valores atípicos (Outliers) en la variable Año de ocurrencia
de deslizamientos a nivel mundial |
| Variable |
N° de Outliers |
Límite Inf. |
Límite Sup. |
Cuartil 1 (Q1) |
Cuartil 3 (Q3) |
| Año de Ocurrencia |
27 |
2002 |
2022 |
2010 |
2015 |
| Elaborado por: Grupo 2 – Carrera de Geología |
11. CONCLUSIÓN
La variable Año de Ocurrencia fluctúa desde 1988 hasta 2017, sus
valores están en torno al 2013, con una desviación estándar de 3.03
siendo un conjunto de valores homogeneo, cuyos valores se presentan en
la parte media alta de la variable con un sesgo hacia la izquierda, a
excepcion de 27 valores atípicos que van desde 1988 hasta 2002.