1. Carga de Datos

library(readxl)
Produccio_n_Campo_Sacha_csv <- read_excel("Producción Campo Sacha.csv.xlsx")
View(Produccio_n_Campo_Sacha_csv)
str(Produccio_n_Campo_Sacha_csv)
## tibble [8,344 × 31] (S3: tbl_df/tbl/data.frame)
##  $ mes                   : chr [1:8344] "Ene" "Ene" "Ene" "Ene" ...
##  $ día                   : num [1:8344] 1 1 1 1 1 1 1 1 1 1 ...
##  $ Pozo                  : chr [1:8344] "SACHA-001A" "SACHA-019A" "SACHA-052B" "SACHA-083A" ...
##  $ Campo                 : chr [1:8344] "SACHA" "SACHA" "SACHA" "SACHA" ...
##  $ Reservorio            : chr [1:8344] "U" "U" "U INFERIOR" "HOLLIN INFERIOR" ...
##  $ Bpd                   : num [1:8344] NA 53 249 139 186 136 NA 456 161 164 ...
##  $ Bppd_BH               : num [1:8344] 159 NA NA NA NA NA 155 NA NA NA ...
##  $ Bfpd_BE               : num [1:8344] NA 534 346 1158 1163 ...
##  $ Bfpd_BH               : num [1:8344] 695 NA NA NA NA NA 441 NA NA NA ...
##  $ Bapd_BE               : num [1:8344] NA 481 97 1019 977 ...
##  $ Bapd_BH               : num [1:8344] 536 NA NA NA NA NA 286 NA NA NA ...
##  $ Bsw_BE                : num [1:8344] NA 90.1 28 88 84 ...
##  $ Bsw_BH                : num [1:8344] 77.1 NA NA NA NA ...
##  $ Api_BE                : num [1:8344] NA 26.7 27.8 27.7 24 20.5 NA 28.5 29.9 26.3 ...
##  $ Api_BH                : num [1:8344] 27.8 NA NA NA NA NA 23.2 NA NA NA ...
##  $ Gas_BE                : num [1:8344] NA 10.76 50.55 1.11 27.9 ...
##  $ Gas_BH                : num [1:8344] 32.3 NA NA NA NA ...
##  $ Salinidad_BE          : num [1:8344] NA 15920 30227 1600 13000 ...
##  $ Salinidad_BH          : num [1:8344] 10800 NA NA NA NA NA 3800 NA NA NA ...
##  $ Rgl_BE                : num [1:8344] NA 20.15 146.1 0.96 23.99 ...
##  $ Rgl_BH                : num [1:8344] 46.5 NA NA NA NA ...
##  $ Gor_BE                : num [1:8344] NA 203.02 203.01 7.99 150 ...
##  $ Gor_BH                : num [1:8344] 203 NA NA NA NA ...
##  $ Horas_BE              : num [1:8344] NA 4 5 4 4 10 NA 4 10 10 ...
##  $ Horas_BH              : num [1:8344] 4 NA NA NA NA NA 4 NA NA NA ...
##  $ Bomba_BE              : chr [1:8344] NA "SF-320|SF-320|SF-900|SFGH2500/520/180/9259" "RC 1000|RC 1000|RC 1000/300/120/9250" "P23/68/30/7000" ...
##  $ Bomba_BH              : chr [1:8344] "JET  12K/0//0" NA NA NA ...
##  $ Frecuencia Operaciones: num [1:8344] NA 65 62 46 59 52 NA 58.5 57 54 ...
##  $ Voltaje               : num [1:8344] NA 479 457 364 440 452 NA 475 455 439 ...
##  $ Amperaje              : num [1:8344] NA 29 35 14 59 30 NA 23 35 34 ...
##  $ Presión Intake        : num [1:8344] NA 484 406 0 345 162 NA 546 338 0 ...

2. Extracción de la Variable Amperaje

# Buscar columna de amperaje
col_amperaje <- grep("amper|ampere|corriente|current", 
                     colnames(Produccio_n_Campo_Sacha_csv), 
                     ignore.case = TRUE, 
                     value = TRUE)[1]

