setwd("~/UCE/III/estadistica")
# Carga de Datos
datos <- read.csv("Conjunto_Datos_Minerales.csv", header = TRUE, sep = ";", dec = ".")
UltimoAnio <- na.omit(datos$yr_lst_prd)
# Paso 1: Preparación de datos
TDFUltimoAnio <- table(UltimoAnio)
TablaUltimoAnio <- as.data.frame(TDFUltimoAnio)
# Paso 2: Frecuencia relativa (porcentaje)
hi <- (TablaUltimoAnio$Freq / sum(TablaUltimoAnio$Freq)) * 100
TablaUltimoAnio <- data.frame(TablaUltimoAnio, hi = round(hi, 2))
# Paso 3: Frecuencia acumulada ascendente y descendente
Niasc <- cumsum(TablaUltimoAnio$Freq)
Hiasc <- cumsum(TablaUltimoAnio$hi)
Nidsc <- rev(cumsum(rev(TablaUltimoAnio$Freq)))
Hidsc <- rev(cumsum(rev(TablaUltimoAnio$hi)))
# Paso 4: Tabla final
TablaUltimoAnioFinal <- data.frame(
Año = TablaUltimoAnio$UltimoAnio,
Frecuencia = TablaUltimoAnio$Freq,
Porcentaje = TablaUltimoAnio$hi,
Niasc,
Hiasc = round(Hiasc, 2),
Nidsc,
Hidsc = round(Hidsc, 2)
)
# Paso 5: Gráficos de barras (sin agrupar)
barplot(TablaUltimoAnioFinal$Frecuencia,
main = "Gráfico No.1: Distribución de cantidad del último año de producción",
xlab = "Año", ylab = "Cantidad",
col = "orange",
names.arg = TablaUltimoAnioFinal$Año,
las = 2,
cex.names = 0.5,
cex.axis = 0.5)
barplot(TablaUltimoAnioFinal$Frecuencia,
main = "Gráfico No.2: Distribución de cantidad del último año de producción",
xlab = "Año", ylab = "Cantidad",
col = "red",
names.arg = TablaUltimoAnioFinal$Año,
ylim = c(0, length(UltimoAnio)),
las = 2,
cex.names = 0.5,
cex.axis = 0.5)
barplot(TablaUltimoAnioFinal$Porcentaje,
main = "Gráfico No.3: Distribución de porcentaje del último año de producción",
xlab = "Año", ylab = "Porcentaje",
col = "skyblue",
names.arg = TablaUltimoAnioFinal$Año,
las = 2,
cex.names = 0.5,
cex.axis = 0.5)
barplot(TablaUltimoAnioFinal$Porcentaje,
main = "Gráfico No.4: Distribución de porcentaje del último año de producción",
xlab = "Año", ylab = "Porcentaje",
col = "blue",
names.arg = TablaUltimoAnioFinal$Año,
ylim = c(0, 100),
las = 2,
cex.names = 0.5,
cex.axis = 0.5)
# Ojivas
x <- as.numeric(as.character(TablaUltimoAnioFinal$Año))
plot(x, TablaUltimoAnioFinal$Niasc, type = "p", main = "Gráfico No.5: Ojiva ascendente - Último año",
xlab = "Año", ylab = "Frecuencia acumulada", col = "blue")
plot(x, TablaUltimoAnioFinal$Nidsc, type = "p", main = "Gráfico No.6: Ojiva descendente - Último año",
xlab = "Año", ylab = "Frecuencia acumulada", col = "blue")
plot(x, TablaUltimoAnioFinal$Hiasc, type = "p", main = "Gráfico No.7: Ojiva ascendente % - Último año",
xlab = "Año", ylab = "% acumulado", col = "blue")
plot(x, TablaUltimoAnioFinal$Hidsc, type = "p", main = "Gráfico No.8: Ojiva descendente % - Último año",
xlab = "Año", ylab = "% acumulado", col = "blue")
plot(x, TablaUltimoAnioFinal$Niasc, type = "p",
main = "Gráfico No.9: Ojivas Ni: ascendente vs descendente",
xlab = "Año", ylab = "Frecuencia acumulada", col = "green")
lines(x, TablaUltimoAnioFinal$Nidsc, type = "p", col = "blue")
plot(x, TablaUltimoAnioFinal$Hiasc, type = "p",
main = "Gráfico No.10: Ojivas Hi (%): ascendente vs descendente",
xlab = "Año", ylab = "% acumulado", col = "green")
lines(x, TablaUltimoAnioFinal$Hidsc, type = "p", col = "blue")
# ---------------- AGRUPACIÓN CADA 100 AÑOS ---------------------
# Crear intervalos de 100 en 100 años
minA <- floor(min(UltimoAnio, na.rm = TRUE) / 100) * 100
maxA <- ceiling(max(UltimoAnio, na.rm = TRUE) / 100) * 100
breaks <- seq(minA, maxA, by = 100)
# Etiquetas legibles para los intervalos
etiquetas_legibles <- paste0(head(breaks, -1), " a ", tail(breaks, -1))
# Agrupar los datos en intervalos
UltimoAnioIntervalos <- cut(UltimoAnio,
breaks = breaks,
labels = etiquetas_legibles,
include.lowest = TRUE,
right = FALSE)
# Crear tabla de frecuencias
TDFIntervalos <- table(UltimoAnioIntervalos)
TablaIntervalos <- as.data.frame(TDFIntervalos)
# Calcular frecuencia relativa (%)
hi <- (TablaIntervalos$Freq / sum(TablaIntervalos$Freq)) * 100
TablaIntervalos$hi <- round(hi, 2)
# Frecuencias acumuladas absolutas y relativas
Niasc <- cumsum(TablaIntervalos$Freq)
Hiasc <- cumsum(TablaIntervalos$hi)
Nidsc <- rev(cumsum(rev(TablaIntervalos$Freq)))
Hidsc <- rev(cumsum(rev(TablaIntervalos$hi)))
# Extraer límites para calcular punto medio
lim_inf <- head(breaks, -1)
lim_sup <- tail(breaks, -1)
punto_medio <- (lim_inf + lim_sup) / 2
# Tabla final agrupada con todos los datos
TablaAgrupada <- data.frame(
Limite_Inferior = lim_inf,
Limite_Superior = lim_sup,
Mc = punto_medio,
ni = TablaIntervalos$Freq,
hi = TablaIntervalos$hi,
Niasc = Niasc,
Hiasc = round(Hiasc, 2),
Nidsc = Nidsc,
Hidsc = round(Hidsc, 2)
)
print(TablaAgrupada)
## Limite_Inferior Limite_Superior Mc ni hi Niasc Hiasc Nidsc Hidsc
## 1 1500 1600 1550 1 0.02 1 0.02 5483 100.00
## 2 1600 1700 1650 0 0.00 1 0.02 5482 99.98
## 3 1700 1800 1750 4 0.07 5 0.09 5482 99.98
## 4 1800 1900 1850 691 12.60 696 12.69 5478 99.91
## 5 1900 2000 1950 4745 86.54 5441 99.23 4787 87.31
## 6 2000 2100 2050 42 0.77 5483 100.00 42 0.77
# ---------------- GRÁFICOS ------------------------
# Histograma agrupado
hist(UltimoAnio,
breaks = breaks,
right = FALSE,
main = "Gráfico No.11: Histograma: Último año de producción (agrupado cada 100 años)",
xlab = "Año",
ylab = "Frecuencia",
col = "orange",
border = "white")
# Ojivas agrupadas - usar punto medio (Mc) para x
x <- TablaAgrupada$Mc
plot(x, TablaAgrupada$Niasc, type = "b", main = "Gráfico No.12: Ojiva Ascendente (Agrupada)",
xlab = "Año (punto medio)", ylab = "Frecuencia acumulada", col = "blue")
plot(x, TablaAgrupada$Nidsc, type = "b", main = "Gráfico No.13: Ojiva Descendente (Agrupada)",
xlab = "Año (punto medio)", ylab = "Frecuencia acumulada", col = "blue")
plot(x, TablaAgrupada$Hiasc, type = "b", main = "Gráfico No.14: Ojiva Ascendente % (Agrupada)",
xlab = "Año (punto medio)", ylab = "% acumulado", col = "blue")
plot(x, TablaAgrupada$Hidsc, type = "b", main = "Gráfico No.15: Ojiva Descendente % (Agrupada)",
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. (Agrupada)",
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. (Agrupada)",
xlab = "Año (punto medio)", ylab = "% acumulado", col = "green")
lines(x, TablaAgrupada$Hidsc, type = "b", col = "blue")
# Boxplot
boxplot(UltimoAnio, horizontal = TRUE, col = "red",
main = "Gráfico No.18: Distribución del último año de producción")
# ---------------- MEDIDAS ESTADÍSTICAS ------------------------
library(moments)
minimo <- min(UltimoAnio, na.rm = TRUE)
maximo <- max(UltimoAnio, na.rm = TRUE)
rango <- maximo - minimo
media <- mean(UltimoAnio, na.rm = TRUE)
mediana <- median(UltimoAnio, na.rm = TRUE)
cuartiles <- quantile(UltimoAnio, probs = c(0.25, 0.5, 0.75), na.rm = TRUE)
varianza <- var(UltimoAnio, na.rm = TRUE)
desviacion <- sd(UltimoAnio, na.rm = TRUE)
coef_var <- desviacion / media * 100
asimetria <- skewness(UltimoAnio, na.rm = TRUE)
curtosis <- kurtosis(UltimoAnio, na.rm = TRUE)
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
print(tabla_horizontal)
## Mínimo Máximo Rango Media Mediana Q1 Q3 Varianza Desv. estándar
## 1 1589 2013 424 1939.364 1943 1918 1962 1134.67 33.68486
## Coef. de variación (%) Asimetría Curtosis
## 1 1.736902 -0.8000225 5.367192
# ---------------- 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 <- UltimoAnio[UltimoAnio < limite_inferior | UltimoAnio > 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
)
print(Tabla_outliers)
## Cantidad.de.outliers Valor.mínimo.de.outliers Valor.máximo.de.outliers
## 1 52 1589 1851
La variable ‘último año de producción’ presenta valores que oscilan entre 1589 y 2013, abarcando un rango temporal de 424 años, lo que refleja la continuidad de la actividad minera desde épocas históricas hasta tiempos recientes. La media es de 1939.36 y la mediana de 1943, evidenciando una ligera asimetría negativa (asimetría = -0.80), asociada a la presencia de yacimientos que finalizaron su producción en fechas tempranas, lo cual desplaza ligeramente la media hacia valores menores.
Los cuartiles Q1 = 1918 y Q3 = 1962 indican que la mayoría de los datos se concentran en un intervalo de 44 años, centrado en el siglo XX, periodo caracterizado por la consolidación industrial, la globalización de mercados y la mayor demanda de recursos minerales. La desviación estándar de 33.68 años muestra una dispersión moderada, mientras que el coeficiente de variación del 1.74% confirma una baja variabilidad relativa con respecto a la media.
Por otro lado, la curtosis elevada (5.37) indica una distribución leptocúrtica, con una alta concentración de valores próximos a la mediana y una presencia no despreciable de valores extremos, especialmente antiguos. En conjunto, estos resultados permiten concluir que la etapa final de explotación de muchos yacimientos se dio de forma masiva entre las décadas de 1920 y 1960, en consonancia con procesos históricos clave como la Segunda Guerra Mundial, el auge industrial y el desarrollo tecnológico de la minería.