1. CARGA DE DATOS Y 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)
datos <- read_excel("datos_deslizamientos.xlsx")
3. CONTEO
# Número de observaciones
n_lat <- length(latitude)
# Número de clases
k_lat <- 12
# Valores mínimo y máximo
min_lat <- min(latitude)
max_lat <- max(latitude)
# Rango
R_lat <- max_lat - min_lat
# Amplitud real
A_real <- R_lat / k_lat
# Ajuste de amplitud
A_lat <- ifelse(
A_real <= 2, 2,
ifelse(
A_real <= 5, 5,
ifelse(
A_real <= 10, 10,
ceiling(A_real/10)*10
)
)
)
# Límites de clase
Li0 <- floor(min_lat/A_lat)*A_lat
Li_lat <- seq(
Li0,
by = A_lat,
length.out = k_lat
)
Ls_lat <- Li_lat + A_lat
MC_lat <- round((Li_lat + Ls_lat)/2,2)
# Frecuencias
ni_lat <- numeric(k_lat)
for(i in 1:k_lat){
if(i < k_lat){
ni_lat[i] <- sum(
latitude >= Li_lat[i] &
latitude < Ls_lat[i]
)
}else{
ni_lat[i] <- sum(
latitude >= Li_lat[i] &
latitude <= max_lat
)
}
}
hi_lat <- (ni_lat/sum(ni_lat))*100
Ni_asc <- cumsum(ni_lat)
Ni_dsc <- rev(cumsum(rev(ni_lat)))
Hi_asc <- cumsum(hi_lat)
Hi_dsc <- rev(cumsum(rev(hi_lat)))
4. TABLA DE FRECUENCIAS
4.1 Cálculo de la tabla de frecuencias
TDF_latitude <- data.frame(
Li = Li_lat,
Ls = Ls_lat,
MC = MC_lat,
ni = ni_lat,
hi = hi_lat,
Ni_asc = Ni_asc,
Ni_dsc = Ni_dsc,
Hi_asc = Hi_asc,
Hi_dsc = Hi_dsc
)
# Agregar fila de totales
TDF_latitude <- rbind(
TDF_latitude,
data.frame(
Li = "TOTAL",
Ls = "",
MC = "",
ni = sum(ni_lat),
hi = 100,
Ni_asc = "",
Ni_dsc = "",
Hi_asc = "",
Hi_dsc = ""
)
)
4.2 Presentación de la tabla
tabla_latitude <- TDF_latitude %>%
mutate(
hi = round(as.numeric(hi),2),
Hi_asc = round(as.numeric(Hi_asc),2)
) %>%
gt() %>%
tab_header(
title = md("**Tabla N° 1**"),
subtitle = md("Distribución de frecuencias de la variable Latitude")
) %>%
cols_label(
Li = "Límite inferior (°)",
Ls = "Límite superior (°)",
MC = "Marca de clase (°)",
ni = "Frecuencia absoluta",
hi = "Frecuencia relativa (%)",
Ni_asc = "Frecuencia acumulada",
Ni_dsc = "Frecuencia acumulada descendente",
Hi_asc = "Frecuencia relativa acumulada (%)",
Hi_dsc = "Frecuencia relativa acumulada descendente (%)"
) %>%
tab_style(
style = cell_text(weight = "bold"),
locations = cells_body(rows = Li == "TOTAL")
) %>%
tab_source_note(
source_note = md("Autor: Grupo 2 – Carrera de Geología")
)
tabla_latitude
| Tabla N° 1 |
| Distribución de frecuencias de la variable Latitude |
| Límite inferior (°) |
Límite superior (°) |
Marca de clase (°) |
Frecuencia absoluta |
Frecuencia relativa (%) |
Frecuencia acumulada |
Frecuencia acumulada descendente |
Frecuencia relativa acumulada (%) |
Frecuencia relativa acumulada descendente (%) |
| -50 |
-40 |
-45 |
99 |
0.90 |
99 |
11033 |
0.90 |
100 |
| -40 |
-30 |
-35 |
147 |
1.33 |
246 |
10934 |
2.23 |
99.1026919242273 |
| -30 |
-20 |
-25 |
257 |
2.33 |
503 |
10787 |
4.56 |
97.7703253874739 |
| -20 |
-10 |
-15 |
158 |
1.43 |
661 |
10530 |
5.99 |
95.4409498776398 |
| -10 |
0 |
-5 |
498 |
4.51 |
1159 |
10372 |
10.50 |
94.0088824435784 |
| 0 |
10 |
5 |
1015 |
9.20 |
2174 |
9874 |
19.70 |
89.4951509109037 |
| 10 |
20 |
15 |
1394 |
12.63 |
3568 |
8859 |
32.34 |
80.2954772047494 |
| 20 |
30 |
25 |
1842 |
16.70 |
5410 |
7465 |
49.03 |
67.6606544004351 |
| 30 |
40 |
35 |
2554 |
23.15 |
7964 |
5623 |
72.18 |
50.9652859603009 |
| 40 |
50 |
45 |
2603 |
23.59 |
10567 |
3069 |
95.78 |
27.8165503489531 |
| 50 |
60 |
55 |
419 |
3.80 |
10986 |
466 |
99.57 |
4.22369255868757 |
| 60 |
70 |
65 |
47 |
0.43 |
11033 |
47 |
100.00 |
0.425994743043596 |
| TOTAL |
|
|
11033 |
100.00 |
|
|
NA |
|
| Autor: Grupo 2 – Carrera de Geología |
5. GRÁFICAS
5.1 Histograma local de frecuencia absoluta
(ni)
hist(
latitude,
breaks = k_lat,
col = "grey",
border = "black",
main = "Gráfica 5: Histograma local de frecuencia absoluta de Latitude",
xlab = "Latitude (°)",
ylab = "Frecuencia absoluta"
)

