Variable Original: x

Nombre Variable: LON

Tipo: Cuantitativa Continua

Escala: Razón

Justificación de la variable: La longitud geográfica permite identificar la distribución espacial este-oeste de las instalaciones mineras en EE.UU. Su análisis revela en qué regiones geográficas se concentra la actividad minera, complementando el análisis de correlación con las emisiones de CO2, NOx y CH4 por estado.


1 Carga de Datos y Librerías

library(dplyr)
library(gt)
library(MASS)
library(e1071)

datos <- read.csv("~/Estudio/TERCER SEMESTRE/Estadistica/Dataset.csv",
                   sep = ";", stringsAsFactors = FALSE)

2 Extraer y Limpiar la Variable

NOTA: la columna x ya viene en grados decimales; solo requiere corrección simple de coma decimal, SIN ninguna división. (Se corrigió un error donde se dividía por 100000, lo cual distorsionaba por completo los valores reales de longitud.)

LON <- as.numeric(gsub(",", ".", datos$x))
LON <- LON[!is.na(LON)]
n <- length(LON)

cat("n validos :", n, "\n")
## n validos : 2996
cat("Min       :", round(min(LON), 3), "grados\n")
## Min       : -165.393 grados
cat("Max       :", round(max(LON), 3), "grados\n")
## Max       : -65.948 grados

3 Tabla de Distribución de Parámetros por Sturges

k  <- ceiling(1 + 3.322 * log10(n))
am <- round((max(LON) - min(LON)) / k, 1)
rango <- max(LON) - min(LON)

parametros_sturges <- data.frame(
  Parametro = c("Rango (R)", "Número de datos (n)",
                "Número de intervalos (k)", "Amplitud de clase (A)"),
  Valor = c(round(rango, 3), n, k, am)
)

parametros_sturges %>%
  gt() %>%
  tab_header(title = md("**Tabla 1**"),
             subtitle = "Parámetros de Sturges para LON") %>%
  tab_source_note(md("Autor: Grupo 4 - Minas"))
Tabla 1
Parámetros de Sturges para LON
Parametro Valor
Rango (R) 99.445
Número de datos (n) 2996.000
Número de intervalos (k) 13.000
Amplitud de clase (A) 7.600
Autor: Grupo 4 - Minas
breaks <- seq(min(LON), min(LON) + k * am, length.out = k + 1)
breaks[length(breaks)] <- max(LON) + 0.001

cortes <- cut(LON, breaks = breaks, include.lowest = TRUE, right = FALSE)
fi     <- as.vector(table(cortes))
fri    <- round(fi / n * 100, 2)
Ni     <- cumsum(fi)
Nd     <- rev(cumsum(rev(fi)))
Hi     <- round(Ni / n * 100, 2)
Hd     <- round(Nd / n * 100, 2)
mc     <- round((breaks[-length(breaks)] + breaks[-1]) / 2, 3)

TDF <- data.frame(
  Desde = round(breaks[-length(breaks)], 3),
  Hasta = round(breaks[-1], 3),
  MC    = mc,
  fi    = fi, fri = fri,
  Ni    = Ni, Nd  = Nd,
  Hi    = Hi, Hd  = Hd
)

TDF %>%
  gt() %>%
  tab_header(
    title    = md("**Tabla 2**"),
    subtitle = md("Distribución de frecuencias — Longitud (x)")
  ) %>%
  cols_label(
    Desde = "Desde (°)", Hasta = "Hasta (°)", MC = "Marca Clase",
    fi = "fi", fri = "fri (%)",
    Ni = "Ni Asc.", Nd = "Ni Desc.",
    Hi = "Hi Asc. %", Hd = "Hi Desc. %"
  ) %>%
  tab_source_note(md("Autor: Grupo 4 - Minas"))
