# 1. CARGA DE LIBRERÍAS Y DATOS
library(dplyr)
## 
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(e1071)
library(knitr)

setwd("C:/Users/HP/Documents/PROYECTO ESTADISTICA/RStudio")
datos <- read.csv("tablap.csv", header = TRUE, dec = ",", sep = ";")


#TABLA DE DISTRIBUCION DE CANTIDAD POR STURGES#

# 1. Limpieza y preparación de la variable

acero <- as.numeric(datos$Impact.steel.production..pad.)
acero <- na.omit(acero)
acero <- subset(acero, acero >= 0)

# TABLA DE DISTRIBUCIÓN DE CANTIDAD POR STURGES 

# Calculamos el número de datos
n <- length(acero)

# Número de clases con Sturges
k <- floor(1 + 3.3 * log10(n))

# Min, Max 
minimo <- min(acero)
maximo <- max(acero)

# Rango
R <- maximo - minimo

# Amplitud
A <- R / k

# Límites inferior (Li) y superior (Ls)
Li <- round(seq(from = minimo, to = maximo - A, by = A), 2)
Ls <- round(seq(from = minimo + A, to = maximo, by = A), 2)

# Sincronización de longitudes 
if(length(Ls) > length(Li)) Ls <- Ls[1:length(Li)]
if(length(Li) > length(Ls)) Li <- Li[1:length(Ls)]

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

# Frecuencia Absoluta (ni)
ni <- numeric(length(Li))
for (i in 1:length(Li)) {
  ni[i] <- sum(acero >= Li[i] & acero < Ls[i])
}
# Ajuste para el último intervalo
ni[length(Li)] <- sum(acero >= Li[length(Li)] & acero <= maximo)

# Frecuencia Relativa (hi)
hi <- (ni / sum(ni)) * 100

# Frecuencias Acumuladas
Niasc <- cumsum(ni)
Nidsc <- rev(cumsum(rev(ni)))
Hiasc <- round(cumsum(hi), 2)
Hidsc <- round(rev(cumsum(rev(hi))), 2)

# TABLA FINAL
TDF_acero <- round(data.frame(
  Li, Ls, MC, ni, hi, Niasc, Nidsc, Hiasc, Hidsc
), 2)

# Visualizar Tabla
TDF_acero
##           Li        Ls        MC   ni    hi Niasc Nidsc  Hiasc  Hidsc
## 1   79121.28  95664.74  87393.01   26  0.21    26 12561   0.21 100.00
## 2   95664.74 112208.19 103936.46  437  3.48   463 12535   3.69  99.79
## 3  112208.19 128751.64 120479.92 1574 12.53  2037 12098  16.22  96.31
## 4  128751.64 145295.09 137023.36 2542 20.24  4579 10524  36.45  83.78
## 5  145295.09 161838.55 153566.82 3018 24.03  7597  7982  60.48  63.55
## 6  161838.55 178382.00 170110.28 2580 20.54 10177  4964  81.02  39.52
## 7  178382.00 194925.45 186653.72 1387 11.04 11564  2384  92.06  18.98
## 8  194925.45 211468.90 203197.17  613  4.88 12177   997  96.94   7.94
## 9  211468.90 228012.36 219740.63  237  1.89 12414   384  98.83   3.06
## 10 228012.36 244555.81 236284.08  103  0.82 12517   147  99.65   1.17
## 11 244555.81 261099.26 252827.54   28  0.22 12545    44  99.87   0.35
## 12 261099.26 277642.71 269370.98   10  0.08 12555    16  99.95   0.13
## 13 277642.71 294186.17 285914.44    3  0.02 12558     6  99.98   0.05
## 14 294186.17 310729.62 302457.90    3  0.02 12561     3 100.00   0.02
#Fila total de las sumas de ni y hi#
# FILA TOTAL
fila_total_acero <- data.frame(
  Li = "TOTAL",
  Ls = "",
  MC = "",
  ni = sum(TDF_acero$ni),
  hi = round(sum(TDF_acero$hi), 2),
  Niasc = "",
  Nidsc = "",
  Hiasc = "",
  Hidsc = ""
)

# TABLA FINAL (Unión de la tabla con los totales)
TDF_acero_p <- rbind(TDF_acero, fila_total_acero)