5.2 Histograma global de frecuencia absoluta
(ni)
hist(
latitude,
main = "Gráfica 6: Histograma global de frecuencia absoluta de Latitude",
xlab = "Latitude (°)",
ylab = "Cantidad",
col = "grey",
border = "black",
ylim = c(0, length(latitude))
)

5.3 Histograma local de frecuencia relativa
(hi)
hist(
latitude,
breaks = k_lat,
freq = FALSE,
col = "grey",
border = "black",
main = "Gráfica 7: Histograma local de frecuencia relativa de Latitude",
xlab = "Latitude (°)",
ylab = "Densidad"
)

5.4 Histograma global de frecuencia relativa
(hi)
barplot(
TDF_latitude$hi[TDF_latitude$Li != "TOTAL"],
space = 0,
col = "grey",
border = "black",
main = "Gráfica 8: Histograma global de frecuencia relativa de Latitude",
xlab = "Marca de clase (°)",
ylab = "Frecuencia relativa (%)",
names.arg = TDF_latitude$MC[TDF_latitude$Li != "TOTAL"],
ylim = c(0,100)
)

5.5 Diagrama de cajas
boxplot(
latitude,
horizontal = TRUE,
col = "grey",
border = "black",
main = "Gráfica 9: Diagrama de caja de Latitude",
xlab = "Latitude (°)",
outline = TRUE,
pch = 19,
outcol = "red"
)

5.6 Histograma con Boxplot superpuesto
# Guardar configuración gráfica
op <- par(no.readonly = TRUE)
# Dividir la ventana gráfica
layout(matrix(c(1,2), nrow = 2), heights = c(1,4))
# Boxplot superior
par(mar = c(0,4,2,2))
boxplot(
latitude,
horizontal = TRUE,
axes = FALSE,
col = "lightgray",
border = "black",
outline = TRUE,
pch = 19,
outcol = "red"
)
# Histograma inferior
par(mar = c(5,4,1,2))
hist(
latitude,
breaks = k_lat,
col = "grey",
border = "black",
main = "Gráfica 10: Histograma con Boxplot de Latitude",
xlab = "Latitude (°)",
ylab = "Frecuencia"
)

