# CARGA DE DATOS

library(readxl)

datos <- read_excel("D:/dataset_variables_discretas_mineria.xlsx")

# Extraer y dejar solo datos válidos 

disc <- as.numeric(datos$`Número de métodos analíticos empleados`)
disc <- na.omit(disc)  

# CARGA DE LIBRERIAS

#Carga de librerias
library(gt)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(knitr)
library(e1071)

#Agrupar la variable en intervalos (Modificado hasta el 6)

clasificacion <- character(length(disc))

for(i in seq_along(disc)){
  if(disc[i] >= 1 & disc[i] < 2){
    clasificacion[i] <- "[1 , 2)"
  } else if(disc[i] >= 2 & disc[i] < 3){
    clasificacion[i] <- "[2 , 3)"
  } else if(disc[i] >= 3 & disc[i] < 4){
    clasificacion[i] <- "[3 , 4)"
  } else if(disc[i] >= 4 & disc[i] < 5){
    clasificacion[i] <- "[4 , 5)"
  } else if(disc[i] >= 5 & disc[i] <= 6){
    clasificacion[i] <- "[5 , 6]"
  } else {
    clasificacion[i] <- NA
  }
}

# Quitar posibles NA de la clasificación
clasificacion <- na.omit(clasificacion)

#Orden adecuado

orden <- c("[1 , 2)",
           "[2 , 3)",
           "[3 , 4)",
           "[4 , 5)",
           "[5 , 6]")

clasificacion <- factor(clasificacion, levels = orden)

# 4) Frecuencias simples
ni <- table(clasificacion)
total <- sum(ni)
hi <- round (as.numeric(ni) / total * 100,2) 

# 5) Acumuladas ascendente
Ni_Asc <- cumsum(ni)
Hi_Asc <- cumsum(hi)

# 6) Acumuladas descendente
Ni_Desc <- rev(cumsum(rev(ni)))
Hi_Desc <- rev(cumsum(rev(hi)))

# 7) Tabla final 
tabla_final <- data.frame(
  Intervalo = orden,
  ni = as.numeric(ni),
  hi = hi,
  Ni_Asc = as.numeric(Ni_Asc),
  Hi_Asc = round(Hi_Asc, 3),
  Ni_Desc = as.numeric(Ni_Desc),
  Hi_Desc = round(Hi_Desc, 3)
)

# Verificar que las proporciones sumen 100
sum(tabla_final$hi) 
## [1] 100
tail(tabla_final$Hi_Asc,1)  
## [1] 100
head(tabla_final$Hi_Desc,1) 
## [1] 100
# Calcular sumatorias simples
suma_ni <- sum(tabla_final$ni)
suma_hi <- sum(tabla_final$hi)

# Crear fila total
fila_total <- data.frame(
  Intervalo = "TOTAL",
  ni = suma_ni,
  hi = round((suma_hi),2),
  Ni_Asc = "-",
  Hi_Asc = "-",
  Ni_Desc = "-",
  Hi_Desc = "-"
)

# Unir a la tabla
tabla_final <- rbind(tabla_final, fila_total)

tabla_final
##   Intervalo   ni     hi Ni_Asc Hi_Asc Ni_Desc Hi_Desc
## 1   [1 , 2)  429  17.16    429  17.16    2500     100
## 2   [2 , 3)  453  18.12    882  35.28    2071   82.84
## 3   [3 , 4)  399  15.96   1281  51.24    1618   64.72
## 4   [4 , 5)  420  16.80   1701  68.04    1219   48.76
## 5   [5 , 6]  799  31.96   2500    100     799   31.96
## 6     TOTAL 2500 100.00      -      -       -       -
# TABLA GT
TablaDisc <- tabla_final %>%
  gt() %>%
  tab_header(
    title = md("*Tabla Nº. 1*"),
    subtitle = md("**Tabla de distribución del número de métodos analíticos empleados en las muestras mineras**")
  ) %>%
  tab_source_note(
    source_note = md("__Autor: Grupo 2__")
  ) %>%
  tab_options(
    table.border.top.color = "black",
    table.border.bottom.color = "black",
    table.border.top.style = "solid",
    table.border.bottom.style = "solid",
    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),
    table_body.hlines.color = "gray",
    table_body.border.bottom.color = "black"
  ) %>%
  tab_style(
    style = cell_text(weight = "bold"),
    locations = cells_body(
      rows = Intervalo == "TOTAL"   
    )
  )

TablaDisc
Tabla Nº. 1
Tabla de distribución del número de métodos analíticos empleados en las muestras mineras
Intervalo ni hi Ni_Asc Hi_Asc Ni_Desc Hi_Desc
[1 , 2) 429 17.16 429 17.16 2500 100
[2 , 3) 453 18.12 882 35.28 2071 82.84
[3 , 4) 399 15.96 1281 51.24 1618 64.72
[4 , 5) 420 16.80 1701 68.04 1219 48.76
[5 , 6] 799 31.96 2500 100 799 31.96
TOTAL 2500 100.00 - - - -
Autor: Grupo 2
# Histograma de cantidad

hist(disc, 
     main="Grafica Nº1: Distribución de cantidad del número de métodos analíticos empleados",
     col="gray",
     ylab="Cantidad",
     xlab = "Número de métodos analíticos empleados"
     )

# Histograma de cantidad

hist(disc, 
     main="Grafica Nº2: Distribución de cantidad del número de métodos analíticos empleados",
     col="gray",
     xlab="Número de métodos analíticos empleados",
     ylab="Cantidad",
     ylim=c(0,800))

# Histograma de cantidad en porcentaje