if(!is.na(col_amperaje)) {
  Produccio_n_Campo_Sacha_csv$Amperaje <- Produccio_n_Campo_Sacha_csv[[col_amperaje]]
  cat("✅ Amperaje extraído de:", col_amperaje, "\n")
} else {
  cat("⚠️ No se encontró columna de amperaje\n")
  cat("Columnas disponibles:\n")
  print(colnames(Produccio_n_Campo_Sacha_csv))
  stop("Selecciona manualmente la columna de amperaje")
}
## ✅ Amperaje extraído de: Amperaje
# Preparar vector
Amperaje <- as.numeric(Produccio_n_Campo_Sacha_csv$Amperaje)
Amperaje <- na.omit(Amperaje)
n <- length(Amperaje)

cat("\n📊 RESUMEN AMPERAJE:\n")
## 
## 📊 RESUMEN AMPERAJE:
cat("• Muestra (n):", n, "\n")
## • Muestra (n): 7705
cat("• Mínimo:", min(Amperaje), "A\n")
## • Mínimo: 0 A
cat("• Máximo:", max(Amperaje), "A\n")
## • Máximo: 116 A
cat("• Media:", mean(Amperaje), "A\n")
## • Media: 32.95817 A

3. Tabla de Distribución de Frecuencias

# Definir número de intervalos
k <- min(ceiling(log2(n)) + 1, 15)
if(n > 1000) k <- 12

cat("\n", rep("=", 60), "\n", sep = "")
## 
## ============================================================
cat("CONSTRUYENDO TABLA DE DISTRIBUCIÓN\n")
## CONSTRUYENDO TABLA DE DISTRIBUCIÓN
cat(rep("=", 60), "\n\n", sep = "")
## ============================================================
cat("• Tamaño de muestra (n):", n, "\n")
## • Tamaño de muestra (n): 7705
cat("• Número de intervalos sugerido:", k, "\n")
## • Número de intervalos sugerido: 12
# Calcular estadísticas
rango <- max(Amperaje) - min(Amperaje)
media_a <- mean(Amperaje)
sd_a <- sd(Amperaje)
cv <- sd_a / media_a * 100
cat("• Coeficiente de variación:", round(cv, 1), "%\n")
## • Coeficiente de variación: 43 %
# Método de construcción
if(cv < 50 && n > 100) {
  cat("• Método seleccionado: Límites basados en percentiles\n")
  percentiles <- quantile(Amperaje, probs = seq(0, 1, length.out = k + 1))
  lim_inf <- as.numeric(percentiles)
  lim_inf[1] <- max(0, floor(lim_inf[1]))
  lim_inf[k + 1] <- ceiling(lim_inf[k + 1])
} else {
  cat("• Método seleccionado: Amplitud constante\n")
  amplitud <- 3.5 * sd_a / (n^(1/3))
  amplitud <- round(amplitud)
  if(amplitud < 5) amplitud <- 5
  if(amplitud > 20) amplitud <- 20
  cat("• Amplitud de clase:", amplitud, "A\n")
  
  inicio <- 0
  lim_inf <- seq(from = inicio, by = amplitud, length.out = k + 1)
  if(lim_inf[k + 1] < max(Amperaje)) {
    lim_inf <- c(lim_inf, lim_inf[k + 1] + amplitud)
    k <- k + 1
  }
}
## • Método seleccionado: Límites basados en percentiles
# Crear intervalos y calcular frecuencias
intervalos <- cut(Amperaje, breaks = lim_inf, include.lowest = TRUE, right = FALSE)
frecuencia <- table(intervalos)
frecuencia_rel <- frecuencia / n
frecuencia_acum <- cumsum(frecuencia)
frecuencia_rel_acum <- cumsum(frecuencia_rel)
marca_clase_tabla <- (lim_inf[1:k] + lim_inf[2:(k+1)]) / 2

# Crear tabla
TDF_Amperaje <- data.frame(
  Li = round(lim_inf[1:k], 1),
  Ls = round(lim_inf[2:(k+1)], 1),
  MC = round(marca_clase_tabla, 1),
  "ni (FA)" = as.numeric(frecuencia),
  "hi (FR)" = round(as.numeric(frecuencia_rel), 4),
  "Ni (FAA)" = as.numeric(frecuencia_acum),
  "Hi (FRA)" = round(as.numeric(frecuencia_rel_acum), 4)
)