# Visualizar el resultado en consola
print(TDF_acero_p)
##           Li        Ls        MC    ni     hi Niasc Nidsc Hiasc Hidsc
## 1   79121.28  95664.74  87393.01    26   0.21    26 12561  0.21   100
## 2   95664.74 112208.19 103936.46   437   3.48   463 12535  3.69 99.79
## 3  112208.19 128751.64 120479.92  1574  12.53  2037 12098 16.22 96.31
## 4  128751.64 145295.09 137023.36  2542  20.24  4579 10524 36.45 83.78
## 5  145295.09 161838.55 153566.82  3018  24.03  7597  7982 60.48 63.55
## 6  161838.55    178382 170110.28  2580  20.54 10177  4964 81.02 39.52
## 7     178382 194925.45 186653.72  1387  11.04 11564  2384 92.06 18.98
## 8  194925.45  211468.9 203197.17   613   4.88 12177   997 96.94  7.94
## 9   211468.9 228012.36 219740.63   237   1.89 12414   384 98.83  3.06
## 10 228012.36 244555.81 236284.08   103   0.82 12517   147 99.65  1.17
## 11 244555.81 261099.26 252827.54    28   0.22 12545    44 99.87  0.35
## 12 261099.26 277642.71 269370.98    10   0.08 12555    16 99.95  0.13
## 13 277642.71 294186.17 285914.44     3   0.02 12558     6 99.98  0.05
## 14 294186.17 310729.62  302457.9     3   0.02 12561     3   100  0.02
## 15     TOTAL                     12561 100.00
# TABLA DE DISTRIBUCION DE CANTIDAD SIMPLIFICADA
histograma_acero <- hist(acero, plot = FALSE)

# 1. Detectar la longitud real del histograma para evitar errores de filas
k_real <- length(histograma_acero$counts)

# LIMITE INFERIOR SIMPLIFICADA
lis <- histograma_acero$breaks[1:k_real]

# LIMITE SUPERIOR SIMPLIFICADA
lss <- histograma_acero$breaks[2:(k_real + 1)]

# MARCA DE CLASE
MC_f <- histograma_acero$mids

# Frecuencia absoluta (ni)
ni_f <- histograma_acero$counts

# Frecuencia relativa (hi)
hi_f <- (ni_f / sum(ni_f)) * 100

# Frecuencias Acumuladas
Niasc_f <- cumsum(ni_f)
Nidsc_f <- rev(cumsum(rev(ni_f)))
Hiasc_f <- round(cumsum(hi_f), 2)
Hidsc_f <- round(rev(cumsum(rev(hi_f))), 2)

# TABLA FINAL SIMPLIFICADA
TDF_acero_f <- round(data.frame(
  lis, lss, MC_f, ni_f, hi_f, Niasc_f, Nidsc_f, Hiasc_f, Hidsc_f
), 2)

# Visualizar la tabla simplificada
print(TDF_acero_f)
##       lis    lss   MC_f ni_f  hi_f Niasc_f Nidsc_f Hiasc_f Hidsc_f
## 1   60000  80000  70000    1  0.01       1   12561    0.01  100.00
## 2   80000 100000  90000   68  0.54      69   12560    0.55   99.99
## 3  100000 120000 110000  997  7.94    1066   12492    8.49   99.45
## 4  120000 140000 130000 2636 20.99    3702   11495   29.47   91.51
## 5  140000 160000 150000 3572 28.44    7274    8859   57.91   70.53
## 6  160000 180000 170000 3089 24.59   10363    5287   82.50   42.09
## 7  180000 200000 190000 1442 11.48   11805    2198   93.98   17.50
## 8  200000 220000 210000  511  4.07   12316     756   98.05    6.02
## 9  220000 240000 230000  184  1.46   12500     245   99.51    1.95
## 10 240000 260000 250000   45  0.36   12545      61   99.87    0.49
## 11 260000 280000 270000   11  0.09   12556      16   99.96    0.13
## 12 280000 300000 290000    3  0.02   12559       5   99.98    0.04
## 13 300000 320000 310000    2  0.02   12561       2  100.00    0.02
# --- FILA TOTAL DE LAS SUMAS DE ni Y hi (SIMPLIFICADA) ---

