Variable Original: CO2 total emissions (tons) by state

Nombre Variable: EMIS_CO2

Tipo: Cuantitativa Continua

0.- Carga de Librerías

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

1.- Carga de Datos

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

2.- Selección de variable

EMIS_CO2 <- as.numeric(gsub(",", ".", datos$CO2.total.emissions..tons..by.state))
## Warning: NAs introducidos por coerción
EMIS_CO2 <- EMIS_CO2[!is.na(EMIS_CO2)]
n <- length(EMIS_CO2)

3.- Frecuencia

min_co2 <- min(EMIS_CO2)
max_co2 <- max(EMIS_CO2)
R <- max_co2 - min_co2

# Número de intervalos mediante la Regla de Sturges
k_detallado <- ceiling(1 + 3.322 * log10(n))

# Amplitud de clase
A <- R / k_detallado

cat("Número de intervalos (k):", k_detallado, "\n")
## Número de intervalos (k): 13
# Generación de límites de intervalo
Li <- seq(from = min_co2, to = max_co2 - A, by = A)
Ls <- c(seq(from = min_co2 + A, to = max_co2 - A, by = A), max_co2)

# Marcas de clase (MC)
MC <- round((Li + Ls) / 2, 2)

# Frecuencias absolutas (ni)
ni <- numeric(length(Li))
for (i in 1:length(Li)) {
  if (i < length(Li)) {
    # Intervalo abierto por la derecha: [Li, Ls)
    ni[i] <- sum(EMIS_CO2 >= Li[i] & EMIS_CO2 < Ls[i])
  } else {
    # Último intervalo cerrado: [Li, Ls]
    ni[i] <- sum(EMIS_CO2 >= Li[i] & EMIS_CO2 <= Ls[i])
  }
}

# Frecuencias relativas y acumuladas
hi <- (ni / n) * 100
Ni_asc  <- cumsum(ni)
Ni_desc <- rev(cumsum(rev(ni)))
Hi_asc  <- cumsum(hi)
Hi_desc <- rev(cumsum(rev(hi)))

# Formatear la columna Intervalo
Intervalo <- paste0("[", round(Li, 2), " - ", round(Ls, 2), ")")
Intervalo[length(Intervalo)] <- paste0("[", round(Li[length(Li)], 2), " - ",
                                        round(Ls[length(Ls)], 2), "]")

# Vector completo de breaks (incluye el límite superior del último
# intervalo) para usar directamente en hist()
breaks_hist <- c(Li, max_co2)

4.- Tabla de distribución de frecuencia

Tabla con regla de Sturges

TDF_co2 <- data.frame(
  Intervalo = Intervalo,
  MC = MC,
  ni = ni,
  hi = round(hi, 2),
  Ni_ascendente = Ni_asc,
  Ni_descendente = Ni_desc,
  Hi_ascendente = round(Hi_asc, 2),
  Hi_descendente = round(Hi_desc, 2)
)

totales <- data.frame(
  Intervalo = "Totales", MC = "-", ni = sum(ni), hi = round(sum(hi), 2),
  Ni_ascendente = "-", Ni_descendente = "-",
  Hi_ascendente = "-", Hi_descendente = "-"
)

TDF_co2_completa <- rbind(TDF_co2, totales)

TDF_co2_completa %>%
  gt() %>%
  tab_header(
    title    = md("Tabla Nro. 1"),
    subtitle = md("Distribución de frecuencia de Emisiones de CO2 (EMIS_CO2) para el análisis de la actividad minera y emisión de gases.")
  ) %>%
  cols_align(align = "center", columns = everything()) %>%
  tab_style(
    style = cell_text(weight = "bold"),
    locations = cells_body(rows = Intervalo == "Totales")
  ) %>%
  tab_source_note(source_note = md("Autor: Luis Cruz"))