cat("\n", rep("=", 70), "\n", sep = "")
## 
## ======================================================================
cat("TABLA 1: DISTRIBUCIÓN DE FRECUENCIAS DEL AMPERAJE\n")
## TABLA 1: DISTRIBUCIÓN DE FRECUENCIAS DEL AMPERAJE
cat(rep("=", 70), "\n\n", sep = "")
## ======================================================================
print(TDF_Amperaje)
##    Li  Ls   MC ni..FA. hi..FR. Ni..FAA. Hi..FRA.
## 1   0  18  9.0     559  0.0726      559   0.0726
## 2  18  21 19.5     617  0.0801     1176   0.1526
## 3  21  24 22.5     666  0.0864     1842   0.2391
## 4  24  25 24.5     432  0.0561     2274   0.2951
## 5  25  27 26.0     768  0.0997     3042   0.3948
## 6  27  29 28.0     643  0.0835     3685   0.4783
## 7  29  32 30.5     684  0.0888     4369   0.5670
## 8  32  35 33.5     629  0.0816     4998   0.6487
## 9  35  39 37.0     721  0.0936     5719   0.7422
## 10 39  47 43.0     597  0.0775     6316   0.8197
## 11 47  57 52.0     740  0.0960     7056   0.9158
## 12 57 116 86.5     649  0.0842     7705   1.0000
# Resumen
indice_modal <- which.max(frecuencia)
cat("\nRESUMEN DE LA DISTRIBUCIÓN:\n")
## 
## RESUMEN DE LA DISTRIBUCIÓN:
cat(rep("-", 40), "\n", sep = "")
## ----------------------------------------
cat("• Intervalo modal:", names(frecuencia)[indice_modal], "\n")
## • Intervalo modal: [25,27)
cat("• Frecuencia absoluta:", max(frecuencia), "\n")
## • Frecuencia absoluta: 768
cat("• Frecuencia relativa:", round(100 * max(frecuencia_rel), 1), "%\n")
## • Frecuencia relativa: 10 %
# Preparar variables para gráficas
frec_acum <- as.numeric(frecuencia_acum)
marca_clase <- marca_clase_tabla

4. Gráficas de Análisis

4.1 Histograma

hist(Amperaje, 
     breaks = lim_inf,
     col = "#2196F3",
     border = "white",
     main = "Histograma de Amperaje",
     xlab = "Amperaje (A)",
     ylab = "Cantidad",
     las = 1)
Figura 1: Histograma de Amperaje

Figura 1: Histograma de Amperaje

4.2 Diagrama de Caja

boxplot(Amperaje,
        horizontal = TRUE,
        col = "#FF9800",
        main = "Diagrama de Caja",
        xlab = "Amperaje (A)",
        las = 1)
Figura 2: Diagrama de Caja

Figura 2: Diagrama de Caja

4.3 Distribución por Cuartiles

categorias <- cut(Amperaje, 
                  breaks = quantile(Amperaje, probs = seq(0, 1, 0.25)),
                  include.lowest = TRUE)
barplot(table(categorias),
        col = c("#E3F2FD", "#BBDEFB", "#90CAF9", "#64B5F6"),
        main = "Distribución por Cuartiles",
        xlab = "",
        ylab = "Cantidad",
        las = 2)
Figura 3: Distribución por Cuartiles

Figura 3: Distribución por Cuartiles

4.4 Ojiva Acumulada

plot(marca_clase, frec_acum,
     type = "b",
     pch = 19,
     col = "#00796B",
     main = "Ojiva Acumulada",
     xlab = "Marca de Clase (A)",
     ylab = "Cantidad",
     las = 1)
grid()
abline(h = n/2, col = "red", lty = 2)
abline(h = n * 0.8, col = "blue", lty = 2)
Figura 4: Ojiva Acumulada

Figura 4: Ojiva Acumulada

5. Estadísticos Descriptivos

if(!require(e1071)) install.packages("e1071", quiet = TRUE)
library(e1071)