# Restaurar configuración original
layout(1)
par(op)
5.7 Diagrama de ojivas
plot(
Ls_lat,
Ni_asc,
type = "o",
col = "blue",
pch = 19,
ylim = c(0, max(Ni_asc)),
main = "Gráfica 11: Ojivas de la variable Latitude",
xlab = "Límites de clase (°)",
ylab = "Frecuencia acumulada"
)
lines(
Li_lat,
Ni_dsc,
type = "o",
col = "red",
pch = 17
)
legend(
"right",
legend = c(
"Ojiva ascendente (≤)",
"Ojiva descendente (≥)"
),
col = c("blue","red"),
pch = c(19,17),
lty = 1,
bty = "n"
)

6. INDICADORES
6.1 Cálculo de los indicadores estadísticos
# Límites teóricos de la variable
ri <- -90
rs <- 90
# Medidas de tendencia central
x <- mean(latitude)
Me <- median(latitude)
Mo <- as.numeric(
names(
sort(
table(round(latitude, 1)),
decreasing = TRUE
)[1]
)
)
# Medidas de dispersión
sd_lat <- sd(latitude)
CV <- (sd_lat / x) * 100
# Medidas de forma
As <- mean((latitude - x)^3) / sd_lat^3
K <- mean((latitude - x)^4) / sd_lat^4 - 3
6.2 Tabla de indicadores estadísticos
TablaIndicadores_latitude <- data.frame(
Variable = "Latitude",
ri = ri,
rs = rs,
Media = round(x, 2),
Mediana = round(Me, 2),
Moda = round(Mo, 2),
Desv_Est = round(sd_lat, 2),
CV = round(CV, 2),
Asimetría = round(As, 2),
Curtosis = round(K, 2)
)
tabla_indicadores <- TablaIndicadores_latitude %>%
gt() %>%
tab_header(
title = md("**Tabla N° 2**"),
subtitle = md("Indicadores estadísticos de la variable Latitude")
) %>%
tab_source_note(
source_note = md("Autor: Grupo 2 – Carrera de Geología")
)
tabla_indicadores
| Tabla N° 2 |
| Indicadores estadísticos de la variable Latitude |
| Variable |
ri |
rs |
Media |
Mediana |
Moda |
Desv_Est |
CV |
Asimetría |
Curtosis |
| Latitude |
-90 |
90 |
25.88 |
30.53 |
45.6 |
20.42 |
78.88 |
-1.12 |
1.1 |
| Autor: Grupo 2 – Carrera de Geología |
6.3 Detección de outliers (Método IQR)
Q1_lat <- quantile(latitude, 0.25)
Q3_lat <- quantile(latitude, 0.75)
IQR_lat <- IQR(latitude)
Limite_inferior <- Q1_lat - 1.5 * IQR_lat
Limite_superior <- Q3_lat + 1.5 * IQR_lat
outliers_bajos <- latitude[latitude < Limite_inferior]
outliers_altos <- latitude[latitude > Limite_superior]
6.4 Tabla de detección de outliers
Tabla_Outliers <- data.frame(
Zona = c(
"Outliers inferiores",
"Datos normales",
"Outliers superiores"
),
Rango = c(
paste("<", round(Limite_inferior, 4)),
paste(round(Limite_inferior, 4), "a", round(Limite_superior, 4)),
paste(">", round(Limite_superior, 4))
),
Registros = c(
length(outliers_bajos),
n_lat - length(outliers_bajos) - length(outliers_altos),
length(outliers_altos)
)
)
tabla_outliers <- Tabla_Outliers %>%
gt() %>%
tab_header(
title = md("**Tabla N° 3**"),
subtitle = md("Detección de outliers mediante el método IQR")
) %>%
cols_label(
Zona = "Zona",
Rango = "Rango (°)",
Registros = "Número de registros"
) %>%
tab_style(
style = cell_fill(color = "mistyrose"),
locations = cells_body(rows = c(1,3))
) %>%
tab_source_note(
source_note = md("Autor: Grupo 2 – Carrera de Geología")
)
tabla_outliers
| Tabla N° 3 |
| Detección de outliers mediante el método IQR |
| Zona |
Rango (°) |
Número de registros |
| Outliers inferiores |
< -26.5054 |
287 |
| Datos normales |
-26.5054 a 81.2892 |
10746 |
| Outliers superiores |
> 81.2892 |
0 |
| Autor: Grupo 2 – Carrera de Geología |