Tabla Nro. 1
Distribución de frecuencia de Emisiones de CO2 (EMIS_CO2) para el análisis de la actividad minera y emisión de gases.
Intervalo MC ni hi Ni_ascendente Ni_descendente Hi_ascendente Hi_descendente
[49075.86 - 18001114.42) 9025095.14 174 5.96 174 2921 5.96 100
[18001114.42 - 35953152.97) 26977133.7 468 16.02 642 2747 21.98 94.04
[35953152.97 - 53905191.53) 44929172.25 335 11.47 977 2279 33.45 78.02
[53905191.53 - 71857230.09) 62881210.81 1210 41.42 2187 1944 74.87 66.55
[71857230.09 - 89809268.64) 80833249.37 533 18.25 2720 734 93.12 25.13
[89809268.64 - 107761307.2) 98785287.92 62 2.12 2782 201 95.24 6.88
[107761307.2 - 125713345.76) 116737326.48 23 0.79 2805 139 96.03 4.76
[125713345.76 - 143665384.32) 134689365.04 0 0.00 2805 116 96.03 3.97
[143665384.32 - 161617422.87) 152641403.59 0 0.00 2805 116 96.03 3.97
[161617422.87 - 179569461.43) 170593442.15 0 0.00 2805 116 96.03 3.97
[179569461.43 - 197521499.99) 188545480.71 0 0.00 2805 116 96.03 3.97
[197521499.99 - 215473538.54) 206497519.26 0 0.00 2805 116 96.03 3.97
[215473538.54 - 233425577.1] 224449557.82 116 3.97 2921 116 100 3.97
Totales - 2921 100.00 - - - -
Autor: Luis Cruz

Tabla de intervalos reducidos

brks2 <- pretty(EMIS_CO2, n = 10)
Li2   <- brks2[-length(brks2)]
Ls2   <- brks2[-1]
MC2   <- (Li2 + Ls2) / 2

ni2 <- numeric(length(Li2))
for (i in 1:length(Li2)) {
  if (i < length(Li2)) {
    ni2[i] <- sum(EMIS_CO2 >= Li2[i] & EMIS_CO2 < Ls2[i])
  } else {
    ni2[i] <- sum(EMIS_CO2 >= Li2[i] & EMIS_CO2 <= Ls2[i])
  }
}

hi2      <- (ni2 / n) * 100
Ni2_asc  <- cumsum(ni2)
Ni2_desc <- rev(cumsum(rev(ni2)))
Hi2_asc  <- cumsum(hi2)
Hi2_desc <- rev(cumsum(rev(hi2)))

Intervalo2 <- paste0("[", format(round(Li2, 0), big.mark = ","), " - ",
                          format(round(Ls2, 0), big.mark = ","), ")")
Intervalo2[length(Intervalo2)] <- paste0(
  "[", format(round(Li2[length(Li2)], 0), big.mark = ","), " - ",
       format(round(Ls2[length(Ls2)], 0), big.mark = ","), "]")

TDF_co2_10 <- data.frame(
  Intervalo = Intervalo2,
  MC = round(MC2, 0),
  ni = ni2,
  hi = round(hi2, 2),
  Ni_ascendente = Ni2_asc,
  Ni_descendente = Ni2_desc,
  Hi_ascendente = round(Hi2_asc, 2),
  Hi_descendente = round(Hi2_desc, 2)
)

totales2 <- data.frame(
  Intervalo = "Totales", MC = "-", ni = sum(ni2), hi = round(sum(hi2), 2),
  Ni_ascendente = "-", Ni_descendente = "-",
  Hi_ascendente = "-", Hi_descendente = "-"
)

TDF_co2_10_completa <- rbind(TDF_co2_10, totales2)

TDF_co2_10_completa %>%
  gt() %>%
  tab_header(
    title    = md("Tabla Nro. 2"),
    subtitle = md("Distribución de frecuencia de Emisiones de CO2 (EMIS_CO2), intervalos reducidos.")
  ) %>%
  cols_align(align = "center", columns = everything()) %>%
  tab_style(
    style = cell_text(weight = "bold"),
    locations = cells_body(rows = Intervalo == "Totales")
  ) %>%
  tab_source_note(source_note = md("Autor: Luis Cruz"))
