1 Configuración y Carga de Datos

Para iniciar el procesamiento estadístico inferencial, se verifica la estructura global del conjunto de datos correspondientes a los bloques contractuales y arrendamientos de hidrocarburos en el estado de Kansas.

# Selección manual del archivo
datos <- read_csv(file.choose(), show_col_types = FALSE)
cat("dataset cargada correctamente.\n")
## dataset cargada correctamente.
cat("Total de registros evaluados (filas):", nrow(datos), "\n")
## Total de registros evaluados (filas): 47757

2 Extraer Variable

Se realiza el aislamiento de la variable cualitativa ordinal Nivel de Producción (PRODUCCION), clasificada en tres niveles: Bajo, Medio y Alto, según los valores registrados en la columna PROD_LEVEL.

Clasificación en tres categorías ordinales:

datos <- datos %>%
  mutate(
    PRODUCCION = case_when(
      PROD_LEVEL == "LOW"    ~ "Bajo",
      PROD_LEVEL == "MEDIUM" ~ "Medio",
      PROD_LEVEL == "HIGH"   ~ "Alto",
      TRUE                   ~ "No registrado"
    )
  ) %>%
  filter(PRODUCCION != "No registrado")

3 Ordenamiento Lógico

Se establece el orden lógico de la variable cualitativa ordinal Nivel de Producción, respetando la progresión natural del volumen extraído: desde el nivel más bajo hasta el más alto. Este ordenamiento es fundamental para garantizar una correcta interpretación estadística y visual de los resultados.

# Definir el orden lógico de las categorías (Bajo → Medio → Alto)
orden_logico <- c("Bajo", "Medio", "Alto")

# Aplicar factor ordenado a la variable PRODUCCION
datos <- datos %>%
  mutate(
    PRODUCCION = factor(PRODUCCION, levels = orden_logico, ordered = TRUE)
  )

# Verificar que el orden fue aplicado correctamente
cat("Orden de categorías establecido:\n")
## Orden de categorías establecido:
cat(paste(levels(datos$PRODUCCION), collapse = " → "), "\n")
## Bajo → Medio → Alto
cat("\nDistribución por nivel:\n")
## 
## Distribución por nivel:
print(table(datos$PRODUCCION))
## 
##  Bajo Medio  Alto 
## 15919 15919 15919

4 Tabla de Distribución de Frecuencias

Se calcula la distribución de frecuencias absolutas (\(n_i\)) y porcentuales (\(h_i\%\)) para las tres categorías de la variable cualitativa ordinal, respetando la estructura de tres columnas estipulada por la cátedra.

# 1. Frecuencias absolutas
frecuencias_base <- datos %>%
  group_by(Nivel_Produccion = PRODUCCION, .drop = FALSE) %>%
  summarise(Frecuencia_ni = n(), .groups = "drop") %>%
  arrange(Nivel_Produccion)

# 2. Porcentaje
tabla_final <- frecuencias_base %>%
  mutate(Porcentaje_hi = (Frecuencia_ni / sum(Frecuencia_ni)) * 100)

# 3. Fila TOTAL
total_fila <- data.frame(
  Nivel_Produccion = "TOTAL",
  Frecuencia_ni    = sum(tabla_final$Frecuencia_ni),
  Porcentaje_hi    = sum(tabla_final$Porcentaje_hi)
)

# 4. Formateo — se convierte a character para evitar conflicto de tipos
resultado <- bind_rows(
  tabla_final %>% mutate(Nivel_Produccion = as.character(Nivel_Produccion),
                         Porcentaje_hi    = sprintf("%.2f", Porcentaje_hi)),
  total_fila  %>% mutate(Porcentaje_hi    = sprintf("%.2f", Porcentaje_hi))
)