# FILA TOTAL
fila_total_acero_f <- data.frame(
  lis = "TOTAL",
  lss = "",
  MC_f = "",
  ni_f = sum(TDF_acero_f$ni_f),
  hi_f = round(sum(TDF_acero_f$hi_f), 2),
  Niasc_f = "",
  Nidsc_f = "",
  Hiasc_f = "",
  Hidsc_f = ""
)

# UNIÓN DE LA TABLA SIMPLIFICADA CON SU FILA TOTAL
TDF_acero_t <- rbind(TDF_acero_f, fila_total_acero_f)

# Visualizar la tabla simplificada final en consola
print(TDF_acero_t)
##       lis    lss   MC_f  ni_f   hi_f Niasc_f Nidsc_f Hiasc_f Hidsc_f
## 1   60000  80000  70000     1   0.01       1   12561    0.01     100
## 2   80000  1e+05  90000    68   0.54      69   12560    0.55   99.99
## 3   1e+05 120000 110000   997   7.94    1066   12492    8.49   99.45
## 4  120000 140000 130000  2636  20.99    3702   11495   29.47   91.51
## 5  140000 160000 150000  3572  28.44    7274    8859   57.91   70.53
## 6  160000 180000 170000  3089  24.59   10363    5287    82.5   42.09
## 7  180000  2e+05 190000  1442  11.48   11805    2198   93.98    17.5
## 8   2e+05 220000 210000   511   4.07   12316     756   98.05    6.02
## 9  220000 240000 230000   184   1.46   12500     245   99.51    1.95
## 10 240000 260000 250000    45   0.36   12545      61   99.87    0.49
## 11 260000 280000 270000    11   0.09   12556      16   99.96    0.13
## 12 280000  3e+05 290000     3   0.02   12559       5   99.98    0.04
## 13  3e+05 320000 310000     2   0.02   12561       2     100    0.02
## 14  TOTAL               12561 100.01
#GRÁFICAS DE DISTRIBUCIÓN DE CANTIDAD#

# 1. Definir colores de las barras
colores <- gray.colors(length(ni_f), start = 0.3, end = 0.9)

# 2. Histograma de cantidad (Gráfica Nº2)
hist(
  acero,
  main = "Gráfica Nº2: Distribución del impacto de la producción de acero\npara la plataforma (Steel production pad)",
  xlab = "Impacto del Acero (unidades de impacto)",
  ylab = "Cantidad de Pozos",
  col = colores
)

# HISTOGRAMA CON LÍMITE AJUSTADO 
max_frecuencia <- max(ni_f) + (max(ni_f) * 0.1) 

hist(
  acero,
  main = "Gráfica Nº3: Distribución del impacto de la producción de acero\npara la plataforma (Steel production pad)",
  xlab = "Impacto del Acero (unidades de impacto)",
  ylab = "Cantidad de Pozos",
  col = colores,
  ylim = c(0, max_frecuencia)
)

# --- HISTOGRAMA DE CANTIDAD EN PORCENTAJE ---
etiquetas_x <- lss

barplot(
  hi_f,
  names.arg = etiquetas_x,
  col = colores,
  ylim = c(0, 20),
  space = 0,
  cex.names = 0.6,
  ylab = "Porcentaje (%)",
  xlab = "Impacto del Acero (Límites Superiores)",
  main = "Gráfica Nº4: Distribución de cantidad en porcentaje del\nimpacto de acero en las plataformas de los pozos",
  las = 1
)

barplot(
  hi_f,
  names.arg = etiquetas_x,
  col = colores,
  ylim = c(0, 100),
  cex.names = 0.6,
  space = 0,
  ylab = "Porcentaje (%)",
  xlab = "Impacto del Acero (Límites Superiores)",
  main = "Gráfica Nº5: Distribución de cantidad en porcentaje del\nimpacto de acero en las plataformas de los pozos",
  las = 1
)

# DIAGRAMA DE CAJA 
boxplot(
  acero,
  horizontal = TRUE,
  main = "Gráfica Nº6: Distribución del impacto de la producción de acero\npara la plataforma (Steel production pad)",
  xlab = "Impacto del Acero (unidades de impacto)",
  col = "gray"
)

# PREPARACIÓN PARA OJIVAS 
Niasc_f <- as.numeric(TDF_acero_f$Niasc_f)
Nidsc_f <- as.numeric(TDF_acero_f$Nidsc_f)
Hiasc_f <- as.numeric(TDF_acero_f$Hiasc_f)
Hidsc_f <- as.numeric(TDF_acero_f$Hidsc_f)