cat("\n", rep("=", 70), "\n", sep = "")
## 
## ======================================================================
cat("TABLA 2: RESUMEN DE ESTADÍSTICOS DESCRIPTIVOS\n")
## TABLA 2: RESUMEN DE ESTADÍSTICOS DESCRIPTIVOS
cat(rep("=", 70), "\n\n", sep = "")
## ======================================================================
# Calcular estadísticos
estadisticos <- list(
  "Tamaño de muestra" = n,
  "Media" = mean(Amperaje),
  "Mediana" = median(Amperaje),
  "Moda aproximada*" = as.numeric(names(sort(table(round(Amperaje, 1)), decreasing = TRUE)[1])),
  "Desviación estándar" = sd(Amperaje),
  "Varianza" = var(Amperaje),
  "Coeficiente de variación" = (sd(Amperaje)/mean(Amperaje)) * 100,
  "Mínimo" = min(Amperaje),
  "Máximo" = max(Amperaje),
  "Rango" = max(Amperaje) - min(Amperaje),
  "Primer cuartil (Q1)" = quantile(Amperaje, 0.25),
  "Tercer cuartil (Q3)" = quantile(Amperaje, 0.75),
  "Rango intercuartílico (IQR)" = IQR(Amperaje),
  "Asimetría (Skewness)" = skewness(Amperaje),
  "Curtosis (Kurtosis)" = kurtosis(Amperaje)
)

# Mostrar tabla simple
for(i in seq_along(estadisticos)) {
  nombre <- names(estadisticos)[i]
  valor <- estadisticos[[i]]
  
  if(nombre == "Coeficiente de variación") {
    cat(sprintf("%-25s: %6.1f %%\n", nombre, valor))
  } else if(nombre == "Tamaño de muestra") {
    cat(sprintf("%-25s: %6.0f\n", nombre, valor))
  } else if(nombre %in% c("Asimetría (Skewness)", "Curtosis (Kurtosis)")) {
    cat(sprintf("%-25s: %6.4f\n", nombre, valor))
  } else {
    cat(sprintf("%-25s: %6.2f A\n", nombre, valor))
  }
}
## Tamaño de muestra       :   7705
## Media                    :  32.96 A
## Mediana                  :  29.00 A
## Moda aproximada*         :  24.00 A
## Desviación estándar    :  14.19 A
## Varianza                 : 201.26 A
## Coeficiente de variación:   43.0 %
## Mínimo                  :   0.00 A
## Máximo                  : 116.00 A
## Rango                    : 116.00 A
## Primer cuartil (Q1)      :  24.00 A
## Tercer cuartil (Q3)      :  39.00 A
## Rango intercuartílico (IQR):  15.00 A
## Asimetría (Skewness)    : 1.0685
## Curtosis (Kurtosis)      : 1.4962
cat("\n* Moda aproximada (redondeada a 1 decimal)\n")
## 
## * Moda aproximada (redondeada a 1 decimal)

6. Conclusiones

cat("\n", rep("=", 50), "\n", sep = "")
## 
## ==================================================
cat("CONCLUSIONES\n")
## CONCLUSIONES
cat(rep("=", 50), "\n\n", sep = "")
## ==================================================
promedio_a <- mean(Amperaje)
cv_a <- sd(Amperaje)/mean(Amperaje) * 100

cat("1. NIVEL DE AMPERAJE:\n")
## 1. NIVEL DE AMPERAJE:
cat("   • Promedio:", round(promedio_a, 1), "A\n")
##    • Promedio: 33 A
cat("   • Rango típico:", round(quantile(Amperaje, 0.25), 1), "-", 
    round(quantile(Amperaje, 0.75), 1), "A\n\n")
##    • Rango típico: 24 - 39 A
cat("2. ESTABILIDAD:\n")
## 2. ESTABILIDAD:
cat("   • Coeficiente de variación:", round(cv_a, 1), "%\n")
##    • Coeficiente de variación: 43 %
if(cv_a > 30) {
  cat("   • Clasificación: ALTA VARIABILIDAD\n")
} else if(cv_a > 15) {
  cat("   • Clasificación: VARIABILIDAD MODERADA\n")
} else {
  cat("   • Clasificación: BAJA VARIABILIDAD\n")
}
##    • Clasificación: ALTA VARIABILIDAD
cat("\n", rep("-", 50), "\n", sep = "")
## 
## --------------------------------------------------
cat("Análisis completado\n", sep = "")
## Análisis completado
cat(rep("-", 50), "\n", sep = "")
## --------------------------------------------------