Tabla Nro. 2
Distribución de frecuencia de Emisiones de CO2 (EMIS_CO2), intervalos reducidos.
Intervalo MC ni hi Ni_ascendente Ni_descendente Hi_ascendente Hi_descendente
[0.0e+00 - 2.0e+07) 1e+07 209 7.16 209 2921 7.16 100
[2.0e+07 - 4.0e+07) 3e+07 556 19.03 765 2712 26.19 92.84
[4.0e+07 - 6.0e+07) 5e+07 346 11.85 1111 2156 38.03 73.81
[6.0e+07 - 8.0e+07) 7e+07 1109 37.97 2220 1810 76 61.97
[8.0e+07 - 1.0e+08) 9e+07 562 19.24 2782 701 95.24 24
[1.0e+08 - 1.2e+08) 1.1e+08 23 0.79 2805 139 96.03 4.76
[1.2e+08 - 1.4e+08) 1.3e+08 0 0.00 2805 116 96.03 3.97
[1.4e+08 - 1.6e+08) 1.5e+08 0 0.00 2805 116 96.03 3.97
[1.6e+08 - 1.8e+08) 1.7e+08 0 0.00 2805 116 96.03 3.97
[1.8e+08 - 2.0e+08) 1.9e+08 0 0.00 2805 116 96.03 3.97
[2.0e+08 - 2.2e+08) 2.1e+08 0 0.00 2805 116 96.03 3.97
[2.2e+08 - 2.4e+08] 2.3e+08 116 3.97 2921 116 100 3.97
Totales - 2921 100.00 - - - -
Autor: Luis Cruz

5.- Gráficos de distribución de frecuencia

Histogramas de cantidad

Histograma general

par(mar = c(5, 5, 4, 2))
hist(EMIS_CO2, breaks = breaks_hist,
     main = "Gráfica Nro. 1\nDistribución de EMIS_CO2 en instalaciones\nmineras de Estados Unidos",
     xlab = "Emisiones de CO2 (toneladas)", ylab = "Cantidad",
     col = "#2E75B6", border = "white",
     cex.main = 0.9)

Histograma con relación al todo

par(mar = c(5, 5, 4, 2))
hist(EMIS_CO2, breaks = breaks_hist,
     main = "Gráfica Nro. 2\nDistribución de EMIS_CO2 en instalaciones\nmineras de Estados Unidos",
     xlab = "Emisiones de CO2 (toneladas)", ylab = "Cantidad",
     col = "#2E75B6", border = "white",
     ylim = c(0, n),
     cex.main = 0.9)

Histogramas Porcentuales

Histograma porcentual general

par(mar = c(5, 5, 4, 2))
barplot(hi2,
        names.arg = round(MC2, 0),
        main = "Gráfica Nro. 3\nDistribución porcentual de EMIS_CO2 en instalaciones\nmineras de Estados Unidos",
        xlab = "Emisiones de CO2 (toneladas)", ylab = "Porcentaje (%)",
        col = "#AEC6E8", border = "black",
        las = 2, cex.names = 0.7,
        ylim = c(0, max(hi2) + 5))

Histograma porcentual con relación al todo

par(mar = c(5, 5, 4, 2))
barplot(hi2,
        names.arg = round(MC2, 0),
        main = "Gráfica Nro. 4\nDistribución porcentual de EMIS_CO2 en instalaciones\nmineras de Estados Unidos",
        xlab = "Emisiones de CO2 (toneladas)", ylab = "Porcentaje (%)",
        col = "#AEC6E8", border = "black",
        las = 2, cex.names = 0.7,
        ylim = c(0, 100))

Diagrama de caja y bigotes

options(scipen = 999)
boxplot(EMIS_CO2,
        horizontal = TRUE,
        main = "Gráfica Nro. 5\nDistribución de EMIS_CO2 en instalaciones\nmineras de Estados Unidos",
        xlab = "Emisiones de CO2 (toneladas)",
        col = "turquoise3",
        pch = 1)

Diagrama de Ojivas

par(mar = c(5, 5, 4, 2))
plot(MC2, Ni2_asc,
     type = "b", pch = 16, lwd = 2, col = "turquoise3",
     main = "Gráfica Nro. 6\nOjiva ascendente y descendente de\nEMIS_CO2",
     xlab = "Emisiones de CO2 (toneladas)", ylab = "Cantidad",
     ylim = c(0, n))
lines(MC2, Ni2_desc, type = "b", pch = 16, lwd = 1, col = "black")
legend("right", legend = c("Ascendente","Descendente"),
       col = c("turquoise3","black"), lwd = 2, pch = 16, bty = "n", cex = 0.8)
grid()
box()