# GRÁFICA Nº7: OJIVAS COMBINADAS Ni
plot(lss, Nidsc_f, type="o",
     main="Gráfica Nº7: Ojiva combinada del impacto del acero\n(Ni)",
     ylab="Cantidad Acumulada", 
     col="blue", 
     xlab="Impacto del Acero",
     pch=16)
lines(lis, Niasc_f, col="black", type="o", pch=16)

# GRÁFICA Nº8: OJIVAS COMBINADAS Hi
plot(lss, Hidsc_f, type="o",
     main="Gráfica Nº8: Ojiva combinada del impacto del acero\n(Hi)",
     ylab="Porcentaje Acumulado", 
     col="blue", 
     xlab="Impacto del Acero",
     ylim=c(0, 100),
     pch=16)
lines(lis, Hiasc_f, col="black", type="o", pch=16)

# INDICADORES ESTADÍSTICOS Y OUTLIERS

summary(acero)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   79121  136521  154798  156013  173025  310730
x_acero <- mean(acero)
ri_acero <- min(acero)
rs_acero <- max(acero)
Me_acero <- median(acero)
sd_acero <- sd(acero)
CV_acero <- ((sd_acero / x_acero) * 100)
As_acero <- skewness(acero)
K_acero <- kurtosis(acero)

Variable_nombre <- c("Impacto prod. acero plataforma")
TablaIndicadores_acero <- data.frame(
  Variable_nombre, 
  ri_acero, 
  rs_acero, 
  round(x_acero, 2), 
  Me_acero, 
  round(sd_acero, 2), 
  round(CV_acero, 2), 
  round(As_acero, 2), 
  round(K_acero, 2)
)
colnames(TablaIndicadores_acero) <- c("Variable","mínimo","máximo","x","Me","sd","Cv (%)","As","K")

kable(TablaIndicadores_acero, 
      format = "markdown", 
      caption = "Tabla N°3. Indicadores estadísticos de la variable impacto de la producción de acero para la plataforma (Steel production pad)")
Tabla N°3. Indicadores estadísticos de la variable impacto de la producción de acero para la plataforma (Steel production pad)
Variable mínimo máximo x Me sd Cv (%) As K
Impacto prod. acero plataforma 79121.28 310729.6 156012.9 154798.2 27225.15 17.45 0.5 0.56
# TABLA DE OUTLIERS
outliers_acero <- boxplot.stats(acero)$out 
num_outliers_acero <- length(outliers_acero) 

if (num_outliers_acero > 0) {
  minoutliers_acero <- min(outliers_acero)
  maxoutliers_acero <- max(outliers_acero)
} else {
  minoutliers_acero <- 0
  maxoutliers_acero <- 0
}

TablaOutliers_acero <- data.frame(num_outliers_acero, minoutliers_acero, maxoutliers_acero)
colnames(TablaOutliers_acero) <- c("Outliers", "Mínimo", "Máximo")

kable(TablaOutliers_acero, format = "markdown", 
      caption = "Tabla N°4: Outliers de la variable impacto de la producción de acero.")
Tabla N°4: Outliers de la variable impacto de la producción de acero.
Outliers Mínimo Máximo
150 79121.28 310729.6
# CONCLUCION
"La variable impacto de la producción de acero para la plataforma presenta un comportamiento sumamente estable en los pozos de Nuevo México. A diferencia de otras variables mineras, esta no presenta valores atípicos (0 outliers), lo que indica que los procesos de construcción y uso de materiales están estandarizados. Con una acumulación de datos concentrada en los rangos bajos y medios, se concluye que el impacto ambiental derivado del acero es predecible y controlado, representando un riesgo bajo de desviaciones imprevistas en la planificación de la eficiencia operativa del proyecto."
## [1] "La variable impacto de la producción de acero para la plataforma presenta un comportamiento sumamente estable en los pozos de Nuevo México. A diferencia de otras variables mineras, esta no presenta valores atípicos (0 outliers), lo que indica que los procesos de construcción y uso de materiales están estandarizados. Con una acumulación de datos concentrada en los rangos bajos y medios, se concluye que el impacto ambiental derivado del acero es predecible y controlado, representando un riesgo bajo de desviaciones imprevistas en la planificación de la eficiencia operativa del proyecto."