# 5. Tabla final con gt
resultado %>%
  rename(
    "Nivel de Producción" = Nivel_Produccion,
    "Frecuencia (ni)"     = Frecuencia_ni,
    "Porcentaje (hi%)"    = Porcentaje_hi
  ) %>%
  gt() %>%
  tab_header(
    title    = md("**Tabla N°1: Distribución de Frecuencias**"),
    subtitle = md("*Variable Cualitativa Ordinal: Nivel de Producción*")
  ) %>%
  cols_label(
    "Nivel de Producción" = md("**Nivel de Producción**"),
    "Frecuencia (ni)"     = md("**Frecuencia (ni)**"),
    "Porcentaje (hi%)"    = md("**Porcentaje (hi%)**")
  ) %>%
  tab_style(
    style = list(
      cell_fill(color = "#2C2C2C"),
      cell_text(color = "white", weight = "bold")
    ),
    locations = cells_column_labels()
  ) %>%
  tab_style(
    style = cell_fill(color = "#F5F5F5"),
    locations = cells_body(rows = seq(1, nrow(resultado), by = 2))
  ) %>%
  tab_style(
    style = list(
      cell_fill(color = "#D6D6D6"),
      cell_text(weight = "bold")
    ),
    locations = cells_body(
      rows    = `Nivel de Producción` == "TOTAL",
      columns = everything()
    )
  ) %>%
  tab_source_note(source_note = md("*Autor: Fernando Almeida*")) %>%
  tab_options(
    table.width                = pct(60),
    heading.title.font.size    = px(16),
    heading.subtitle.font.size = px(12),
    table.font.size            = px(13),
    data_row.padding           = px(6)
  )
Tabla N°1: Distribución de Frecuencias
Variable Cualitativa Ordinal: Nivel de Producción
Nivel de Producción Frecuencia (ni) Porcentaje (hi%)
Bajo 15919 33.33
Medio 15919 33.33
Alto 15919 33.33
TOTAL 47757 100.00
Autor: Fernando Almeida

5 Representación Gráfica

Se presentan tres gráficas en escala de grises que permiten analizar visualmente la distribución de la variable cualitativa ordinal Nivel de Producción de los Pozos.

5.1 Diagrama de Barras frecuencia absoluta

par(mar = c(8, 6, 5, 2))
barplot(tabla_final$Frecuencia_ni,
        main      = "",
        xlab      = "",
        ylab      = "",
        col       = c("gray30", "gray60", "gray85"),
        ylim      = c(0, max(tabla_final$Frecuencia_ni) * 1.15),
        names.arg = as.character(tabla_final$Nivel_Produccion),
        cex.names = 0.9,
        las       = 2)

mtext("Frecuencia (ni)", side = 2, line = 4.5, cex = 1, font = 1)
mtext("Nivel de Producción", side = 1, line = 6, cex = 1)
mtext("Gráfica N°1: Distribución de Frecuencias Absolutas por Nivel de Producción de los Pozos",
      side = 3, line = 2, adj = 0.5, cex = 0.9, font = 2)

5.2 Diagrama de Barras de porcentaje

par(mar = c(8, 6, 5, 2))
bp2 <- barplot(tabla_final$Porcentaje_hi,
               main      = "",
               xlab      = "",
               ylab      = "Porcentaje %",
               col       = c("gray30", "gray60", "gray85"),
               ylim      = c(0, max(tabla_final$Porcentaje_hi) * 1.2),
               names.arg = as.character(tabla_final$Nivel_Produccion),
               cex.names = 0.9,
               las       = 2)

mtext("Nivel de Producción", side = 1, line = 6, cex = 1)
mtext("Gráfica N°2: Distribución Porcentual por Nivel de Producción de los Pozos",
      side = 3, line = 2, adj = 0.5, cex = 0.9, font = 2)

text(x      = bp2,
     y      = tabla_final$Porcentaje_hi,
     labels = paste0(round(tabla_final$Porcentaje_hi, 2), "%"),
     pos    = 3, cex = 0.9, col = "black")

5.3 Gráfico circular porcentual

par(mar = c(5, 2, 4, 10), xpd = TRUE)

colores_grises <- c("gray30", "gray60", "gray85")

pie(tabla_final$Porcentaje_hi,
    main   = "",
    radius = 1,
    labels = paste0(round(tabla_final$Porcentaje_hi, 2), "%"),
    col    = colores_grises,
    cex    = 0.9)

mtext("Gráfica N°3: Distribución Porcentual por Nivel de Producción de los Pozos",
      side = 3, line = 2, adj = 0.5, cex = 0.9, font = 2)