Tabla 2
Distribución de frecuencias — Longitud (x)
Desde (°) Hasta (°) Marca Clase fi fri (%) Ni Asc. Ni Desc. Hi Asc. % Hi Desc. %
-165.393 -157.793 -161.593 4 0.13 4 2996 0.13 100.00
-157.793 -150.193 -153.993 3 0.10 7 2992 0.23 99.87
-150.193 -142.593 -146.393 13 0.43 20 2989 0.67 99.77
-142.593 -134.993 -138.793 1 0.03 21 2976 0.70 99.33
-134.993 -127.393 -131.193 1 0.03 22 2975 0.73 99.30
-127.393 -119.793 -123.593 42 1.40 64 2974 2.14 99.27
-119.793 -112.193 -115.993 175 5.84 239 2932 7.98 97.86
-112.193 -104.593 -108.393 222 7.41 461 2757 15.39 92.02
-104.593 -96.993 -100.793 115 3.84 576 2535 19.23 84.61
-96.993 -89.393 -93.193 219 7.31 795 2420 26.54 80.77
-89.393 -81.793 -85.593 1200 40.05 1995 2201 66.59 73.46
-81.793 -74.193 -77.993 904 30.17 2899 1001 96.76 33.41
-74.193 -65.947 -70.070 97 3.24 2996 97 100.00 3.24
Autor: Grupo 4 - Minas

4 Gráficas de Distribución de Cantidad

par(mar = c(5, 5, 4, 2))
hist(LON, breaks = breaks, col = "#C00000", border = "white",
     main = "Gráfica 1: Frecuencia Absoluta Global — Longitud (x)",
     xlab = "Longitud (°)", ylab = "Frecuencia absoluta")

LON_z <- LON[LON >= -108 & LON <= -60]
if (length(LON_z) > 1) {
  k_z  <- ceiling(1 + 3.322 * log10(length(LON_z)))
  br_z <- seq(min(LON_z), max(LON_z), length.out = k_z + 1)

  par(mar = c(5, 5, 4, 2))
  hist(LON_z, breaks = br_z, col = "#C00000", border = "white",
       main = "Gráfica 2: Rango Principal — Longitud (-108° a -60°)",
       xlab = "Longitud (°)", ylab = "Frecuencia absoluta")

  hist(LON_z, breaks = br_z, col = "#C00000", border = "white",
       freq = FALSE,
       main = "Gráfica 3: Frecuencia Relativa Local — Longitud",
       xlab = "Longitud (°)", ylab = "Densidad")
}

par(mar = c(5, 5, 4, 2))
hist(LON, breaks = breaks, col = "#C00000", border = "white",
     freq = FALSE,
     main = "Gráfica 4: Frecuencia Relativa Global — Longitud (x)",
     xlab = "Longitud (°)", ylab = "Densidad")

h <- hist(LON, breaks = breaks, col = "#C00000", border = "white",
          main = "Gráfica 5: Histograma con Polígono de Frecuencias — Longitud",
          xlab = "Longitud (°)", ylab = "Frecuencia absoluta")
lines(h$mids, h$counts, type = "o", pch = 16, col = "black", lwd = 1.5)

ojiva <- data.frame(mc = mc, Ni = Ni, Nd = Nd)
plot(ojiva$mc, ojiva$Ni, type = "b", col = "black", pch = 16, lwd = 1.5,
     main = "Gráfica 6: Ojivas Combinadas — Longitud (x)",
     xlab = "Longitud (°)", ylab = "Frecuencia acumulada")
lines(ojiva$mc, ojiva$Nd, type = "b", col = "#C00000", pch = 16, lwd = 1.5)
legend("right", legend = c("Ascendente","Descendente"),
       col = c("black","#C00000"), lwd = 2, pch = 16, bty = "n")

boxplot(LON, horizontal = TRUE, col = "#F4CCCC", border = "#7B0000",
        main = "Gráfica 7: Diagrama de Caja — Longitud (x)",
        xlab = "Longitud (°)")

hist(LON, breaks = breaks, col = "lightgray", border = "white",
     main = "Gráfica 8: Histograma con Diagrama de Caja Superpuesto — Longitud",
     xlab = "Longitud (°)", ylab = "Frecuencia absoluta")
boxplot(LON, horizontal = TRUE, add = TRUE,
        at = par("usr")[4] * 0.08, boxwex = par("usr")[4] * 0.06,
        col = rgb(0.75, 0, 0, 0.3), border = "#7B0000", xaxt = "n", yaxt = "n")

5 Modelos Probabilísticos por Agrupación Geográfica

