# 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$`Cantidad de elementos No Detectados`)
disc <- na.omit(disc)  

# 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

clasificacion <- character(length(disc))

for(i in seq_along(disc)){
  if(disc[i] >= 0 & 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 if(disc[i] >= 6 & disc[i] < 7){
    clasificacion[i] <- "[6 , 7)"
  } else if(disc[i] >= 7 & disc[i] < 8){
    clasificacion[i] <- "[7 , 8)"
  } else if(disc[i] >= 8 & disc[i] < 9){
    clasificacion[i] <- "[8 , 9)"
  } else if(disc[i] >= 9 & disc[i] < 10){
    clasificacion[i] <- "[9 , 10)"
  } else if(disc[i] >= 10 & disc[i] <= 12){
    clasificacion[i] <- "[10 , 11]"
  } 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)",
           "[6 , 7)",
           "[7 , 8)",
           "[8 , 9)",
           "[9 , 10)",
           "[10 , 11]")

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)  247   9.88    247   9.88    2500     100
## 2    [2 , 3)  338  13.52    585   23.4    2253   90.12
## 3    [3 , 4)  523  20.92   1108  44.32    1915    76.6
## 4    [4 , 5)  482  19.28   1590   63.6    1392   55.68
## 5    [5 , 6)  391  15.64   1981  79.24     910    36.4
## 6    [6 , 7)  273  10.92   2254  90.16     519   20.76
## 7    [7 , 8)  136   5.44   2390   95.6     246    9.84
## 8    [8 , 9)   63   2.52   2453  98.12     110     4.4
## 9   [9 , 10)   32   1.28   2485   99.4      47    1.88
## 10 [10 , 11]   15   0.60   2500    100      15     0.6
## 11     TOTAL 2500 100.00      -      -       -       -
# TABLA GT
TablaDisc <- tabla_final %>%
  gt() %>%
  tab_header(
    title = md("*Tabla Nº. 1*"),
    subtitle = md("**Tabla de distribución de la cantidad de elementos no detectados 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 de la cantidad de elementos no detectados en las muestras mineras
Intervalo ni hi Ni_Asc Hi_Asc Ni_Desc Hi_Desc
[1 , 2) 247 9.88 247 9.88 2500 100
[2 , 3) 338 13.52 585 23.4 2253 90.12
[3 , 4) 523 20.92 1108 44.32 1915 76.6
[4 , 5) 482 19.28 1590 63.6 1392 55.68
[5 , 6) 391 15.64 1981 79.24 910 36.4
[6 , 7) 273 10.92 2254 90.16 519 20.76
[7 , 8) 136 5.44 2390 95.6 246 9.84
[8 , 9) 63 2.52 2453 98.12 110 4.4
[9 , 10) 32 1.28 2485 99.4 47 1.88
[10 , 11] 15 0.60 2500 100 15 0.6
TOTAL 2500 100.00 - - - -
Autor: Grupo 2
# Histograma de cantidad

hist(disc, 
     main="Grafica Nº1: Distribución de cantidad de elementos no detectados",
     col="gray",
     ylab="Cantidad",
     xlab = "Cantidad de elementos no detectados",
     cex.names = 0.6)
## Warning in plot.window(xlim, ylim, log, ...): "cex.names" is not a graphical
## parameter
## Warning in title(main = main, sub = sub, xlab = xlab, ylab = ylab, ...):
## "cex.names" is not a graphical parameter
## Warning in axis(1, ...): "cex.names" is not a graphical parameter
## Warning in axis(2, at = yt, ...): "cex.names" is not a graphical parameter

# Histograma de cantidad con límite en Y

hist(disc, 
     main="Grafica Nº2: Distribución de cantidad de elementos no detectados",
     col="gray",
     xlab="Cantidad de elementos no detectados",
     ylab="Cantidad",
     cex.names = 0.6,
     ylim=c(0,800))
## Warning in plot.window(xlim, ylim, log, ...): "cex.names" is not a graphical
## parameter
## Warning in title(main = main, sub = sub, xlab = xlab, ylab = ylab, ...):
## "cex.names" is not a graphical parameter
## Warning in axis(1, ...): "cex.names" is not a graphical parameter
## Warning in axis(2, at = yt, ...): "cex.names" is not a graphical parameter

# Histograma de cantidad en porcentaje

etiquetas_x <- c(1,2,3,4,5,6,7,8,9,10)

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

barplot(hi_plot,
        main = "Grafica Nº3: Distribución porcentual de la cantidad de elementos no detectados",
        col="gray", 
        space=0,
        las=1,
        xlab="Cantidad de elementos no detectados",
        ylab="Porcentaje",
        names.arg = etiquetas_x,
        cex.names = 0.6)

# Histograma de cantidad en porcentaje con límite en Y

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

barplot(hi_plot,
        space = 0,
        main="Grafica Nº4: Distribución porcentual de la cantidad de elementos no detectados",
        col = "gray",
        las = 1,
        xlab = "Cantidad de elementos no detectados",
        ylab = "Porcentaje",
        names.arg = etiquetas_x,
        ylim = c(0,100),
        cex.names = 0.6)

# Ojivas combinadas Ni

x_intervalos <- c(1,2,3,4,5,6,7,8,9,10)

plot(x = x_intervalos,
     y = Ni_Asc,
     type = "o",
     col = "blue",
     main = "Grafica Nº5: Ojiva combinada de la cantidad de elementos no detectados\n(Ni)",
     xlab = "Cantidad de elementos no detectados",
     ylab = "Cantidad acumulada (Ni)",
     las = 2
)

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 de la cantidad de elementos no detectados\n(Hi)",
     xlab = "Cantidad de elementos no detectados",
     ylab = "Porcentaje acumulado (Hi)",
     las = 2,
     ylim = c(0, 100)
)

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 de la cantidad de elementos no detectados",
        xlab = "Cantidad de elementos no detectados")

# Ver los cuartiles

summary(disc)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.000   3.000   4.000   3.941   5.000  12.000
# Indicadores Estadisticos

# POSICION

# MEDIA ARITMETICA
x <- mean(disc)
x
## [1] 3.9408
# MEDIANA ARITMETICA
ri <- min(disc)
rs <- max(disc)
Me <- median(disc)
Me
## [1] 4
# DISPERSION

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

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

Variable <- c("Cantidad de elementos No Detectados")

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 cantidad de elementos no detectados"
)
Tabla N°3. Indicadores estadísticos de la variable cantidad de elementos no detectados
Variable minimo máximo x Me sd Cv (%) As K
Cantidad de elementos No Detectados 0 12 3.94 4 1.96 49.82 0.41 0.11
# OUTLIERS

outliers <- boxplot.stats(disc)$out

num_outliers <- length(outliers)

minoutliers <- min(outliers)
minoutliers
## [1] 9
maxoutliers <- max(outliers)
maxoutliers
## [1] 12
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 cantidad de elementos no detectados"
)
Tabla N°4: Outliers de la variable cantidad de elementos no detectados
Outliers Mínimo Máximo
47 9 12