legend(x      = 1.2,
       y      = 1,
       legend = as.character(tabla_final$Nivel_Produccion),
       fill   = colores_grises,
       cex    = 0.85,
       title  = "Nivel de Producción",
       bty    = "n")

6 Indicadores Estadísticos

Para la variable cualitativa ordinal Nivel de Producción, los indicadores de tendencia central aplicables son la moda y la mediana ordinal. La mediana se determina como la categoría que acumula el 50% de las observaciones, aprovechando el orden lógico de los niveles. La media, varianza y demás medidas de dispersión no aplican para este tipo de variable.

# Moda: categoría con mayor frecuencia
moda_produccion <- as.character(
  tabla_final$Nivel_Produccion[which.max(tabla_final$Frecuencia_ni)]
)

# Mediana ordinal: categoría donde la frecuencia acumulada supera el 50%
mediana_produccion <- as.character(
  tabla_final$Nivel_Produccion[which(cumsum(tabla_final$Frecuencia_ni) >= sum(tabla_final$Frecuencia_ni) / 2)[1]]
)

# Tabla de indicadores en formato largo (Indicador | Valor)
tabla_indicadores <- data.frame(
  Indicador = c(
    "Variable",
    "Tipo de variable",
    "Categorías (Rango)",
    "Moda (Mo)",
    "Mediana (Me)",
    "Media (X̄)",
    "Varianza (V)",
    "Desv. Estándar (Sd)",
    "Coef. Variación (CV%)",
    "Asimetría (As)",
    "Curtosis (K)"
  ),
  Valor = c(
    "Nivel de Producción",
    "Cualitativa Ordinal",
    "Bajo → Medio → Alto",
    moda_produccion,
    mediana_produccion,
    "—",
    "—",
    "—",
    "—",
    "—",
    "—"
  )
)

# Tabla GT de indicadores
tabla_indicadores %>%
  gt() %>%
  tab_header(
    title    = md("**Tabla N°2: Indicadores Estadísticos**"),
    subtitle = md("*Variable Cualitativa Ordinal: Nivel de Producción de los Pozos*")
  ) %>%
  cols_label(
    Indicador = md("**Indicador**"),
    Valor     = md("**Valor**")
  ) %>%
  tab_style(
    style = list(
      cell_fill(color = "#2C2C2C"),
      cell_text(color = "white", weight = "bold")
    ),
    locations = cells_column_labels()
  ) %>%
  tab_style(
    style = cell_fill(color = "#F5F5F5"),
    locations = cells_body(rows = seq(1, nrow(tabla_indicadores), by = 2))
  ) %>%
  tab_style(
    style = list(
      cell_fill(color = "#D6D6D6"),
      cell_text(weight = "bold")
    ),
    locations = cells_body(
      rows    = Indicador == "Moda (Mo)",
      columns = everything()
    )
  ) %>%
  tab_style(
    style = cell_text(style = "italic", color = "gray40"),
    locations = cells_body(
      rows    = Valor == "—",
      columns = Valor
    )
  ) %>%
  tab_source_note(source_note = md("*Autor: Fernando Almeida*")) %>%
  tab_options(
    table.width                = pct(60),
    heading.title.font.size    = px(16),
    heading.subtitle.font.size = px(12),
    table.font.size            = px(13),
    data_row.padding           = px(6)
  )
Tabla N°2: Indicadores Estadísticos
Variable Cualitativa Ordinal: Nivel de Producción de los Pozos
Indicador Valor
Variable Nivel de Producción
Tipo de variable Cualitativa Ordinal
Categorías (Rango) Bajo → Medio → Alto
Moda (Mo) Bajo
Mediana (Me) Medio
Media (X̄)
Varianza (V)
Desv. Estándar (Sd)
Coef. Variación (CV%)
Asimetría (As)
Curtosis (K)
Autor: Fernando Almeida

7 Conclusiones

La variable Nivel de Producción fluctúa entre (Bajo — Medio — Alto) sus valores giran en torno a medio y presenta que su valor más frecuente es Bajo, con una participación del 33.33% en la muestra.


Autor: Fernando Almeida