La longitud se agrupó en 3 zonas geográficas, cada una ajustada a un modelo probabilístico distinto según su comportamiento:

# Agrupacion 1: -165° a -100° — Modelo Exponencial
g1     <- LON[LON >= -165 & LON < -100]
g1_pos <- abs(g1) - 100 + 0.001
k1     <- ceiling(1 + 3.322 * log10(max(length(g1), 2)))
br1    <- seq(min(g1), max(g1), length.out = k1 + 1)
lam    <- 1 / mean(g1_pos)

cat("--- Agrupacion 1: -165 a -100 (Alaska y oeste) ---\n")
## --- Agrupacion 1: -165 a -100 (Alaska y oeste) ---
cat("n =", length(g1), "| lambda =", round(lam, 4), "\n")
## n = 488 | lambda = 0.0736
par(mar = c(5, 5, 4, 2))
hist(g1, breaks = br1, col = "#FFC7CE", border = "white", freq = FALSE,
     main = "Gráfica 9: Modelo Exponencial — Longitud (-165° a -100°)",
     xlab = "Longitud (°)", ylab = "Densidad")
curve(dexp(abs(x) - 100 + 0.001, rate = lam), add = TRUE, col = "red", lwd = 2)
legend("topright", legend = c("Histograma","Modelo exponencial"),
       fill = c("#FFC7CE", NA), lty = c(NA,1),
       col = c("black","red"), lwd = c(NA,2), border = c("black",NA), bty = "n")

# Agrupacion 2: -100° a -80° — Modelo Normal
g2   <- LON[LON >= -100 & LON < -80]
mu2  <- mean(g2)
sig2 <- sd(g2)
k2   <- ceiling(1 + 3.322 * log10(length(g2)))
br2  <- seq(min(g2), max(g2), length.out = k2 + 1)

cat("--- Agrupacion 2: -100 a -80 (Centro y Appalachia) ---\n")
## --- Agrupacion 2: -100 a -80 (Centro y Appalachia) ---
cat("n =", length(g2), "| mu =", round(mu2,3), "| sigma =", round(sig2,3), "\n")
## n = 1953 | mu = -84.994 | sigma = 4.865
par(mar = c(5, 5, 4, 2))
hist(g2, breaks = br2, col = "#C6EFCE", border = "white", freq = FALSE,
     main = "Gráfica 10: Modelo Normal — Longitud (-100° a -80°)",
     xlab = "Longitud (°)", ylab = "Densidad")
curve(dnorm(x, mean = mu2, sd = sig2), add = TRUE, col = "darkgreen", lwd = 2)
legend("topright", legend = c("Histograma","Modelo normal"),
       fill = c("#C6EFCE", NA), lty = c(NA,1),
       col = c("black","darkgreen"), lwd = c(NA,2), border = c("black",NA), bty = "n")

# Agrupacion 3: -80° a -65° — Modelo Gamma
g3     <- LON[LON >= -80 & LON <= -65]
g3_pos <- abs(g3) - 65 + 0.001
k3     <- ceiling(1 + 3.322 * log10(length(g3)))
br3    <- seq(min(g3), max(g3), length.out = k3 + 1)
fg     <- fitdistr(g3_pos, "gamma")
## Warning in densfun(x, parm[1], parm[2], ...): Se han producido NaNs
## Warning in densfun(x, parm[1], parm[2], ...): Se han producido NaNs
## Warning in densfun(x, parm[1], parm[2], ...): Se han producido NaNs
sh     <- fg$estimate["shape"]
rt     <- fg$estimate["rate"]

cat("--- Agrupacion 3: -80 a -65 (Costa atlantica este) ---\n")
## --- Agrupacion 3: -80 a -65 (Costa atlantica este) ---
cat("n =", length(g3), "| shape =", round(sh,4), "| rate =", round(rt,4), "\n")
## n = 554 | shape = 15.6911 | rate = 1.3313
par(mar = c(5, 5, 4, 2))
hist(g3, breaks = br3, col = "#DDEBF7", border = "white", freq = FALSE,
     main = "Gráfica 11: Modelo Gamma — Longitud (-80° a -65°)",
     xlab = "Longitud (°)", ylab = "Densidad")