par(mar = c(5, 5, 4, 2))
plot(MC2, Hi2_asc,
     type = "b", pch = 16, lwd = 2, col = "turquoise3",
     main = "Gráfica Nro. 7\nOjiva porcentual ascendente y descendente de\nEMIS_CO2",
     xlab = "Emisiones de CO2 (toneladas)", ylab = "Porcentaje (%)",
     ylim = c(0, 100))
lines(MC2, Hi2_desc, type = "b", pch = 16, lwd = 1, col = "black")
legend("right", legend = c("Ascendente","Descendente"),
       col = c("turquoise3","black"), lwd = 2, pch = 16, bty = "n", cex = 0.8)
grid()
box()

6.- Indicadores Estadísticos

X  <- mean(EMIS_CO2)
Me <- median(EMIS_CO2)

# Moda: marca de clase del intervalo con mayor ni (tabla reducida)
moda_idx <- which.max(ni2)
Mo <- round(MC2[moda_idx], 2)

desv <- sd(EMIS_CO2)
V    <- var(EMIS_CO2)
CV   <- round((desv / X) * 100, 2)

As <- skewness(EMIS_CO2, type = 2)
K  <- kurtosis(EMIS_CO2, type = 2)

# Outliers (regla de Tukey, 1.5*IQR) — se usan en la conclusión
q1 <- quantile(EMIS_CO2, 0.25)
q3 <- quantile(EMIS_CO2, 0.75)
iqr_val <- q3 - q1
lim_inf <- q1 - 1.5 * iqr_val
lim_sup <- q3 + 1.5 * iqr_val
outliers <- EMIS_CO2[EMIS_CO2 < lim_inf | EMIS_CO2 > lim_sup]
n_outliers <- length(outliers)
porc_outliers <- round(n_outliers / n * 100, 2)

Tabla_indicadores <- data.frame(
  Variable = "EMIS_CO2",
  Rango    = paste0("[", round(min_co2, 2), " - ", round(max_co2, 2), "]"),
  Media    = round(X, 2),
  Mediana  = round(Me, 2),
  Moda     = Mo,
  DesvEst  = round(desv, 2),
  CV       = CV,
  Asimetria = round(As, 4),
  Curtosis  = round(K, 4)
)

Tabla_indicadores %>%
  gt() %>%
  cols_label(
    Variable = "Variable", Rango = "Rango",
    Media = "Media (X)", Mediana = "Mediana (Me)", Moda = "Moda (Mo)",
    DesvEst = "Desv. Est. (sd)", CV = "CV (%)",
    Asimetria = "Asimetría (As)", Curtosis = "Curtosis (K)"
  ) %>%
  tab_header(
    title    = md("Tabla Nro. 3"),
    subtitle = md("Indicadores Estadísticos de EMIS_CO2 para el análisis de la actividad minera y emisión de gases.")
  ) %>%
  tab_spanner(label = "Tendencia Central", columns = c(Media, Mediana, Moda)) %>%
  tab_spanner(label = "Dispersión", columns = c(DesvEst, CV)) %>%
  tab_spanner(label = "Forma", columns = c(Asimetria, Curtosis)) %>%
  cols_align(align = "center", columns = everything()) %>%
  tab_source_note(source_note = md("Autor: Luis Cruz"))
Tabla Nro. 3
Indicadores Estadísticos de EMIS_CO2 para el análisis de la actividad minera y emisión de gases.
Variable Rango
Tendencia Central
Dispersión
Forma
Media (X) Mediana (Me) Moda (Mo) Desv. Est. (sd) CV (%) Asimetría (As) Curtosis (K)
EMIS_CO2 [49075.86 - 233425577.1] 65592227 65429381 70000000 41074759 62.62 2.4682 8.4536
Autor: Luis Cruz

7.- Conclusión

En conclusión:

La variable EMIS_CO2 fluctúa entre un mínimo de 49075.86 y un máximo de 233425577.1 toneladas, con una media de 65592226.5 y una desviación estándar de 41074759.24. Debido a un coeficiente de variación del 62.62%, se concluye que es un conjunto de valores heterogéneo entre estados, con una distribución de asimetría positiva (2.4682). Se han detectado 116 valores atípicos (3.97% del total), correspondientes a los estados con mayor concentración de actividad minera.