# 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 Minerales Identificados`)
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

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 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] <= 11){
    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)    0   0.00      0      0    2500     100
## 2    [2 , 3)  259  10.36    259  10.36    2500     100
## 3    [3 , 4)  278  11.12    537  21.48    2241   89.64
## 4    [4 , 5)  299  11.96    836  33.44    1963   78.52
## 5    [5 , 6)  266  10.64   1102  44.08    1664   66.56
## 6    [6 , 7)  271  10.84   1373  54.92    1398   55.92
## 7    [7 , 8)  263  10.52   1636  65.44    1127   45.08
## 8    [8 , 9)  308  12.32   1944  77.76     864   34.56
## 9   [9 , 10)  280  11.20   2224  88.96     556   22.24
## 10 [10 , 11]  276  11.04   2500    100     276   11.04
## 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 minerales identificados 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 minerales identificados en las muestras mineras
Intervalo ni hi Ni_Asc Hi_Asc Ni_Desc Hi_Desc
[1 , 2) 0 0.00 0 0 2500 100
[2 , 3) 259 10.36 259 10.36 2500 100
[3 , 4) 278 11.12 537 21.48 2241 89.64
[4 , 5) 299 11.96 836 33.44 1963 78.52
[5 , 6) 266 10.64 1102 44.08 1664 66.56
[6 , 7) 271 10.84 1373 54.92 1398 55.92
[7 , 8) 263 10.52 1636 65.44 1127 45.08
[8 , 9) 308 12.32 1944 77.76 864 34.56
[9 , 10) 280 11.20 2224 88.96 556 22.24
[10 , 11] 276 11.04 2500 100 276 11.04
TOTAL 2500 100.00 - - - -
Autor: Grupo 2
# Histograma de cantidad

hist(disc, 
     main="Grafica Nº1: Distribución de cantidad del número de minerales identificados",
     col="gray",
     ylab="Cantidad",
     xlab = "Número de minerales identificados",
     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

hist(disc, 
     main="Grafica Nº2: Distribución de cantidad del número de minerales identificados",
     col="gray",
     xlab="Número de minerales identificados",
     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 del número de minerales identificados",
        col="gray", 
        space=0,
        las=1,
        xlab="Número de minerales identificados",
        ylab="Porcentaje",
        names.arg = etiquetas_x,
        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 minerales identificados",
        col = "gray",
        las = 1,
        xlab = "Número de minerales identificados",
        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 del número de minerales identificados\n(Ni)",
     xlab = "Número de minerales identificados",
     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 del número de minerales identificados\n(Hi)",
     xlab = "Número de minerales identificados",
     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 del número de minerales identificados",
        xlab = "Número de minerales identificados")

# Ver los cuartiles

summary(disc)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   2.000   4.000   6.000   6.036   8.000  10.000
# Indicadores Estadisticos

# POSICION

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

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

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

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

Variable<-c("Número de Minerales Identificados")

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 minerales identificados"
)
Tabla N°3. Indicadores estadísticos de la variable número de minerales identificados
Variable minimo máximo x Me sd Cv (%) As K
Número de Minerales Identificados 2 10 6.04 6 2.57 42.62 -0.01 -1.24
# OUTLIERS

outliers <- boxplot.stats(disc)$out

num_outliers <- length(outliers)

minoutliers<-min(outliers)
## Warning in min(outliers): no non-missing arguments to min; returning Inf
minoutliers
## [1] Inf
maxoutliers<-max(outliers)
## Warning in max(outliers): no non-missing arguments to max; returning -Inf
maxoutliers
## [1] -Inf
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 minerales identificados"
)
Tabla N°4: Outliers de la variable número de minerales identificados
Outliers Mínimo Máximo
0 Inf -Inf