x_g3 <- seq(0.001, max(g3_pos), length.out = 200)
lines(-(x_g3 + 65), dgamma(x_g3, shape = sh, rate = rt), col = "blue", lwd = 2)
legend("topright", legend = c("Histograma","Modelo gamma"),
       fill = c("#DDEBF7", NA), lty = c(NA,1),
       col = c("black","blue"), lwd = c(NA,2), border = c("black",NA), bty = "n")

Tabla 3: Resumen de Modelos Probabilísticos

data.frame(
  Agrupacion = c("-165° a -100°","-100° a -80°","-80° a -65°"),
  n          = c(length(g1), length(g2), length(g3)),
  Pct        = c(round(length(g1)/n*100,1),
                 round(length(g2)/n*100,1),
                 round(length(g3)/n*100,1)),
  Modelo     = c("Exponencial","Normal","Gamma"),
  Parametros = c(paste0("lambda=",round(lam,4)),
                 paste0("mu=",round(mu2,3)," | sigma=",round(sig2,3)),
                 paste0("shape=",round(sh,3)," | rate=",round(rt,3))),
  Region     = c("Alaska y oeste lejano",
                 "Centro y Appalachia",
                 "Costa atlántica este")
) %>%
  gt() %>%
  tab_header(
    title    = md("**Tabla 3**"),
    subtitle = md("Resumen de modelos probabilísticos — Longitud (x)")
  ) %>%
  cols_label(
    Agrupacion="Agrupación", n="n", Pct="% total",
    Modelo="Modelo", Parametros="Parámetros", Region="Región"
  ) %>%
  tab_source_note(md("Autor: Grupo 4 - Minas"))
Tabla 3
Resumen de modelos probabilísticos — Longitud (x)
Agrupación n % total Modelo Parámetros Región
-165° a -100° 488 16.3 Exponencial lambda=0.0736 Alaska y oeste lejano
-100° a -80° 1953 65.2 Normal mu=-84.994 | sigma=4.865 Centro y Appalachia
-80° a -65° 554 18.5 Gamma shape=15.691 | rate=1.331 Costa atlántica este
Autor: Grupo 4 - Minas

6 Indicadores Estadísticos y Outliers

minimo  <- min(LON)
maximo  <- max(LON)
media   <- mean(LON)
mediana <- median(LON)
moda    <- as.numeric(names(sort(table(LON), decreasing = TRUE))[1])
rango2  <- maximo - minimo

varianza <- var(LON)
desv     <- sd(LON)
cv       <- desv / abs(media) * 100
if (cv < 15) {
  interpretacion_cv <- "BAJA (CV < 15%)"
} else if (cv < 30) {
  interpretacion_cv <- "MODERADA (15% <= CV < 30%)"
} else {
  interpretacion_cv <- "ALTA (CV >= 30%)"
}

q1  <- quantile(LON, 0.25)
q2  <- quantile(LON, 0.50)
q3  <- quantile(LON, 0.75)
iqr_val <- q3 - q1
lim_inf <- q1 - 1.5 * iqr_val
lim_sup <- q3 + 1.5 * iqr_val
outliers <- LON[LON < lim_inf | LON > lim_sup]
n_outliers <- length(outliers)
porc_outliers <- round(n_outliers / n * 100, 2)

asimetria <- skewness(LON)
if (abs(asimetria) < 0.5) {
  interpretacion_asimetria <- "Distribución simétrica"
} else if (asimetria > 0) {
  interpretacion_asimetria <- "Asimetría positiva (sesgo a la derecha)"
} else {
  interpretacion_asimetria <- "Asimetría negativa (sesgo a la izquierda)"
}

curtosis <- kurtosis(LON, type = 2)  # excedente (normal = 0)
if (abs(curtosis) < 0.5) {
  interpretacion_curtosis <- "Distribución mesocúrtica (normal)"
} else if (curtosis > 0) {
  interpretacion_curtosis <- "Distribución leptocúrtica (picuda)"
} else {
  interpretacion_curtosis <- "Distribución platicúrtica (aplanada)"
}

Tabla 4: Tendencia Central

