setwd("~/UCE/III/estadistica")
# Carga de Datos
datos <- read.csv("Conjunto_Datos_Minerales.csv", header = TRUE, sep = ";", dec = ".")
# Variable de interés
PrimerAnio <- na.omit(datos$yr_fst_prd)
# Paso 1: Preparación de datos
TDFPrimerAnio <- table(PrimerAnio)
TablaPrimerAnio <- as.data.frame(TDFPrimerAnio)
# Paso 2: Frecuencia relativa (porcentaje)
hi <- (TablaPrimerAnio$Freq / sum(TablaPrimerAnio$Freq)) * 100
TablaPrimerAnio <- data.frame(TablaPrimerAnio, hi = round(hi, 2))
# Paso 3: Frecuencia acumulada ascendente y descendente
Niasc <- cumsum(TablaPrimerAnio$Freq)
Hiasc <- cumsum(TablaPrimerAnio$hi)
Nidsc <- rev(cumsum(rev(TablaPrimerAnio$Freq)))
Hidsc <- rev(cumsum(rev(TablaPrimerAnio$hi)))
# Paso 4: Tabla final
TablaPrimerAnioFinal <- data.frame(
Año = TablaPrimerAnio$PrimerAnio,
Frecuencia = TablaPrimerAnio$Freq,
Porcentaje = TablaPrimerAnio$hi,
Niasc,
Hiasc = round(Hiasc, 2),
Nidsc,
Hidsc = round(Hidsc, 2)
)
# Paso 5: Gráficos de barras (sin agrupar)
barplot(TablaPrimerAnioFinal$Frecuencia,
main = "Gráfico No.1: Distribución de cantidad del primer año de producción",
xlab = "Año", ylab = "Cantidad",
col = "orange",
names.arg = TablaPrimerAnioFinal$Año,
las = 2,
cex.names = 0.5,
cex.axis = 0.5)
barplot(TablaPrimerAnioFinal$Frecuencia,
main = "Gráfico No.2: Distribución de cantidad del primer año de producción",
xlab = "Año", ylab = "Cantidad",
col = "red",
names.arg = TablaPrimerAnioFinal$Año,
ylim = c(0, length(PrimerAnio)),
las = 2,
cex.names = 0.5,
cex.axis = 0.5)
barplot(TablaPrimerAnioFinal$Porcentaje,
main = "Gráfico No.3: Distribución de porcentaje del primer año de producción",
xlab = "Año", ylab = "Porcentaje",
col = "skyblue",
names.arg = TablaPrimerAnioFinal$Año,
las = 2,
cex.names = 0.5,
cex.axis = 0.5)
barplot(TablaPrimerAnioFinal$Porcentaje,
main = "Gráfico No.4: Distribución de porcentaje del primer año de producción",
xlab = "Año", ylab = "Porcentaje",
col = "blue",
names.arg = TablaPrimerAnioFinal$Año,
ylim = c(0, 100),
las = 2,
cex.names = 0.5,
cex.axis = 0.5)
# Paso 6: Ojivas
x <- as.numeric(as.character(TablaPrimerAnioFinal$Año))
plot(x, TablaPrimerAnioFinal$Niasc, type = "p", main = "Gráfico No.5: Ojiva ascendente - Primer año de producción",
xlab = "Año", ylab = "Frecuencia acumulada", col = "blue")
plot(x, TablaPrimerAnioFinal$Nidsc, type = "p", main = "Gráfico No.6: Ojiva descendente - Primer año de producción",
xlab = "Año", ylab = "Frecuencia acumulada", col = "blue")
plot(x, TablaPrimerAnioFinal$Hiasc, type = "p", main = "Gráfico No.7: Ojiva ascendente % - Primer año de producción",
xlab = "Año", ylab = "% acumulado", col = "blue")
plot(x, TablaPrimerAnioFinal$Hidsc, type = "p", main = "Gráfico No.8: Ojiva descendente % - Primer año de producción",
xlab = "Año", ylab = "% acumulado", col = "blue")
plot(x, TablaPrimerAnioFinal$Niasc, type = "p",
main = "Gráfico No.9: Ojivas Ni: ascendente vs descendente",
xlab = "Año", ylab = "Frecuencia acumulada", col = "green")
lines(x, TablaPrimerAnioFinal$Nidsc, type = "p", col = "blue")
plot(x, TablaPrimerAnioFinal$Hiasc, type = "p",
main = "Gráfico No.10: Ojivas Hi (%): ascendente vs descendente",
xlab = "Año", ylab = "% acumulado", col = "green")
lines(x, TablaPrimerAnioFinal$Hidsc, type = "p", col = "blue")
# ---------------- AGRUPACIÓN CADA 200 AÑOS ---------------------
# Crear intervalos de 200 años
minA <- floor(min(PrimerAnio, na.rm = TRUE) / 200) * 200
maxA <- ceiling(max(PrimerAnio, na.rm = TRUE) / 200) * 200
breaks <- seq(minA, maxA, by = 200)
# Etiquetas legibles para los intervalos
etiquetas_legibles <- paste0(head(breaks, -1), " a ", tail(breaks, -1))
# Agrupar los datos
PrimerAnioIntervalos <- cut(PrimerAnio,
breaks = breaks,
labels = etiquetas_legibles,
include.lowest = TRUE,
right = FALSE)
TDFIntervalos <- table(PrimerAnioIntervalos)
TablaIntervalos <- as.data.frame(TDFIntervalos)
# Calcular frecuencia relativa (%)
hi <- (TablaIntervalos$Freq / sum(TablaIntervalos$Freq)) * 100
TablaIntervalos <- data.frame(TablaIntervalos, hi = round(hi, 2))
# Acumulados
Niasc <- cumsum(TablaIntervalos$Freq)
Hiasc <- cumsum(TablaIntervalos$hi)
Nidsc <- rev(cumsum(rev(TablaIntervalos$Freq)))
Hidsc <- rev(cumsum(rev(TablaIntervalos$hi)))
# Extraer límites y calcular punto medio
lim_inf <- head(breaks, -1)
lim_sup <- tail(breaks, -1)
punto_medio <- (lim_inf + lim_sup) / 2
# Tabla final agrupada
TablaAgrupada <- data.frame(
Limite_Inferior = lim_inf,
Limite_Superior = lim_sup,
Mc = punto_medio,
ni = TablaIntervalos$Freq,
hi = round(TablaIntervalos$hi, 2),
Niasc,
Hiasc = round(Hiasc, 2),
Nidsc,
Hidsc = round(Hidsc, 2)
)
# Ver tabla
print(TablaAgrupada)
## Limite_Inferior Limite_Superior Mc ni hi Niasc Hiasc Nidsc Hidsc
## 1 0 200 100 2 0.01 2 0.01 16024 99.99
## 2 200 400 300 1 0.01 3 0.02 16022 99.98
## 3 400 600 500 0 0.00 3 0.02 16021 99.97
## 4 600 800 700 1 0.01 4 0.03 16021 99.97
## 5 800 1000 900 2 0.01 6 0.04 16020 99.96
## 6 1000 1200 1100 5 0.03 11 0.07 16018 99.95
## 7 1200 1400 1300 4 0.02 15 0.09 16013 99.92
## 8 1400 1600 1500 26 0.16 41 0.25 16009 99.90
## 9 1600 1800 1700 148 0.92 189 1.17 15983 99.74
## 10 1800 2000 1900 15831 98.80 16020 99.97 15835 98.82
## 11 2000 2200 2100 4 0.02 16024 99.99 4 0.02
# ---------------- GRÁFICOS ------------------------
# Histograma
hist(PrimerAnio,
breaks = breaks,
right = FALSE,
main = "Gráfico No.11: Histograma: Primer año de producción (agrupado cada 200 años)",
xlab = "Año",
ylab = "Frecuencia",
col = "orange",
border = "white")
# Ojivas agrupadas
x <- TablaAgrupada$Mc
plot(x, TablaAgrupada$Niasc, type = "b", main = "Gráfico No.12: Ojiva Ascendente",
xlab = "Año (punto medio)", ylab = "Frecuencia acumulada", col = "blue")
plot(x, TablaAgrupada$Nidsc, type = "b", main = "Gráfico No.13: Ojiva Descendente",
xlab = "Año (punto medio)", ylab = "Frecuencia acumulada", col = "blue")
plot(x, TablaAgrupada$Hiasc, type = "b", main = "Gráfico No.14: Ojiva Ascendente %",
xlab = "Año (punto medio)", ylab = "% acumulado", col = "blue")
plot(x, TablaAgrupada$Hidsc, type = "b", main = "Gráfico No.15: Ojiva Descendente %",
xlab = "Año (punto medio)", ylab = "% acumulado", col = "blue")
plot(x, TablaAgrupada$Niasc, type = "b", main = "Gráfico No.16: Ojivas Ni: Asc. y Desc.",
xlab = "Año (punto medio)", ylab = "Frecuencia acumulada", col = "green")
lines(x, TablaAgrupada$Nidsc, type = "b", col = "blue")
plot(x, TablaAgrupada$Hiasc, type = "b", main = "Gráfico No.17: Ojivas Hi %: Asc. y Desc.",
xlab = "Año (punto medio)", ylab = "% acumulado", col = "green")
lines(x, TablaAgrupada$Hidsc, type = "b", col = "blue")
# Boxplot
boxplot(PrimerAnio, horizontal = TRUE, col = "red",
main = "Gráfico No.18: Distribución del primer año de producción")
# ---------------- MEDIDAS ESTADÍSTICAS ------------------------
library(moments)
minimo <- min(PrimerAnio)
maximo <- max(PrimerAnio)
rango <- maximo - minimo
media <- mean(PrimerAnio)
mediana <- median(PrimerAnio)
cuartiles <- quantile(PrimerAnio, probs = c(0.25, 0.5, 0.75))
varianza <- var(PrimerAnio)
desviacion <- sd(PrimerAnio)
coef_var <- desviacion / media * 100
asimetria <- skewness(PrimerAnio)
curtosis <- kurtosis(PrimerAnio)
valores <- c(minimo, maximo, rango, media, mediana,
cuartiles[1], cuartiles[3],
varianza, desviacion, coef_var,
asimetria, curtosis)
nombres <- c("Mínimo", "Máximo", "Rango", "Media", "Mediana", "Q1", "Q3",
"Varianza", "Desv. estándar", "Coef. de variación (%)",
"Asimetría", "Curtosis")
tabla_horizontal <- as.data.frame(t(valores))
colnames(tabla_horizontal) <- nombres
# Mostrar tabla de medidas estadísticas
print(tabla_horizontal)
## Mínimo Máximo Rango Media Mediana Q1 Q3 Varianza Desv. estándar
## 1 1 2007 2006 1917.712 1918 1892 1952 3250.225 57.01074
## Coef. de variación (%) Asimetría Curtosis
## 1 2.972851 -9.829943 255.2638
# ---------------- DETECCIÓN DE OUTLIERS ------------------------
IQR_val <- cuartiles[3] - cuartiles[1]
limite_inferior <- cuartiles[1] - 1.5 * IQR_val
limite_superior <- cuartiles[3] + 1.5 * IQR_val
outliers <- PrimerAnio[PrimerAnio < limite_inferior | PrimerAnio > limite_superior]
num_outliers <- length(outliers)
min_outlier <- if (num_outliers > 0) min(outliers) else NA
max_outlier <- if (num_outliers > 0) max(outliers) else NA
Tabla_outliers <- data.frame(
"Cantidad de outliers" = num_outliers,
"Valor mínimo de outliers" = min_outlier,
"Valor máximo de outliers" = max_outlier
)
# Mostrar tabla de outliers
print(Tabla_outliers)
## Cantidad.de.outliers Valor.mínimo.de.outliers Valor.máximo.de.outliers
## 1 226 1 1800
La variable ‘primer año de producción’ presenta valores que oscilan entre los años 1 y 2007, evidenciando un rango temporal de 2006 años, lo que sugiere registros muy antiguos hasta tiempos recientes. La media es de 1917.71 y la mediana de 1918, lo que indica una distribución levemente sesgada hacia la izquierda (asimetría = -9.82), debido a la presencia de valores muy antiguos que reducen la media. Esta ligera diferencia también se refleja en los cuartiles, con Q1 = 1892 y Q3 = 1952, lo cual demuestra que la mayor parte de los datos se concentra en un intervalo de solo 60 años alrededor del siglo XX.
La desviación estándar es de 57.01 años, lo que implica una dispersión moderada respecto a la media, mientras que el coeficiente de variación del 2.97% sugiere una baja variabilidad relativa. La curtosis extremadamente alta (255.26) indica una distribución leptocúrtica, caracterizada por una fuerte concentración de datos cerca de la mediana y una presencia destacada de valores atípicos en los extremos.
Estos resultados muestran que, aunque existen registros excepcionales en años muy antiguos, la producción minera a nivel mundial ha estado fuertemente concentrada desde finales del siglo XIX hasta mediados del siglo XX. Esto es coherente con los procesos de industrialización y expansión tecnológica, y sugiere que ese periodo fue clave para el inicio formal de las operaciones mineras en muchos yacimientos actualmente registrados.