1 Carga de datos

library(readxl)
datos <- read_excel("Producción Campo Sacha.csv.xlsx")
str(datos)
## 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 Extraer la variable continua

voltaje <- datos$Voltaje 
voltaje <- as.numeric(voltaje)
voltaje <- na.omit(voltaje)

3 Cálculo de intervalos (Sturges)

R <- max(voltaje) - min(voltaje)
k <- floor(1 + (3.3 * log10(length(voltaje))))
A <- R / k

liminf <- seq(from = min(voltaje), 
              by = A, 
              length.out = k)

limsup <- liminf + A
limsup[k] <- max(voltaje)

MC <- (liminf + limsup) / 2

4 Tabla de distribución de frecuencias

4.1 Frecuencias absolutas

ni <- numeric(k)
for (i in 1:k) {
  if (i == k) {
    ni[i] <- sum(voltaje >= liminf[i] & voltaje <= limsup[i])
  } else {
    ni[i] <- sum(voltaje >= liminf[i] & voltaje < limsup[i])
  }
}

4.2 Frecuencias relativas y acumuladas

hi <- (ni / length(voltaje)) * 100
Niasc <- cumsum(ni)
Nidsc <- rev(cumsum(rev(ni)))
Hiasc <- cumsum(hi)
Hidsc <- rev(cumsum(rev(hi)))

4.3 Tabla de Frecuencias

tabla_voltaje <- data.frame(
  Límite_Inferior = round(liminf, 2),
  Límite_Superior = round(limsup, 2),
  Marca_Clase = round(MC, 2),
  ni = ni,
  hi_porc = round(hi, 2),
  Ni_asc = Niasc,
  Ni_dsc = Nidsc,
  Hiasc_porc = round(Hiasc, 2),
  Hidsc_porc = round(Hidsc, 2))

# TABLA 1 CON GT()
library(gt)
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)
tabla_voltaje %>%
  gt() %>%
  tab_header(
    title = md("**Tabla 1: Distribución de Frecuencias del Voltaje**"),
    subtitle = md("Campo Sacha | Método Sturges")  
  ) %>%
  tab_source_note(
    source_note = md("**Campo Sacha**")
  ) %>%  # ¡SOLO UN PARÉNTESIS AQUÍ!
  cols_label(
    Límite_Inferior = "L. Inferior",
    Límite_Superior = "L. Superior", 
    Marca_Clase = "Marca Clase",
    hi_porc = "hi %",
    Ni_asc = "Ni Asc.",
    Ni_dsc = "Ni Desc.",
    Hiasc_porc = "Hi Asc. %",
    Hidsc_porc = "Hi Desc. %"
  ) %>%
  fmt_number(
    columns = c(Límite_Inferior, Límite_Superior, Marca_Clase),
    decimals = 2
  ) %>%
  fmt_number(
    columns = c(hi_porc, Hiasc_porc, Hidsc_porc),
    decimals = 2,
    pattern = "{x}%"
  )
Tabla 1: Distribución de Frecuencias del Voltaje
Campo Sacha | Método Sturges
L. Inferior L. Superior Marca Clase ni hi % Ni Asc. Ni Desc. Hi Asc. % Hi Desc. %
0.00 65.15 32.58 16 0.21% 16 7704 0.21% 100.00%
65.15 130.31 97.73 0 0.00% 16 7688 0.21% 99.79%
130.31 195.46 162.88 0 0.00% 16 7688 0.21% 99.79%
195.46 260.62 228.04 0 0.00% 16 7688 0.21% 99.79%
260.62 325.77 293.19 108 1.40% 124 7688 1.61% 99.79%
325.77 390.92 358.35 1174 15.24% 1298 7580 16.85% 98.39%
390.92 456.08 423.50 4874 63.27% 6172 6406 80.11% 83.15%
456.08 521.23 488.65 1523 19.77% 7695 1532 99.88% 19.89%
521.23 586.38 553.81 8 0.10% 7703 9 99.99% 0.12%
586.38 651.54 618.96 0 0.00% 7703 1 99.99% 0.01%
651.54 716.69 684.12 0 0.00% 7703 1 99.99% 0.01%
716.69 781.85 749.27 0 0.00% 7703 1 99.99% 0.01%
781.85 847.00 814.42 1 0.01% 7704 1 100.00% 0.01%
Campo Sacha

5 Gráficos

5.1 Histograma

hist(voltaje,
     main = "Gráfica No.1: Distribución del Voltaje - Campo Sacha",
     breaks = seq(min(voltaje), max(voltaje) + A, by = A),
     xlab = "Voltaje",
     ylab = "Cantidad",
     col = "lightblue",
     border = "darkblue",
     xaxt = "n")  # IMPORTANTE: Suprimir eje X automático

# Eje X personalizado con MARCAS DE CLASE
axis(1, at = MC,  # Posiciones: Marcas de Clase
     labels = round(MC, 2),  # Etiquetas: valores redondeados
     las = 1)  # Etiquetas horizontales

5.2 OJIVAS

x_asc <- c(min(liminf), limsup)
y_asc <- c(0, Niasc)
x_desc <- c(liminf, max(limsup))
y_desc <- c(Nidsc, 0)
x_range <- range(c(x_asc, x_desc))
y_range <- c(0, max(c(y_asc, y_desc)))