data.frame(
  Indicador = c("Mínimo","Media","Mediana","Moda","Máximo","Rango"),
  Valor = round(c(minimo, media, mediana, moda, maximo, rango2), 3),
  Unidad = rep("grados", 6)
) %>%
  gt() %>%
  tab_header(title = md("**Tabla 4**"),
             subtitle = "Indicadores de Tendencia Central — LON") %>%
  tab_source_note(md("Autor: Grupo 4 - Minas"))
Tabla 4
Indicadores de Tendencia Central — LON
Indicador Valor Unidad
Mínimo -165.393 grados
Media -88.160 grados
Mediana -82.804 grados
Moda -82.141 grados
Máximo -65.948 grados
Rango 99.445 grados
Autor: Grupo 4 - Minas

Tabla 5: Dispersión

data.frame(
  Indicador = c("Varianza","Desviación Estándar","Coeficiente de Variación"),
  Valor = c(round(varianza,3), round(desv,3), paste0(round(cv,2),"%")),
  Interpretacion = c("Medida de dispersión al cuadrado",
                      "Dispersión promedio respecto a la media",
                      paste("Dispersión relativa:", interpretacion_cv))
) %>%
  gt() %>%
  tab_header(title = md("**Tabla 5**"),
             subtitle = "Indicadores de Dispersión — LON") %>%
  tab_source_note(md("Autor: Grupo 4 - Minas"))
Tabla 5
Indicadores de Dispersión — LON
Indicador Valor Interpretacion
Varianza 168.287 Medida de dispersión al cuadrado
Desviación Estándar 12.973 Dispersión promedio respecto a la media
Coeficiente de Variación 14.71% Dispersión relativa: BAJA (CV < 15%)
Autor: Grupo 4 - Minas

Tabla 6: Posición y Outliers

data.frame(
  Indicador = c("Cuartil 1 (Q1)","Cuartil 2 (Q2-Mediana)","Cuartil 3 (Q3)",
                "Rango Intercuartílico (IQR)","Límite Inferior Outliers",
                "Límite Superior Outliers","Número de Outliers"),
  Valor = c(round(q1,3), round(q2,3), round(q3,3), round(iqr_val,3),
            round(lim_inf,3), round(lim_sup,3),
            paste0(n_outliers, " (", porc_outliers, "%)"))
) %>%
  gt() %>%
  tab_header(title = md("**Tabla 6**"),
             subtitle = "Indicadores de Posición y Outliers — LON") %>%
  tab_source_note(md("Autor: Grupo 4 - Minas"))
Tabla 6
Indicadores de Posición y Outliers — LON
Indicador Valor
Cuartil 1 (Q1) -91.707
Cuartil 2 (Q2-Mediana) -82.804
Cuartil 3 (Q3) -81.194
Rango Intercuartílico (IQR) 10.513
Límite Inferior Outliers -107.476
Límite Superior Outliers -65.424
Número de Outliers 372 (12.42%)
Autor: Grupo 4 - Minas

Tabla 7: Forma de la Distribución

data.frame(
  Indicador = c("Coeficiente de Asimetría (Fisher)","Interpretación Asimetría",
                "Coeficiente de Curtosis (Excedente)","Interpretación Curtosis"),
  Valor = c(round(asimetria,4), interpretacion_asimetria,
            round(curtosis,4), interpretacion_curtosis)
) %>%
  gt() %>%
  tab_header(title = md("**Tabla 7**"),
             subtitle = "Indicadores de Forma — LON") %>%
  tab_source_note(md("Autor: Grupo 4 - Minas"))
Tabla 7
Indicadores de Forma — LON
Indicador Valor
Coeficiente de Asimetría (Fisher) -1.7628
Interpretación Asimetría Asimetría negativa (sesgo a la izquierda)
Coeficiente de Curtosis (Excedente) 3.5915
Interpretación Curtosis Distribución leptocúrtica (picuda)
Autor: Grupo 4 - Minas

Tabla 8: Resumen Completo

