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("Base de datos cargada correctamente.\n")
## Base de datos 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 Profundidad (PROFUNDIDAD), clasificada en tres niveles: Superficial, Medio y Profundo, según los valores registrados en la columna DEPTH_LEVEL.

Clasificación en tres categorías ordinales:

datos <- datos %>%
  mutate(
    PROFUNDIDAD = case_when(
      DEPTH_LEVEL == "SHALLOW" ~ "Superficial",
      DEPTH_LEVEL == "MEDIUM"  ~ "Medio",
      DEPTH_LEVEL == "DEEP"    ~ "Profundo",
      TRUE                     ~ "No registrado"
    )
  ) %>%
  filter(PROFUNDIDAD != "No registrado")

3 Ordenamiento Lógico

Se establece el orden lógico de la variable cualitativa ordinal Nivel de Profundidad, respetando la progresión natural de las capas del subsuelo: desde la más cercana a la superficie hasta la más profunda. 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 (Superficial → Medio → Profundo)
orden_logico <- c("Superficial", "Medio", "Profundo")

# Aplicar factor ordenado a la variable PROFUNDIDAD
datos <- datos %>%
  mutate(
    PROFUNDIDAD = factor(PROFUNDIDAD, 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$PROFUNDIDAD), collapse = " → "), "\n")
## Superficial → Medio → Profundo
cat("\nDistribución por nivel:\n")
## 
## Distribución por nivel:
print(table(datos$PROFUNDIDAD))
## 
## Superficial       Medio    Profundo 
##       15986       15852       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_Profundidad = PROFUNDIDAD, .drop = FALSE) %>%
  summarise(Frecuencia_ni = n(), .groups = "drop") %>%
  arrange(Nivel_Profundidad)

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

# 3. Fila TOTAL
total_fila <- data.frame(
  Nivel_Profundidad = "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_Profundidad = as.character(Nivel_Profundidad),
                         Porcentaje_hi     = sprintf("%.2f", Porcentaje_hi)),
  total_fila  %>% mutate(Porcentaje_hi     = sprintf("%.2f", Porcentaje_hi))
)

# 5. Tabla final con gt (mismo estilo que tabla de indicadores)
resultado %>%
  rename(
    "Nivel de Profundidad" = Nivel_Profundidad,
    "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 Profundidad*")
  ) %>%
  cols_label(
    "Nivel de Profundidad" = md("**Nivel de Profundidad**"),
    "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 Profundidad` == "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 Profundidad
Nivel de Profundidad Frecuencia (ni) Porcentaje (hi%)
Superficial 15986 33.47
Medio 15852 33.19
Profundo 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 Profundidad de los Pozos.

5.1 Gráfica N°1 — Barras de 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_Profundidad),
        cex.names = 0.9,
        las       = 2)

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

5.2 Gráfica N°2 — Barras de porcentaje con etiquetas

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_Profundidad),
               cex.names = 0.9,
               las       = 2)

mtext("Nivel de Profundidad", side = 1, line = 6, cex = 1)
mtext("Gráfica N°2: Distribución Porcentual por Nivel de Profundidad 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áfica N°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 Profundidad 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_Profundidad),
       fill   = colores_grises,
       cex    = 0.85,
       title  = "Nivel de Profundidad",
       bty    = "n")

6 Indicadores Estadísticos

Para la variable cualitativa ordinal Nivel de Profundidad, los indicadores numéricos de tendencia central se limitan a la moda, ya que la media, mediana, varianza y demás medidas de dispersión no aplican para este tipo de variable.

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

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

# Tabla GT de indicadores
tabla_indicadores %>%
  gt() %>%
  tab_header(
    title    = md("**Tabla N°2: Indicadores Estadísticos**"),
    subtitle = md("*Variable Cualitativa Ordinal: Nivel de Profundidad 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 Profundidad de los Pozos
Indicador Valor
Variable Nivel de Profundidad
Tipo de variable Cualitativa Ordinal
Categorías (Rango) Superficial → Medio → Profundo
Moda (Mo) Superficial
Media (X̄)
Mediana (Me)
Varianza (V)
Desv. Estándar (Sd)
Coef. Variación (CV%)
Asimetría (As)
Curtosis (K)
Autor: Fernando Almeida

7 Conclusiones

La variable Nivel de profundidad fluctúa entre (Superficial — Medio — Profundo) y presenta que su valor más frecuente es Superficial, con una participación destacada en la muestra.


Autor: Fernando Almeida