plot(x_asc, y_asc, type = "o", col = "skyblue",
     main = "Gráfica No.2: Ojivas Ascendente y Descendente del Voltaje",
     xlab = "Voltaje",
     ylab = "Frecuencia acumulada",
     xlim = x_range, ylim = y_range,
     xaxt = "n", pch = 16, lwd = 2)

axis(1, at = pretty(x_range), 
     labels = format(pretty(x_range), scientific = FALSE))
axis(2, at = pretty(y_range))

lines(x_desc, y_desc, type = "o", col = "steelblue4", pch = 17, lwd = 2)

legend("right", 
       legend = c("Ojiva Ascendente", "Ojiva Descendente"),
       col = c("skyblue", "steelblue4"), 
       pch = c(16, 17), 
       lty = 1, 
       lwd = 2,
       cex = 0.8)

5.3 Diagrama de caja

boxplot(voltaje, 
        horizontal = TRUE, 
        col = "steelblue",
        main = "Gráfica No.3: Distribución del Voltaje - Campo Sacha",
        xlab = "Voltaje",
        xaxt = "n")

axis(1, at = pretty(voltaje), 
     labels = format(pretty(voltaje), scientific = FALSE))

# Outliers

outliers <- boxplot.stats(voltaje)$out
cat("\nNúmero de outliers:", length(outliers), "\n")
## 
## Número de outliers: 206
if(length(outliers) > 0) {
  cat("Outliers:", round(outliers, 2), "\n")
}
## Outliers: 320 305 320 321 320 0 0 44 305 327 322 320 321 320 0 0 322 321 305 322 327 329 292 319 327 306 320 321 0 327 326 306 0 0 317 304 320 269 327 847 321 289 329 326 289 289 327 289 304 0 0 320 289 320 316 327 329 312 312 312 0 0 321 326 321 289 312 304 329 327 328 303 326 327 0 0 315 327 329 321 321 327 326 321 315 329 321 327 326 328 291 296 328 328 321 296 274 328 276 276 275 290 292 298 321 298 325 328 298 306 327 300 313 306 312 327 329 329 328 328 320 328 320 319 320 327 328 328 328 328 289 318 327 328 289 325 328 329 319 328 328 325 328 327 328 328 319 328 327 325 316 316 324 327 328 328 325 328 39.1 328 329 319 328 324 328 529 283 324 298 324 324 529 319 325 328 324 329 529 329 293 300 529 300 319 328 324 325 306 308 327 328 328 530 328 327 320 319 325 327 0 319 324 328 327 529 329

6 Indicadores estadísticos

get_mode_interval <- function() {
  idx <- which.max(ni)
  return(paste0("[", round(liminf[idx], 2), ", ", round(limsup[idx], 2), "]"))
}

media <- mean(voltaje)
mediana <- median(voltaje)
moda_intervalo <- get_mode_interval()
desv <- sd(voltaje)
varianza <- var(voltaje)
cv <- (desv / media) * 100
asim <- skewness(voltaje)
curt <- kurtosis(voltaje)     

# CREAR DATA.FRAME DE INDICADORES (¡ESTA PARTE FALTABA!)
indicadores <- data.frame(
  Indicador = c("Mínimo", "Máximo", "Media", "Mediana", "Moda (intervalo)",
                "Desviación Estándar", "Varianza", "Coef. Variación (%)",
                "Asimetría", "Curtosis", "N° Outliers"),
  Valor = c(round(min(voltaje), 2), round(max(voltaje), 2),
            round(media, 2), round(mediana, 2), moda_intervalo,
            round(desv, 2), round(varianza, 2), round(cv, 2),
            round(asim, 2), round(curt, 2), length(outliers))
)

# TABLA 2 CON GT()
indicadores %>%
  gt() %>%
  tab_header(
    title = md("**Tabla 2: Indicadores Estadísticos del Voltaje**")
  ) %>%
  tab_source_note(
    source_note = md("**Campo Sacha**")
  ) %>%
  cols_label(
    Indicador = "Indicador",
    Valor = "Valor"
  ) %>%
  tab_style(
    style = cell_text(weight = "bold"),
    locations = cells_body(columns = Indicador)
  )
Tabla 2: Indicadores Estadísticos del Voltaje
Indicador Valor
Mínimo 0
Máximo 847
Media 422.53
Mediana 428
Moda (intervalo) [390.92, 456.08]
Desviación Estándar 42.71
Varianza 1823.89
Coef. Variación (%) 10.11
Asimetría -2.22
Curtosis 19.44
N° Outliers 206
Campo Sacha

7 CONCLUSIÓN

El voltaje fluctúa entre 0.00 V y 847.00 V y sus valores están en torno a los 428.00 V (media = 422.53 V), con una desviación estándar de 42.71 V siendo un conjunto de valores homogéneos (CV = 10.11%) cuyos valores se concentran en el intervalo modal [390.92, 456.08] V y con distribución leptocúrtica (K = 19.44) y sesgo pronunciado hacia la izquierda (As = -2.22) a excepción de los 206 valores atípicos identificados, por lo tanto el comportamiento de la variable indica un proceso mayoritariamente estable con mediciones consistentes en el rango principal, aunque con presencia significativa de lecturas extremas que requieren análisis particular.