data.frame(
  Categoria = c("Tendencia Central","Tendencia Central","Tendencia Central",
                "Tendencia Central","Tendencia Central","Tendencia Central",
                "Dispersión","Dispersión","Dispersión",
                "Posición","Posición","Posición","Posición",
                "Forma","Forma","Forma","Forma"),
  Indicador = c("Mínimo","Media","Mediana","Moda","Máximo","Rango",
                "Varianza","Desviación Estándar","Coeficiente de Variación",
                "Cuartil 1 (Q1)","Cuartil 2 (Q2)","Cuartil 3 (Q3)","Rango Intercuartílico",
                "Asimetría (g1)","Interpretación Asimetría",
                "Curtosis (g2)","Interpretación Curtosis"),
  Valor = c(round(minimo,3), round(media,3), round(mediana,3), round(moda,3),
            round(maximo,3), round(rango2,3),
            round(varianza,3), round(desv,3), paste0(round(cv,2),"%"),
            round(q1,3), round(q2,3), round(q3,3), round(iqr_val,3),
            round(asimetria,4), interpretacion_asimetria,
            round(curtosis,4), interpretacion_curtosis)
) %>%
  gt() %>%
  tab_header(title = md("**Tabla 8**"),
             subtitle = "Resumen Completo de Indicadores — LON") %>%
  tab_source_note(md("Autor: Grupo 4 - Minas"))
Tabla 8
Resumen Completo de Indicadores — LON
Categoria Indicador Valor
Tendencia Central Mínimo -165.393
Tendencia Central Media -88.16
Tendencia Central Mediana -82.804
Tendencia Central Moda -82.141
Tendencia Central Máximo -65.948
Tendencia Central Rango 99.445
Dispersión Varianza 168.287
Dispersión Desviación Estándar 12.973
Dispersión Coeficiente de Variación 14.71%
Posición Cuartil 1 (Q1) -91.707
Posición Cuartil 2 (Q2) -82.804
Posición Cuartil 3 (Q3) -81.194
Posición Rango Intercuartílico 10.513
Forma Asimetría (g1) -1.7628
Forma Interpretación Asimetría Asimetría negativa (sesgo a la izquierda)
Forma Curtosis (g2) 3.5915
Forma Interpretación Curtosis Distribución leptocúrtica (picuda)
Autor: Grupo 4 - Minas
cat("Numero de valores atipicos:", n_outliers, "\n")
## Numero de valores atipicos: 372
if (n_outliers > 0) {
  cat("Minimo outlier:", round(min(outliers), 3), "grados\n")
  cat("Maximo outlier:", round(max(outliers), 3), "grados\n")
}
## Minimo outlier: -165.393 grados
## Maximo outlier: -107.536 grados

7 Conclusión

conclusion <- sprintf(
"La variable LON registra la longitud geográfica de cada instalación minera. Los valores oscilan entre %.3f° y %.3f°, con media de %.3f° y mediana de %.3f°. El análisis por agrupaciones geográficas muestra tres zonas: Alaska y oeste (-165° a -100°) con %.1f%% de las minas y distribución exponencial (baja densidad, datos dispersos); Centro y Appalachia (-100° a -80°) con %.1f%% de las minas y distribución normal (zona de mayor concentración minera); y Costa atlántica este (-80° a -65°) con %.1f%% de las minas y distribución gamma (asimétrica, cola hacia el este). La mayor concentración en la zona central confirma que Appalachia es el núcleo minero de EE.UU., consistente con los estados que reportan mayores emisiones de CO2, NOx y CH4 en 2018.",
min(LON), max(LON), media, mediana,
round(length(g1)/n*100,1),
round(length(g2)/n*100,1),
round(length(g3)/n*100,1)
)
print(conclusion)
## [1] "La variable LON registra la longitud geográfica de cada instalación minera. Los valores oscilan entre -165.393° y -65.948°, con media de -88.160° y mediana de -82.804°. El análisis por agrupaciones geográficas muestra tres zonas: Alaska y oeste (-165° a -100°) con 16.3% de las minas y distribución exponencial (baja densidad, datos dispersos); Centro y Appalachia (-100° a -80°) con 65.2% de las minas y distribución normal (zona de mayor concentración minera); y Costa atlántica este (-80° a -65°) con 18.5% de las minas y distribución gamma (asimétrica, cola hacia el este). La mayor concentración en la zona central confirma que Appalachia es el núcleo minero de EE.UU., consistente con los estados que reportan mayores emisiones de CO2, NOx y CH4 en 2018."