library(gt)
library(dplyr)
library(e1071)
# Cargar el conjunto de datos
datos <- read.csv(
"C:/Users/Grace/Downloads/dataset_geologico_limpio_80.csv",
header = TRUE,
sep = ",",
dec = "."
)
# Extraer la variable YEAR_COLL y convertirla a años enteros
year <- round(as.numeric(datos$YEAR_COLL))
# Eliminar valores faltantes y años posteriores a 2024
year <- na.omit(year)
year <- year[year <= 2024]
# Número de observaciones válidas
n <- length(year)
n
## [1] 27438
La variable YEAR_COLL representa el año en que fue
recolectada cada muestra de sedimento marino. Es una variable
cuantitativa discreta, porque se registra mediante años
completos y, por tanto, toma valores enteros contables. La limpieza
elimina los datos faltantes y los años posteriores a 2024. Aunque
posteriormente se agrupe para facilitar su presentación, la naturaleza
de la variable continúa siendo discreta.
Primero se presenta la distribución original de
YEAR_COLL, conservando cada año observado como una
categoría independiente.
# Frecuencias de cada año observado
frecuencia_original <- as.data.frame(table(year))
names(frecuencia_original) <- c("Año", "ni")
frecuencia_original$Año <- as.integer(
as.character(frecuencia_original$Año)
)
frecuencia_original$hi <- frecuencia_original$ni / n * 100
frecuencia_original$Ni_Asc <- cumsum(frecuencia_original$ni)
frecuencia_original$Hi_Asc <- cumsum(frecuencia_original$hi)
tabla_original <- frecuencia_original %>%
mutate(
Año = as.character(Año),
hi = round(hi, 2),
Hi_Asc = round(Hi_Asc, 2)
)
fila_total_original <- data.frame(
Año = "TOTAL",
ni = n,
hi = 100,
Ni_Asc = NA,
Hi_Asc = NA
)
tabla_original <- bind_rows(tabla_original, fila_total_original)
TablaOriginal <- tabla_original %>%
gt() %>%
cols_label(
Año = "Año",
ni = "ni",
hi = "hi (%)",
Ni_Asc = "Ni asc.",
Hi_Asc = "Hi asc. (%)"
) %>%
fmt_number(
columns = c(ni, Ni_Asc),
decimals = 0,
sep_mark = ".",
dec_mark = ","
) %>%
fmt_number(
columns = c(hi, Hi_Asc),
decimals = 2,
sep_mark = ".",
dec_mark = ","
) %>%
fmt_missing(columns = everything(), missing_text = "") %>%
tab_header(
title = md("**Tabla N.º 1**"),
subtitle = md(
"**Distribución de frecuencias original del año de recolección**"
)
) %>%
tab_source_note(
source_note = md("__Autor: Grupo 2__")
) %>%
tab_options(
table.border.top.color = "black",
table.border.bottom.color = "black",
column_labels.border.top.color = "black",
column_labels.border.bottom.color = "black",
column_labels.border.bottom.width = px(2),
row.striping.include_table_body = TRUE,
heading.border.bottom.color = "black",
heading.border.bottom.width = px(2)
) %>%
tab_style(
style = cell_text(weight = "bold"),
locations = cells_body(rows = Año == "TOTAL")
)
## Warning: Since gt v0.6.0 `fmt_missing()` is deprecated and will soon be removed.
## ℹ Use `sub_missing()` instead.
## This warning is displayed once every 8 hours.
TablaOriginal
| Tabla N.º 1 | ||||
| Distribución de frecuencias original del año de recolección | ||||
| Año | ni | hi (%) | Ni asc. | Hi asc. (%) |
|---|---|---|---|---|
| 1945 | 1 | 0,00 | 1 | 0,00 |
| 1947 | 1 | 0,00 | 2 | 0,01 |
| 1950 | 1 | 0,00 | 3 | 0,01 |
| 1953 | 1 | 0,00 | 4 | 0,01 |
| 1955 | 23 | 0,08 | 27 | 0,10 |
| 1956 | 1 | 0,00 | 28 | 0,10 |
| 1957 | 119 | 0,43 | 147 | 0,54 |
| 1958 | 4 | 0,01 | 151 | 0,55 |
| 1959 | 51 | 0,19 | 202 | 0,74 |
| 1960 | 28 | 0,10 | 230 | 0,84 |
| 1961 | 130 | 0,47 | 360 | 1,31 |
| 1962 | 85 | 0,31 | 445 | 1,62 |
| 1963 | 443 | 1,61 | 888 | 3,24 |
| 1964 | 1.110 | 4,05 | 1.998 | 7,28 |
| 1965 | 653 | 2,38 | 2.651 | 9,66 |
| 1966 | 270 | 0,98 | 2.921 | 10,65 |
| 1967 | 173 | 0,63 | 3.094 | 11,28 |
| 1968 | 440 | 1,60 | 3.534 | 12,88 |
| 1969 | 295 | 1,08 | 3.829 | 13,96 |
| 1970 | 229 | 0,83 | 4.058 | 14,79 |
| 1971 | 14 | 0,05 | 4.072 | 14,84 |
| 1972 | 13 | 0,05 | 4.085 | 14,89 |
| 1973 | 25 | 0,09 | 4.110 | 14,98 |
| 1974 | 23 | 0,08 | 4.133 | 15,06 |
| 1975 | 14 | 0,05 | 4.147 | 15,11 |
| 1976 | 18 | 0,07 | 4.165 | 15,18 |
| 1977 | 78 | 0,28 | 4.243 | 15,46 |
| 1978 | 193 | 0,70 | 4.436 | 16,17 |
| 1979 | 48 | 0,17 | 4.484 | 16,34 |
| 1980 | 173 | 0,63 | 4.657 | 16,97 |
| 1981 | 625 | 2,28 | 5.282 | 19,25 |
| 1982 | 883 | 3,22 | 6.165 | 22,47 |
| 1983 | 845 | 3,08 | 7.010 | 25,55 |
| 1984 | 596 | 2,17 | 7.606 | 27,72 |
| 1985 | 271 | 0,99 | 7.877 | 28,71 |
| 1986 | 223 | 0,81 | 8.100 | 29,52 |
| 1987 | 789 | 2,88 | 8.889 | 32,40 |
| 1988 | 528 | 1,92 | 9.417 | 34,32 |
| 1989 | 800 | 2,92 | 10.217 | 37,24 |
| 1990 | 636 | 2,32 | 10.853 | 39,55 |
| 1991 | 853 | 3,11 | 11.706 | 42,66 |
| 1992 | 788 | 2,87 | 12.494 | 45,54 |
| 1993 | 1.181 | 4,30 | 13.675 | 49,84 |
| 1994 | 552 | 2,01 | 14.227 | 51,85 |
| 1995 | 773 | 2,82 | 15.000 | 54,67 |
| 1996 | 1.925 | 7,02 | 16.925 | 61,68 |
| 1997 | 1.176 | 4,29 | 18.101 | 65,97 |
| 1998 | 1.169 | 4,26 | 19.270 | 70,23 |
| 1999 | 811 | 2,96 | 20.081 | 73,19 |
| 2000 | 752 | 2,74 | 20.833 | 75,93 |
| 2001 | 552 | 2,01 | 21.385 | 77,94 |
| 2002 | 1.047 | 3,82 | 22.432 | 81,76 |
| 2003 | 239 | 0,87 | 22.671 | 82,63 |
| 2004 | 663 | 2,42 | 23.334 | 85,04 |
| 2005 | 443 | 1,61 | 23.777 | 86,66 |
| 2006 | 254 | 0,93 | 24.031 | 87,58 |
| 2007 | 440 | 1,60 | 24.471 | 89,19 |
| 2008 | 263 | 0,96 | 24.734 | 90,15 |
| 2009 | 154 | 0,56 | 24.888 | 90,71 |
| 2010 | 817 | 2,98 | 25.705 | 93,68 |
| 2011 | 595 | 2,17 | 26.300 | 95,85 |
| 2012 | 739 | 2,69 | 27.039 | 98,55 |
| 2013 | 314 | 1,14 | 27.353 | 99,69 |
| 2014 | 37 | 0,13 | 27.390 | 99,83 |
| 2015 | 10 | 0,04 | 27.400 | 99,86 |
| 2016 | 4 | 0,01 | 27.404 | 99,88 |
| 2017 | 9 | 0,03 | 27.413 | 99,91 |
| 2018 | 5 | 0,02 | 27.418 | 99,93 |
| 2019 | 3 | 0,01 | 27.421 | 99,94 |
| 2020 | 4 | 0,01 | 27.425 | 99,95 |
| 2021 | 2 | 0,01 | 27.427 | 99,96 |
| 2022 | 4 | 0,01 | 27.431 | 99,97 |
| 2023 | 5 | 0,02 | 27.436 | 99,99 |
| 2024 | 2 | 0,01 | 27.438 | 100,00 |
| TOTAL | 27.438 | 100,00 | ||
| Autor: Grupo 2 | ||||
La tabla sin agrupar contiene una fila por cada año diferente observado. Debido a la cantidad de filas, su lectura y comparación resultan poco prácticas. Por esta razón se utiliza la regla de Sturges como referencia para determinar el número teórico de clases:
\[ k = 1 + 3.322\log_{10}(n) \]
# Rango de la variable
R <- max(year) - min(year)
# Número teórico de clases según Sturges
k_teorico <- 1 + 3.322 * log10(n)
k_sturges <- ceiling(k_teorico)
# Amplitud teórica exacta y amplitud redondeada
A_teorica <- R / k_sturges
A_redondeada <- ceiling(A_teorica)
cat("Número de observaciones =", n, "\n")
## Número de observaciones = 27438
cat("Número teórico de clases =", round(k_teorico, 2), "\n")
## Número teórico de clases = 15.74
cat("Número recomendado de clases =", k_sturges, "\n")
## Número recomendado de clases = 16
cat("Rango =", R, "años\n")
## Rango = 79 años
cat("Amplitud teórica =", round(A_teorica, 2), "años\n")
## Amplitud teórica = 4.94 años
cat("Amplitud redondeada =", A_redondeada, "años\n")
## Amplitud redondeada = 5 años
Sturges proporciona una recomendación teórica y una amplitud poco práctica para representar años. Por ello, con el propósito de obtener intervalos fáciles de identificar, comparar e interpretar, se adopta una amplitud convencional de 10 años. En consecuencia, los datos se presentan por décadas. Esta agrupación es únicamente una estrategia de presentación y no convierte la variable en continua.
# Intervalos de diez años
orden <- c(
"1940-1949",
"1950-1959",
"1960-1969",
"1970-1979",
"1980-1989",
"1990-1999",
"2000-2009",
"2010-2019",
"2020-2024"
)
clasificacion <- cut(
year,
breaks = c(1940, 1950, 1960, 1970, 1980, 1990,
2000, 2010, 2020, 2025),
right = FALSE,
labels = orden
)
# Verificar si algún año quedó fuera de los intervalos definidos
if (any(is.na(clasificacion))) {
warning("Existen años fuera de los intervalos definidos.")
}
ni <- table(clasificacion)
total <- sum(ni)
hi <- as.numeric(ni) / total * 100
Ni_Asc <- cumsum(as.numeric(ni))
Hi_Asc <- cumsum(hi)
Ni_Desc <- rev(cumsum(rev(as.numeric(ni))))
Hi_Desc <- rev(cumsum(rev(hi)))
tabla_final <- data.frame(
Intervalo = orden,
ni = as.numeric(ni),
hi = round(hi, 2),
Ni_Asc = Ni_Asc,
Hi_Asc = round(Hi_Asc, 2),
Ni_Desc = Ni_Desc,
Hi_Desc = round(Hi_Desc, 2)
)
fila_total <- data.frame(
Intervalo = "TOTAL",
ni = total,
hi = 100,
Ni_Asc = NA,
Hi_Asc = NA,
Ni_Desc = NA,
Hi_Desc = NA
)
tabla_final <- bind_rows(tabla_final, fila_total)
TablaAgrupada <- tabla_final %>%
gt() %>%
cols_label(
Intervalo = "Intervalo",
ni = "ni",
hi = "hi (%)",
Ni_Asc = "Ni asc.",
Hi_Asc = "Hi asc. (%)",
Ni_Desc = "Ni desc.",
Hi_Desc = "Hi desc. (%)"
) %>%
fmt_missing(columns = everything(), missing_text = "") %>%
tab_header(
title = md("**Tabla N.º 2**"),
subtitle = md(
"**Distribución de frecuencias del año de recolección agrupada por décadas**"
)
) %>%
tab_source_note(
source_note = md("__Autor: Grupo 2__")
) %>%
tab_options(
table.border.top.color = "black",
table.border.bottom.color = "black",
column_labels.border.top.color = "black",
column_labels.border.bottom.color = "black",
column_labels.border.bottom.width = px(2),
row.striping.include_table_body = TRUE,
heading.border.bottom.color = "black",
heading.border.bottom.width = px(2)
) %>%
tab_style(
style = cell_text(weight = "bold"),
locations = cells_body(rows = Intervalo == "TOTAL")
)
TablaAgrupada
| Tabla N.º 2 | ||||||
| Distribución de frecuencias del año de recolección agrupada por décadas | ||||||
| Intervalo | ni | hi (%) | Ni asc. | Hi asc. (%) | Ni desc. | Hi desc. (%) |
|---|---|---|---|---|---|---|
| 1940-1949 | 2 | 0.01 | 2 | 0.01 | 27438 | 100.00 |
| 1950-1959 | 200 | 0.73 | 202 | 0.74 | 27436 | 99.99 |
| 1960-1969 | 3627 | 13.22 | 3829 | 13.96 | 27236 | 99.26 |
| 1970-1979 | 655 | 2.39 | 4484 | 16.34 | 23609 | 86.04 |
| 1980-1989 | 5733 | 20.89 | 10217 | 37.24 | 22954 | 83.66 |
| 1990-1999 | 9864 | 35.95 | 20081 | 73.19 | 17221 | 62.76 |
| 2000-2009 | 4807 | 17.52 | 24888 | 90.71 | 7357 | 26.81 |
| 2010-2019 | 2533 | 9.23 | 27421 | 99.94 | 2550 | 9.29 |
| 2020-2024 | 17 | 0.06 | 27438 | 100.00 | 17 | 0.06 |
| TOTAL | 27438 | 100.00 | ||||
| Autor: Grupo 2 | ||||||
# Diagrama de barras de frecuencia absoluta con escala local
par(mar = c(8, 4, 5, 2) + 0.1)
posiciones <- barplot(
as.numeric(ni),
space = 0.10,
col = "gray",
border = "black",
main = "Gráfica N.º1: Distribución de cantidad del\nAño de Recolección de Sedimentos Marinos",
xlab = "",
ylab = "Cantidad",
names.arg = FALSE,
xaxt = "n"
)
text(
posiciones,
par("usr")[3] - 0.035 * diff(par("usr")[3:4]),
labels = orden,
srt = 45,
adj = 1,
xpd = TRUE,
cex = 0.78
)
mtext("Intervalos de Año", side = 1, line = 5.8)
par(mar = c(5, 4, 4, 2) + 0.1)
# Diagrama de barras de frecuencia absoluta con escala global
par(mar = c(8, 4, 5, 2) + 0.1)
posiciones <- barplot(
as.numeric(ni),
space = 0.10,
col = "gray",
border = "black",
main = "Gráfica N.º2: Distribución de cantidad del\nAño de Recolección de Sedimentos Marinos",
xlab = "",
ylab = "Cantidad",
names.arg = FALSE,
xaxt = "n",
ylim = c(0, total),
xaxs = "i"
)
text(
posiciones,
par("usr")[3] - 0.035 * diff(par("usr")[3:4]),
labels = orden,
srt = 45,
adj = 1,
xpd = TRUE,
cex = 0.78
)
mtext("Intervalos de Año", side = 1, line = 5.8)
par(mar = c(5, 4, 4, 2) + 0.1)
# Diagrama de barras de frecuencia relativa con escala local
par(mar = c(8, 4, 5, 2) + 0.1)
posiciones <- barplot(
hi,
space = 0.10,
col = "gray",
border = "black",
main = "Gráfica N.º3: Distribución de cantidad en porcentaje del\nAño de Recolección de Sedimentos Marinos",
xlab = "",
ylab = "Porcentaje",
names.arg = FALSE,
xaxt = "n"
)
text(
posiciones,
par("usr")[3] - 0.035 * diff(par("usr")[3:4]),
labels = orden,
srt = 45,
adj = 1,
xpd = TRUE,
cex = 0.78
)
mtext("Intervalos de Año", side = 1, line = 5.8)
par(mar = c(5, 4, 4, 2) + 0.1)
# Diagrama de barras de frecuencia relativa con escala global
par(mar = c(8, 4, 5, 2) + 0.1)
posiciones <- barplot(
hi,
space = 0.10,
col = "gray",
border = "black",
main = "Gráfica N.º4: Distribución de cantidad en porcentaje del\nAño de Recolección de Sedimentos Marinos",
xlab = "",
ylab = "Porcentaje",
names.arg = FALSE,
xaxt = "n",
ylim = c(0, 100),
xaxs = "i"
)
text(
posiciones,
par("usr")[3] - 0.035 * diff(par("usr")[3:4]),
labels = orden,
srt = 45,
adj = 1,
xpd = TRUE,
cex = 0.78
)
mtext("Intervalos de Año", side = 1, line = 5.8)
par(mar = c(5, 4, 4, 2) + 0.1)
# Ojiva combinada de frecuencias absolutas: solo puntos
x_clases <- seq_along(orden)
# El margen inferior permite mostrar las etiquetas diagonales
par(mar = c(8, 4, 4, 2) + 0.1)
plot(
x_clases,
Ni_Desc,
type = "p",
pch = 19,
col = "blue",
main = "Gráfica N.º5: Ojiva combinada del Año de Recolección (Ni)",
ylab = "Cantidad acumulada",
xlab = "",
xaxt = "n",
xlim = c(0, length(orden) + 0.5),
ylim = c(0, total)
)
axis(1, at = c(0, x_clases), labels = FALSE)
text(
c(0, x_clases),
par("usr")[3] - 0.035 * diff(par("usr")[3:4]),
labels = c("0", orden),
srt = 45,
adj = 1,
xpd = TRUE,
cex = 0.75
)
points(x_clases, Ni_Asc, col = "red", pch = 19)
mtext("Intervalos", side = 1, line = 5.8)
legend(
"bottom",
legend = c("Descendente", "Ascendente"),
col = c("blue", "red"),
pch = c(19, 19),
lty = 0,
horiz = TRUE,
inset = 0.02,
bty = "n"
)
par(mar = c(5, 4, 4, 2) + 0.1)
# Ojiva combinada de frecuencias relativas: solo puntos
par(mar = c(8, 4, 4, 2) + 0.1)
plot(
x_clases,
Hi_Desc,
type = "p",
pch = 19,
col = "blue",
main = "Gráfica N.º6: Ojiva combinada del Año de Recolección (Hi)",
ylab = "Porcentaje acumulado",
xlab = "",
xaxt = "n",
xlim = c(0, length(orden) + 0.5),
ylim = c(0, 100)
)
axis(1, at = c(0, x_clases), labels = FALSE)
text(
c(0, x_clases),
par("usr")[3] - 0.035 * diff(par("usr")[3:4]),
labels = c("0", orden),
srt = 45,
adj = 1,
xpd = TRUE,
cex = 0.75
)
points(x_clases, Hi_Asc, col = "red", pch = 19)
mtext("Intervalos", side = 1, line = 5.8)
legend(
"bottom",
legend = c("Descendente", "Ascendente"),
col = c("blue", "red"),
pch = c(19, 19),
lty = 0,
horiz = TRUE,
inset = 0.02,
bty = "n"
)
par(mar = c(5, 4, 4, 2) + 0.1)
# Diagrama de caja independiente
boxplot(
year,
horizontal = TRUE,
main = "Gráfica N.º7: Distribución de cantidad del\nAño de Recolección de Sedimentos Marinos",
xlab = "Año",
col = "lightblue"
)
media <- mean(year)
mediana <- median(year)
desv <- sd(year)
CV <- desv / media * 100
asimetria <- skewness(year)
curtosis <- kurtosis(year)
minimo <- min(year)
maximo <- max(year)
TablaIndicadores <- data.frame(
Variable = "YEAR_COLL",
Mínimo = minimo,
Máximo = maximo,
Media = round(media, 0),
Mediana = mediana,
Desviación_estándar = round(desv, 2),
CV = round(CV, 2),
Asimetría = round(asimetria, 2),
Curtosis = round(curtosis, 2),
check.names = FALSE
)
TablaIndicadores %>%
gt() %>%
tab_header(
title = md("**Tabla N.º 3**"),
subtitle = md(
"**Indicadores estadísticos de la variable Año de Recolección**"
)
) %>%
tab_source_note(
source_note = md("__Autor: Grupo 2__")
) %>%
tab_options(
table.border.top.color = "black",
table.border.bottom.color = "black",
column_labels.border.bottom.color = "black",
column_labels.border.bottom.width = px(2),
row.striping.include_table_body = TRUE,
table_body.hlines.color = "gray"
)
| Tabla N.º 3 | ||||||||
| Indicadores estadísticos de la variable Año de Recolección | ||||||||
| Variable | Mínimo | Máximo | Media | Mediana | Desviación_estándar | CV | Asimetría | Curtosis |
|---|---|---|---|---|---|---|---|---|
| YEAR_COLL | 1945 | 2024 | 1991 | 1994 | 13.79 | 0.69 | -0.64 | -0.28 |
| Autor: Grupo 2 | ||||||||
outliers <- boxplot.stats(year)$out
num_outliers <- length(outliers)
TablaOutliers <- data.frame(
Cantidad_de_atípicos = num_outliers,
Mínimo = if (num_outliers > 0) min(outliers) else NA,
Máximo = if (num_outliers > 0) max(outliers) else NA,
check.names = FALSE
)
TablaOutliers %>%
gt() %>%
fmt_missing(columns = everything(), missing_text = "No aplica") %>%
tab_header(
title = md("**Tabla N.º 4**"),
subtitle = md(
"**Valores atípicos de la variable Año de Recolección**"
)
) %>%
tab_source_note(
source_note = md("__Autor: Grupo 2__")
) %>%
tab_options(
table.border.top.color = "black",
table.border.bottom.color = "black",
column_labels.border.bottom.color = "black",
column_labels.border.bottom.width = px(2),
row.striping.include_table_body = TRUE,
table_body.hlines.color = "gray"
)
| Tabla N.º 4 | ||
| Valores atípicos de la variable Año de Recolección | ||
| Cantidad_de_atípicos | Mínimo | Máximo |
|---|---|---|
| 147 | 1945 | 1957 |
| Autor: Grupo 2 | ||
La variable Año de Recolección presenta valores que fluctúan entre 1945 y 2024, con una concentración en torno a la mediana de 1994. La desviación estándar de 13.79 y el coeficiente de variación de 0.69 % indican una baja dispersión y una alta homogeneidad de los datos. La asimetría negativa (-0.64) evidencia la presencia de registros antiguos que influyen en el extremo izquierdo de la distribución. La acumulación de valores se encuentra en la parte alta de la variable, lo que demuestra que la mayoría de las recolecciones se realizaron en periodos recientes. Por todo lo anterior mencionado, el comportamiento de la variable es medianamente beneficioso, debido a que los registros modernos cuentan con información geológica más confiable y mejor documentada.