1. CARGA DE LIBRERIAS 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)
datos <- read_excel("datos_nuevoartes.xlsx")
2. DEFINICIÓN DE LA VARIABLE
latitude <- datos$latitude
latitude <- latitude[!is.na(latitude)]
n_lat <- length(latitude)
3. PARÁMETROS DE CLASIFICACIÓN
k_lat <- 12
min_lat <- min(latitude)
max_lat <- max(latitude)
R_lat <- max_lat - min_lat
A_real <- R_lat / k_lat
4. AJUSTE DE AMPLITUD DE CLASE
A_lat <- 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_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)
6. CÁLCULO DE 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)))
7. TABLA DE FRECUENCIAS (SALLIDA SIMPLE)
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
)
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 = ""
)
)
TDF_latitude
## Li Ls MC ni hi Ni_asc Ni_dsc Hi_asc
## 1 -50 -40 -45 99 0.8973081 99 11033 0.897308075772682
## 2 -40 -30 -35 147 1.3323665 246 10934 2.22967461252606
## 3 -30 -20 -25 257 2.3293755 503 10787 4.55905012236019
## 4 -20 -10 -15 158 1.4320674 661 10530 5.99111755642164
## 5 -10 0 -5 498 4.5137315 1159 10372 10.5048490890963
## 6 0 10 5 1015 9.1996737 2174 9874 19.7045227952506
## 7 10 20 15 1394 12.6348228 3568 8859 32.3393455995649
## 8 20 30 25 1842 16.6953684 5410 7465 49.0347140396991
## 9 30 40 35 2554 23.1487356 7964 5623 72.1834496510469
## 10 40 50 45 2603 23.5928578 10567 3069 95.7763074413124
## 11 50 60 55 419 3.7976978 10986 466 99.5740052569564
## 12 60 70 65 47 0.4259947 11033 47 100
## 13 TOTAL 11033 100.0000000
## Hi_dsc
## 1 100
## 2 99.1026919242273
## 3 97.7703253874739
## 4 95.4409498776398
## 5 94.0088824435784
## 6 89.4951509109037
## 7 80.2954772047494
## 8 67.6606544004351
## 9 50.9652859603009
## 10 27.8165503489531
## 11 4.22369255868757
## 12 0.425994743043596
## 13
8. TABLA DE PRESENTACIÓN
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° 2**"),
subtitle = md("Distribución de frecuencias de la variable Latitude (12 clases)")
) %>%
cols_label(
Li = "Límite inferior (°)",
Ls = "Límite superior (°)",
MC = "Marca de clase (°)",
ni = "Frecuencia absoluta (ni)",
hi = "Frecuencia relativa (%)",
Ni_asc = "Frecuencia acumulada (Ni)",
Hi_asc = "Frecuencia relativa acumulada (%)"
) %>%
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_latitude
| Tabla N° 2 |
| Distribución de frecuencias de la variable Latitude (12 clases) |
| Límite inferior (°) |
Límite superior (°) |
Marca de clase (°) |
Frecuencia absoluta (ni) |
Frecuencia relativa (%) |
Frecuencia acumulada (Ni) |
Ni_dsc |
Frecuencia relativa acumulada (%) |
Hi_dsc |
| -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 |
|
| Elaborado por: Grupo 2 – Carrera de Geología |
9. HISTOGRAMAS
9.1 Histograma local ni
hist(
latitude,
breaks = k_lat,
col = "grey",
main = "Gráfica 5: Histograma de frecuencia absoluta de Latitude",
xlab = "Latitude (°)",
ylab = "Frecuencia"
)

9.2. Histograma ni
hist(
latitude,
main = "Gráfica Nº 6: Frecuencia de Latitude (Global)",
ylab = "Cantidad",
xlab = "Latitude (°)",
col = "grey",
ylim = c(0, length(latitude))
)

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

9.4. Histograma global hi
barplot(
TDF_latitude$hi[TDF_latitude$Li != "TOTAL"],
space = 0,
main = "Gráfica Nº 8: Porcentaje de Latitude (Global)",
ylab = "Porcentaje (%)",
xlab = "Marca de Clase (°)",
col = "grey",
names.arg = TDF_latitude$MC[TDF_latitude$Li != "TOTAL"],
ylim = c(0, 100)
)

10. DIAGRAMA DE OJIVAS
plot(
Ls_lat,
Ni_asc,
type = "o",
col = "blue",
pch = 19,
main = "Gráfica 7: Ojiva acumulada de 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),
bty = "n"
)

11. DIAGRAMA DE CAJAS
boxplot(
latitude,
horizontal = TRUE,
col = "grey",
main = "Gráfica 8: Diagrama de caja de Latitude",
xlab = "Latitude (°)"
)

12. INDICADORES ESTADÍSTICOS
x <- mean(latitude)
Me <- median(latitude)
Mo <- as.numeric(names(sort(table(round(latitude, 1)), decreasing = TRUE)[1]))
sd_lat <- sd(latitude)
CV <- (sd_lat / x) * 100
As <- mean((latitude - x)^3) / sd_lat^3
K <- mean((latitude - x)^4) / sd_lat^4 - 3
12.1. Tabla de indicadores
tabla_indicadores <- data.frame(
Variable = "Latitude",
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 %>%
gt() %>%
tab_header(
title = md("**Tabla N° 3**"),
subtitle = md("Indicadores estadísticos de la variable Latitude")
) %>%
tab_source_note(
source_note = md("Elaborado por: Grupo 2 – Carrera de Geología")
)
| Tabla N° 3 |
| Indicadores estadísticos de la variable Latitude |
| Variable |
Media |
Mediana |
Moda |
Desv_Est |
CV |
Asimetría |
Curtosis |
| Latitude |
25.88 |
30.53 |
45.6 |
20.42 |
78.88 |
-1.12 |
1.1 |
| Elaborado por: Grupo 2 – Carrera de Geología |
13. DETECCIÓN Y UBICACIÓN DE OULIERS
13.1. Parámetros estadísticos
Q1_lat <- quantile(latitude, 0.25)
Q3_lat <- quantile(latitude, 0.75)
IQR_lat <- Q3_lat - Q1_lat
13.2. Definición de Rangos Críticos (Vallas)
lim_inf_valla <- Q1_lat - 1.5 * IQR_lat
lim_sup_valla <- Q3_lat + 1.5 * IQR_lat
13.3. Identificación de Outliers por ubicación
outliers_bajos <- latitude[latitude < lim_inf_valla]
outliers_altos <- latitude[latitude > lim_sup_valla]
13.4. Creación de Tabla Resumen de Rangos
Tabla_Rangos_Outliers <- data.frame(
Zona = c("Outliers Inferiores (Sur)", "Datos Normales", "Outliers Superiores (Norte)"),
Rango_Aceptado = c(
paste("<", round(lim_inf_valla, 4)),
paste(round(lim_inf_valla, 4), "a", round(lim_sup_valla, 4)),
paste(">", round(lim_sup_valla, 4))
),
Cantidad_Puntos = c(length(outliers_bajos), n_lat - length(outliers_bajos) - length(outliers_altos), length(outliers_altos))
)