hi_plot <- tabla_final$hi[tabla_final$Intervalo != "TOTAL"]

barplot(hi_plot,
        main = "Grafica Nº3: Distribución porcentual del número de métodos analíticos empleados",
        col="gray", 
        space=0,
        las=1,
        xlab="Número de métodos analíticos empleados",
        ylab="Porcentaje",
        names.arg = orden, # Se cambian las etiquetas numéricas fijas por los intervalos reales
        cex.names = 0.6)

# Histograma de cantidad en porcentaje

# Filtrar los datos SIN la fila TOTAL
hi_plot <- tabla_final$hi[tabla_final$Intervalo != "TOTAL"]

barplot(hi_plot,
        space = 0,
        main="Grafica Nº4: Distribución porcentual del número de métodos analíticos empleados",
        col = "gray",
        las = 1,
        xlab = "Número de métodos analíticos empleados",
        ylab = "Porcentaje",
        names.arg = orden, # Se cambian las etiquetas numéricas fijas por los intervalos reales
        ylim = c(0,100),
        cex.names = 0.6)

# Ojivas combinadas Ni

x_intervalos <- c(1, 2, 3, 4, 5)

plot(x = x_intervalos,
     y = Ni_Asc,
     type = "o",
     col = "blue",
     main = "Grafica Nº5: Ojiva combinada del número de métodos analíticos empleados\n(Ni)",
     xlab = "Intervalos de métodos analíticos empleados",
     ylab = "Cantidad acumulada (Ni)",
     xaxt = "n", # Oculta el eje X por defecto para personalizarlo
     las = 2
)
# Forzar a que el eje X muestre correctamente los límites 
axis(1, at = x_intervalos, labels = orden, cex.axis = 0.7)

lines(x = x_intervalos,
      y = Ni_Desc,
      type = "o",
      col = "red")

# Ojivas combinadas Hi

plot(x = x_intervalos,
     y = Hi_Asc,
     type = "o",
     col = "blue",
     main = "Grafica Nº6: Ojiva combinada del número de métodos analíticos empleados\n(Hi)",
     xlab = "Intervalos de métodos analíticos empleados",
     ylab = "Porcentaje acumulado (Hi)",
     xaxt = "n", # Oculta el eje X por defecto para personalizarlo
     las = 2,
     ylim = c(0, 100)
)
# Forzar a que el eje X muestre correctamente los límites 
axis(1, at = x_intervalos, labels = orden, cex.axis = 0.7)

lines(x = x_intervalos,
      y = Hi_Desc,
      type = "o",
      col = "black")

# DIAGRAMA DE CAJA

boxplot(disc,
        horizontal = TRUE,
        col = "blue",
        main = "Gráfica Nº7: Distribución del número de métodos analíticos empleados",
        xlab = "Número de métodos analíticos empleados")

# Ver los cuartiles

summary(disc)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1.00    2.00    3.00    3.45    5.00    6.00
# Indicadores Estadisticos

# POSICION

#MEDIA ARITMETICA
x<-mean(disc)
x
## [1] 3.4496
#MEDIANA ARITMETICA

ri<-min(disc)
rs<-max(disc)
Me<-median(disc)
Me
## [1] 3
# DISPERSION

#DESVIACIÓN ESTÁNDAR
sd<-sd(disc)
sd
## [1] 1.716694
#COEFICIENTE DE VARIACIÓN
CV <- ((sd / x) * 100)
CV
## [1] 49.76502
# FORMA

#COEFICIENTE DE ASIMETRÍA
As<-skewness(disc)
As
## [1] 0.05450348
#COEFICIENTE DE CURTOSIS
K<-kurtosis(disc)
K
## [1] -1.27971
# TABLA DE INDICADORES ESTADISTICOS

Variable<-c("Número de métodos analíticos empleados")

TablaIndicadores<-data.frame(
  Variable,
  ri,
  rs,
  round(x,2),
  Me,
  round(sd,2), 
  round(CV,2), 
  round(As,2),
  round(K,2)
)

colnames(TablaIndicadores)<-c(
  "Variable",
  "minimo",
  "máximo",
  "x",
  "Me",
  "sd",
  "Cv (%)",
  "As",
  "K"
)

kable(
  TablaIndicadores,
  format = "markdown",
  caption = "Tabla N°3. Indicadores estadísticos de la variable número de métodos analíticos empleados"
)
Tabla N°3. Indicadores estadísticos de la variable número de métodos analíticos empleados
Variable minimo máximo x Me sd Cv (%) As K
Número de métodos analíticos empleados 1 6 3.45 3 1.72 49.77 0.05 -1.28
# ==============================================================================
# OUTLIERS (CORREGIDO PARA EVITAR INF / -INF)
# ==============================================================================

outliers <- boxplot.stats(disc)$out
num_outliers <- length(outliers)

# Si NO hay outliers, asignamos un guion en lugar de dejar que calcule min/max
if (num_outliers == 0) {
  minoutliers <- "-"
  maxoutliers <- "-"
} else {
  minoutliers <- min(outliers)
  maxoutliers <- max(outliers)
}

# Crear la tabla final de Outliers con los valores corregidos
TablaOutliers <- data.frame(num_outliers, minoutliers, maxoutliers)
colnames(TablaOutliers) <- c("Outliers", "Mínimo", "Máximo")

kable(
  TablaOutliers,
  format = "markdown",
  caption = "Tabla N°4: Outliers de la variable número de métodos analíticos empleados"
)
Tabla N°4: Outliers de la variable número de métodos analíticos empleados
Outliers Mínimo Máximo
0 - -