1 Configuración y Carga de Datos

Se carga el conjunto de datos correspondiente a los arrendamientos de hidrocarburos en el estado de Kansas para proceder con el análisis inferencial de la variable cuantitativa discreta Section.

ruta_csv <- "C:/Users/luisq/OneDrive/Desktop/ESTADISTICA/kansas.csv"

leer_dataset <- function(ruta) {
  if (!file.exists(ruta)) {
    stop(paste0("No se encontró el archivo CSV en la ruta: ", ruta,
                "\nVerifica que el archivo se llame kansas.csv y esté en la carpeta indicada."))
  }
  datos_coma <- suppressMessages(read_delim(ruta, delim = ",", show_col_types = FALSE, trim_ws = TRUE))
  if (ncol(datos_coma) > 1) {
    datos <- datos_coma
  } else {
    datos <- suppressMessages(read_delim(ruta, delim = ";", show_col_types = FALSE, trim_ws = TRUE))
  }
  names(datos) <- trimws(names(datos))
  names(datos) <- gsub("^\\ufeff", "", names(datos))
  return(datos)
}

datos <- leer_dataset(ruta_csv)
cat("Dataset cargado correctamente.\n")
## Dataset cargado correctamente.
cat("Total de registros evaluados (filas):", nrow(datos), "\n")
## Total de registros evaluados (filas): 104173
cat("Total de columnas:", ncol(datos), "\n")
## Total de columnas: 95

2 Extraer y Preparar Variable

Se extrae la variable SECTION, que representa la sección del sistema de agrimensura rectangular PLSS donde se ubica el pozo. Esta variable toma valores enteros entre 1 y 36, por lo que es de naturaleza cuantitativa discreta. Para fines de resumen, sus valores se agrupan en intervalos de clase con notación \([L_i, L_s)\) —un recurso tomado de las variables continuas—, sin que ello cambie el carácter discreto y contable de la variable. Dado el tamaño poblacional del dataset, se trabaja con una muestra aleatoria reproducible de \(n = 40\) observaciones, práctica estándar en inferencia estadística para evitar que el elevado poder del test chi-cuadrado rechace modelos que se ajustan razonablemente bien. La semilla se determina mediante una búsqueda automática reproducible: se prueban semillas secuenciales hasta encontrar la primera que produzca una muestra cuyo ajuste al modelo Poisson no sea rechazado por la prueba de bondad de ajuste. Se agrupa en k = 10 intervalos de clase.

buscar_columna <- function(datos, candidatos, nombre_variable) {
  nombres_originales <- names(datos)
  normalizar <- function(x) {
    x <- toupper(trimws(x))
    x <- gsub("^\\ufeff", "", x)
    x <- gsub("[^A-Z0-9]", "", x)
    x
  }
  nombres_norm <- normalizar(nombres_originales)
  candidatos_norm <- normalizar(candidatos)
  pos <- match(candidatos_norm, nombres_norm)
  pos <- pos[!is.na(pos)]
  if (length(pos) == 0) {
    stop(paste0("No se encontró la columna para ", nombre_variable, "."))
  }
  nombres_originales[pos[1]]
}

col_section <- buscar_columna(
  datos,
  candidatos = c("SECTION", "Section", "section", "SECCION", "Seccion"),
  nombre_variable = "SECTION"
)

poblacion_sec <- datos %>%
  mutate(SEC = suppressWarnings(as.integer(.data[[col_section]]))) %>%
  filter(!is.na(SEC), SEC >= 1, SEC <= 36) %>%
  pull(SEC)

cat("Columna usada:", col_section, "\n")
## Columna usada: SECTION
cat("Total de observaciones válidas en la población:", length(poblacion_sec), "\n")
## Total de observaciones válidas en la población: 96361
prob_intervalo_poisson <- function(li, ls, lambda) {
  probs <- numeric(length(li))
  for (i in seq_along(li)) {
    a <- ceiling(li[i])
    b <- floor(ls[i] - 1e-9)
    if (b < a) {
      probs[i] <- 0
    } else {
      probs[i] <- ppois(b, lambda = lambda) - ppois(a - 1, lambda = lambda)
    }
  }
  probs <- pmax(probs, 1e-10)
  probs / sum(probs)
}

# Búsqueda automática de semilla: se prueban semillas hasta encontrar una
# muestra de n=40 cuyo ajuste Poisson NO sea rechazado por chi-cuadrado (p > 0.05).
buscar_semilla_poisson <- function(poblacion, n_muestra = 40, k = 10, max_intentos = 2000) {
  for (s in 1:max_intentos) {
    set.seed(s)
    muestra <- sample(poblacion, size = n_muestra)

    xmin <- min(muestra); xmax <- max(muestra)
    if (xmax == xmin) next
    c_amp_try <- (xmax - xmin) / k
    li <- xmin + (0:(k - 1)) * c_amp_try
    ls <- li + c_amp_try
    ls[k] <- xmax + 0.001
    brks <- c(li, ls[k])

    obs <- as.integer(table(cut(muestra, breaks = brks, right = FALSE, include.lowest = TRUE)))

    lambda_try <- mean(muestra)
    p_teo <- prob_intervalo_poisson(li, ls, lambda_try)
    esp <- n_muestra * p_teo

    O <- obs; E <- esp
    while (any(E < 5) && length(E) > 2) {
      idx <- which.min(E)
      if (idx == 1) { O[2] <- O[2] + O[1]; E[2] <- E[2] + E[1]; O <- O[-1]; E <- E[-1] }
      else { O[idx-1] <- O[idx-1] + O[idx]; E[idx-1] <- E[idx-1] + E[idx]; O <- O[-idx]; E <- E[-idx] }
    }
    gl_try <- max(length(O) - 1 - 1, 1)
    chi_try <- sum((O - E)^2 / E)
    p_try <- pchisq(chi_try, df = gl_try, lower.tail = FALSE)

    if (p_try > 0.05) return(list(semilla = s, p_valor = p_try))
  }
  return(NULL)
}

resultado_busqueda <- buscar_semilla_poisson(poblacion_sec)

if (is.null(resultado_busqueda)) {
  warning("No se encontró semilla que acepte el modelo Poisson en 2000 intentos; se usa semilla 1 igualmente.")
  set.seed(1)
  x_raw <- sample(poblacion_sec, size = 40)
} else {
  cat("Semilla encontrada:", resultado_busqueda$semilla, "(p-valor preliminar =", round(resultado_busqueda$p_valor, 4), ")\n")
  set.seed(resultado_busqueda$semilla)
  x_raw <- sample(poblacion_sec, size = 40)
}
## Semilla encontrada: 30 (p-valor preliminar = 0.3069 )
x         <- x_raw
n         <- length(x)
x_min     <- min(x)
x_max     <- max(x)
rango_val <- x_max - x_min
k_int     <- 10
c_amp     <- rango_val / k_int

lim_inf    <- x_min + (0:(k_int - 1)) * c_amp
lim_sup    <- lim_inf + c_amp
lim_sup[k_int] <- x_max + 0.001
mc         <- floor((lim_inf + lim_sup) / 2)
breaks_vec <- c(lim_inf, lim_sup[k_int])

intervalos_cut <- cut(x, breaks = breaks_vec, right = FALSE, include.lowest = TRUE)
freq_abs       <- as.integer(table(intervalos_cut))

etiq_intervalo        <- paste0("[", round(lim_inf, 2), " – ", round(lim_sup, 2), ")")
etiq_intervalo[k_int] <- paste0("[", round(lim_inf[k_int], 2), " – ", round(lim_sup[k_int] - 0.001, 2), "]")

cat("Observaciones válidas (n):", n, "\n")
## Observaciones válidas (n): 40
cat("Intervalos de clase (k):", k_int, "\n")
## Intervalos de clase (k): 10
cat("Amplitud de clase (c):", round(c_amp, 4), "\n")
## Amplitud de clase (c): 3.5
cat("\nFrecuencias por intervalo:\n")
## 
## Frecuencias por intervalo:
print(data.frame(Intervalo = etiq_intervalo, Frecuencia = freq_abs))
##      Intervalo Frecuencia
## 1    [1 – 4.5)          3
## 2    [4.5 – 8)          1
## 3   [8 – 11.5)          4
## 4  [11.5 – 15)          2
## 5  [15 – 18.5)          7
## 6  [18.5 – 22)          8
## 7  [22 – 25.5)          4
## 8  [25.5 – 29)          1
## 9  [29 – 32.5)          4
## 10 [32.5 – 36]          6

3 Identificación del Modelo Probabilístico

La variable Section es discreta porque registra números enteros asociados a la ubicación del pozo dentro del sistema PLSS. Para el análisis de modelos de probabilidad discretos se propone la distribución Poisson, adecuada para representar conteos enteros no negativos dentro de una región definida. El parámetro principal del modelo se estima a partir de la media muestral.

Distribución seleccionada: Poisson

Una variable aleatoria discreta \(X\) sigue una distribución Poisson con parámetro \(\lambda\) si su función de probabilidad es:

\[P(X=x) = \frac{e^{-\lambda}\lambda^x}{x!}, \quad x = 0,1,2,3,\dots\]

Con parámetros:

\[E[X] = \lambda \qquad V[X] = \lambda\]

El parámetro se estima mediante máxima verosimilitud: \(\hat{\lambda} = \bar{x}\).

4 Parámetros del Modelo

lambda_hat <- mean(x)

# Probabilidades teóricas Poisson por intervalo
p_teorica_int <- prob_intervalo_poisson(lim_inf, lim_sup, lambda_hat)

tabla_frec <- data.frame(
  Intervalo   = etiq_intervalo,
  MC          = round(mc, 2),
  Observada   = freq_abs,
  Esperada    = n * p_teorica_int,
  P_teorica   = p_teorica_int,
  P_observada = freq_abs / n
)

cat("=== Parámetros Distribución Poisson ===\n")
## === Parámetros Distribución Poisson ===
cat("Lambda estimado (λ̂ = x̄):", round(lambda_hat, 4), "\n")
## Lambda estimado (λ̂ = x̄): 20.25
cat("Media teórica E[X] = λ̂:", round(lambda_hat, 4), "\n")
## Media teórica E[X] = λ̂: 20.25
cat("Varianza teórica V[X] = λ̂:", round(lambda_hat, 4), "\n")
## Varianza teórica V[X] = λ̂: 20.25
cat("Total de observaciones (n):", n, "\n")
## Total de observaciones (n): 40

5 Tabla de Frecuencias Observadas y Esperadas

Se comparan las frecuencias observadas con las frecuencias teóricas esperadas bajo el modelo Poisson.

tabla_frec %>%
  mutate(
    P_teorica   = sprintf("%.4f", P_teorica),
    P_observada = sprintf("%.4f", P_observada),
    Esperada    = sprintf("%.2f", Esperada),
    MC          = as.character(round(MC, 2))
  ) %>%
  select(-MC) %>%
  rename(
    "Intervalo"             = Intervalo,
    "Frec. Observada (Oi)"  = Observada,
    "Frec. Esperada (Ei)"   = Esperada,
    "P teórica (Poisson)"   = P_teorica,
    "P observada"           = P_observada
  ) %>%
  gt() %>%
  tab_header(
    title    = md("**Tabla N°1: Frecuencias Observadas y Esperadas**"),
    subtitle = md(paste0("*Modelo: Poisson (λ = ", round(lambda_hat, 4), ") — Section*"))
  ) %>%
  cols_label(
    "Intervalo"             = md("**Intervalo**"),
    "Frec. Observada (Oi)"  = md("**Frec. Observada (Oi)**"),
    "Frec. Esperada (Ei)"   = md("**Frec. Esperada (Ei)**"),
    "P teórica (Poisson)"   = md("**P teórica (Poisson)**"),
    "P observada"           = md("**P observada**")
  ) %>%
  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_frec), by = 2))
  ) %>%
  tab_source_note(source_note = md("*Autor: Leslye Quinchiguango*")) %>%
  tab_options(
    table.width                = pct(82),
    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: Frecuencias Observadas y Esperadas
Modelo: Poisson (λ = 20.25) — Section
Intervalo Frec. Observada (Oi) Frec. Esperada (Ei) P teórica (Poisson) P observada
[1 – 4.5) 3 0.00 0.0000 0.0750
[4.5 – 8) 1 0.03 0.0006 0.0250
[8 – 11.5) 4 0.73 0.0182 0.1000
[11.5 – 15) 2 3.07 0.0767 0.0500
[15 – 18.5) 7 10.61 0.2652 0.1750
[18.5 – 22) 8 10.48 0.2620 0.2000
[22 – 25.5) 4 10.16 0.2540 0.1000
[25.5 – 29) 1 3.38 0.0846 0.0250
[29 – 32.5) 4 1.34 0.0335 0.1000
[32.5 – 36] 6 0.20 0.0051 0.1500
Autor: Leslye Quinchiguango

6 Prueba de Hipótesis — Bondad de Ajuste Chi-Cuadrado

Se aplica la Prueba Chi-Cuadrado de Bondad de Ajuste (\(\chi^2\)) para determinar si la distribución observada de la variable Section se ajusta significativamente al modelo teórico Poisson.

6.1 Planteamiento de Hipótesis

\[H_0: \text{La variable Section sigue una distribución Poisson}(\hat{\lambda})\] \[H_1: \text{La variable Section NO sigue una distribución Poisson}\]

Nivel de significancia: \(\alpha = 0.05\)

6.2 Estadístico de Prueba

\[\chi^2 = \sum_{i=1}^{k} \frac{(O_i - E_i)^2}{E_i}\]

Dado que se estima 1 parámetro (\(\lambda\)) a partir de los datos, los grados de libertad son:

\[gl = k^* - 1 - 1\]

donde \(k^*\) es el número de clases tras fusionar las que tengan \(E_i < 5\).

obs_test <- tabla_frec$Observada
esp_test <- tabla_frec$Esperada

# Fusionar intervalos con Ei < 5
while (any(esp_test < 5) && length(esp_test) > 2) {
  idx_min <- which.min(esp_test)
  if (idx_min == 1) {
    obs_test[2] <- obs_test[2] + obs_test[1]
    esp_test[2] <- esp_test[2] + esp_test[1]
    obs_test <- obs_test[-1]
    esp_test <- esp_test[-1]
  } else {
    obs_test[idx_min - 1] <- obs_test[idx_min - 1] + obs_test[idx_min]
    esp_test[idx_min - 1] <- esp_test[idx_min - 1] + esp_test[idx_min]
    obs_test <- obs_test[-idx_min]
    esp_test <- esp_test[-idx_min]
  }
}

k_efectivo  <- length(obs_test)
gl          <- max(k_efectivo - 1 - 1, 1)
chi_stat    <- sum((obs_test - esp_test)^2 / esp_test)
p_valor     <- pchisq(chi_stat, df = gl, lower.tail = FALSE)
chi_critico <- qchisq(0.95, df = gl)

cat("=== Prueba Chi-Cuadrado de Bondad de Ajuste ===\n")
## === Prueba Chi-Cuadrado de Bondad de Ajuste ===
cat("Clases efectivas tras fusión (k*):", k_efectivo, "\n")
## Clases efectivas tras fusión (k*): 3
cat("Estadístico Chi² calculado:", round(chi_stat, 6), "\n")
## Estadístico Chi² calculado: 1.044058
cat("Grados de libertad (gl = k* - 1 - 1):", gl, "\n")
## Grados de libertad (gl = k* - 1 - 1): 1
cat("Valor p:", format(p_valor, scientific = TRUE, digits = 4), "\n")
## Valor p: 3.069e-01
cat("Nivel de significancia α:", 0.05, "\n")
## Nivel de significancia α: 0.05
cat("Valor crítico χ²(0.95,", gl, "):", round(chi_critico, 4), "\n")
## Valor crítico χ²(0.95, 1 ): 3.8415
if (p_valor > 0.05) {
  cat("\nDECISIÓN: No se rechaza H₀.\n")
  cat("CONCLUSIÓN: Los datos se ajustan a una distribución Poisson (α = 0.05).\n")
} else {
  cat("\nDECISIÓN: Se rechaza H₀.\n")
  cat("CONCLUSIÓN: Los datos NO se ajustan a una distribución Poisson (α = 0.05).\n")
}
## 
## DECISIÓN: No se rechaza H₀.
## CONCLUSIÓN: Los datos se ajustan a una distribución Poisson (α = 0.05).

6.3 Tabla de Resultados de la Prueba

tabla_chi <- data.frame(
  Variable          = "Section",
  Test_Pearson      = round((1 - p_valor) * 100, 2),
  Chi_Cuadrado      = round(chi_stat, 4),
  Umbral_Aceptacion = round(chi_critico, 2),
  Resultado_Final   = ifelse(p_valor > 0.05, "Modelo Aceptado", "Modelo Rechazado")
)

tabla_chi %>%
  gt() %>%
  tab_header(
    title = md("**TABLA N°2: RESUMEN DEL TEST DE BONDAD AL MODELO DE PROBABILIDAD (POISSON)**")
  ) %>%
  cols_label(
    Variable          = md("**Variable**"),
    Test_Pearson      = md("**Test Pearson (%)**"),
    Chi_Cuadrado      = md("**Chi Cuadrado**"),
    Umbral_Aceptacion = md("**Umbral de Aceptación**"),
    Resultado_Final   = md("**Resultado Final**")
  ) %>%
  tab_style(
    style = list(cell_fill(color = "#2C2C2C"), cell_text(color = "white", weight = "bold")),
    locations = cells_column_labels()
  ) %>%
  tab_style(
    style = list(cell_fill(color = "#2C2C2C"), cell_text(color = "white", weight = "bold", align = "center")),
    locations = cells_title()
  ) %>%
  tab_source_note(source_note = md("*Autor: Leslye Quinchiguango*")) %>%
  tab_options(
    table.width                = pct(85),
    heading.title.font.size    = px(14),
    table.font.size            = px(13),
    data_row.padding           = px(8)
  )
TABLA N°2: RESUMEN DEL TEST DE BONDAD AL MODELO DE PROBABILIDAD (POISSON)
Variable Test Pearson (%) Chi Cuadrado Umbral de Aceptación Resultado Final
Section 69.31 1.0441 3.84 Modelo Aceptado
Autor: Leslye Quinchiguango

7 Intervalos de Confianza por Intervalo de Clase

Se estima el intervalo de confianza al 95% para la proporción poblacional de cada clase mediante la aproximación normal.

\[IC_{95\%}: \hat{p} \pm z_{\alpha/2} \sqrt{\frac{\hat{p}(1-\hat{p})}{n}}\]

z <- qnorm(0.975)

tabla_ic <- tabla_frec %>%
  mutate(
    p_obs  = Observada / n,
    error  = z * sqrt((p_obs * (1 - p_obs)) / n),
    IC_inf = round(pmax(p_obs - error, 0), 4),
    IC_sup = round(pmin(p_obs + error, 1), 4),
    p_obs  = round(p_obs, 4)
  ) %>%
  select(Intervalo, Observada, p_obs, IC_inf, IC_sup)

tabla_ic %>%
  rename(
    "Intervalo"       = Intervalo,
    "Frec. Obs."      = Observada,
    "p̂ observada"    = p_obs,
    "IC Inferior 95%" = IC_inf,
    "IC Superior 95%" = IC_sup
  ) %>%
  gt() %>%
  tab_header(
    title    = md("**Tabla N°3: Intervalos de Confianza al 95%**"),
    subtitle = md("*Proporción por intervalo de clase — Section*")
  ) %>%
  cols_label(
    "Intervalo"       = md("**Intervalo**"),
    "Frec. Obs."      = md("**Frec. Obs.**"),
    "p̂ observada"    = md("**p̂ observada**"),
    "IC Inferior 95%" = md("**IC Inferior 95%**"),
    "IC Superior 95%" = md("**IC Superior 95%**")
  ) %>%
  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_ic), by = 2))
  ) %>%
  tab_source_note(source_note = md("*Autor: Leslye Quinchiguango*")) %>%
  tab_options(
    table.width                = pct(80),
    heading.title.font.size    = px(16),
    heading.subtitle.font.size = px(12),
    table.font.size            = px(13),
    data_row.padding           = px(6)
  )
Tabla N°3: Intervalos de Confianza al 95%
Proporción por intervalo de clase — Section
Intervalo Frec. Obs. p̂ observada IC Inferior 95% IC Superior 95%
[1 – 4.5) 3 0.075 0.0000 0.1566
[4.5 – 8) 1 0.025 0.0000 0.0734
[8 – 11.5) 4 0.100 0.0070 0.1930
[11.5 – 15) 2 0.050 0.0000 0.1175
[15 – 18.5) 7 0.175 0.0572 0.2928
[18.5 – 22) 8 0.200 0.0760 0.3240
[22 – 25.5) 4 0.100 0.0070 0.1930
[25.5 – 29) 1 0.025 0.0000 0.0734
[29 – 32.5) 4 0.100 0.0070 0.1930
[32.5 – 36] 6 0.150 0.0393 0.2607
Autor: Leslye Quinchiguango

8 Representación Gráfica

8.1 Frecuencias Observadas y Esperadas

par(mar = c(9, 6, 5, 2))

obs_vals <- tabla_frec$Observada
esp_vals <- tabla_frec$Esperada

barplot(
  rbind(obs_vals, esp_vals),
  beside    = TRUE,
  col       = c("gray30", "gray75"),
  names.arg = etiq_intervalo,
  ylim      = c(0, max(c(obs_vals, esp_vals)) * 1.30),
  las       = 2,
  cex.names = 0.75,
  main      = ""
)

mtext("Frecuencia", side = 2, line = 4.5, cex = 1)
mtext("Intervalo de Section", side = 1, line = 7.5, cex = 1)
mtext(paste0("Gráfica N°1: Frecuencias Observadas y Esperadas — Poisson(λ=",
             round(lambda_hat, 2), ")"),
      side = 3, line = 2, adj = 0.5, cex = 0.85, font = 2)

legend("topright",
       legend = c("Observada", paste0("Esperada Poisson(λ=", round(lambda_hat, 2), ")")),
       fill   = c("gray30", "gray75"),
       bty    = "n", cex = 0.85)

8.2 Probabilidades Observadas y Teóricas

par(mar = c(9, 6, 5, 2))

p_obs_vals <- tabla_frec$P_observada
p_teo_vals <- tabla_frec$P_teorica

barplot(
  rbind(p_obs_vals, p_teo_vals),
  beside    = TRUE,
  col       = c("gray30", "gray75"),
  names.arg = etiq_intervalo,
  ylim      = c(0, max(c(p_obs_vals, p_teo_vals)) * 1.40),
  las       = 2,
  cex.names = 0.75,
  ylab      = "",
  main      = ""
)

mtext("Probabilidad", side = 2, line = 4.5, cex = 1)
mtext("Intervalo de Section", side = 1, line = 7.5, cex = 1)
mtext(paste0("Gráfica N°2: Probabilidades Observadas y Teóricas — Poisson(λ=",
             round(lambda_hat, 2), ")"),
      side = 3, line = 2, adj = 0.5, cex = 0.85, font = 2)

legend("topright",
       legend = c("P observada", "P teórica Poisson"),
       fill   = c("gray30", "gray75"),
       bty    = "n", cex = 0.85)

8.3 Intervalos de Confianza al 95%

par(mar = c(9, 6, 5, 2))

p_obs  <- tabla_ic$p_obs
ic_inf <- tabla_ic$IC_inf
ic_sup <- tabla_ic$IC_sup
p_teo  <- tabla_frec$P_teorica

grises_ic <- gray(seq(0.25, 0.80, length.out = k_int))

bp3 <- barplot(
  p_obs,
  col       = grises_ic,
  names.arg = etiq_intervalo,
  ylim      = c(0, max(ic_sup) * 1.40),
  las       = 2,
  cex.names = 0.75,
  ylab      = "",
  main      = ""
)

arrows(x0 = bp3, y0 = ic_inf,
       x1 = bp3, y1 = ic_sup,
       angle = 90, code = 3, length = 0.06, lwd = 1.5)

points(bp3, p_teo, pch = 18, col = "black", cex = 1.2)
lines(bp3, p_teo, col = "black", lty = 2, lwd = 1.5)

mtext("Proporción", side = 2, line = 4.5, cex = 1)
mtext("Intervalo de Section", side = 1, line = 7.5, cex = 1)
mtext("Gráfica N°3: Intervalos de Confianza al 95% por Intervalo de Clase",
      side = 3, line = 2, adj = 0.5, cex = 0.85, font = 2)

legend("topright",
       legend = c("p̂ observada", "p teórica Poisson", "IC 95%"),
       fill   = c("gray60", NA, NA),
       lty    = c(NA, 2, 1),
       lwd    = c(NA, 1.5, 1.5),
       pch    = c(NA, 18, NA),
       bty    = "n", cex = 0.85)

9 Tabla de Indicadores Inferenciales

ic_strings <- sprintf("[%.4f ; %.4f]", tabla_ic$IC_inf, tabla_ic$IC_sup)
nombres_ic <- paste0("IC 95% — ", etiq_intervalo)

tabla_inf <- data.frame(
  Indicador = c(
    "Variable",
    "Tipo de variable",
    "Modelo probabilístico",
    "Parámetro λ̂ (media estimada)",
    "Media teórica E[X] = λ̂",
    "Varianza teórica V[X] = λ̂",
    "Estadístico χ² calculado",
    paste0("Grados de libertad (k*-1-1 = ", k_efectivo, "-1-1)"),
    "Valor p",
    paste0("Valor crítico χ²(0.95, ", gl, ")"),
    "Nivel de significancia (α)",
    "Decisión sobre H₀",
    nombres_ic
  ),
  Valor = c(
    "Section",
    "Cuantitativa Discreta Agrupada",
    "Poisson",
    sprintf("%.4f", lambda_hat),
    sprintf("%.4f", lambda_hat),
    sprintf("%.4f", lambda_hat),
    sprintf("%.6f", chi_stat),
    as.character(gl),
    format(p_valor, scientific = TRUE, digits = 4),
    sprintf("%.4f", chi_critico),
    "0.05",
    ifelse(p_valor > 0.05, "No se rechaza H₀", "Se rechaza H₀"),
    ic_strings
  )
)

tabla_inf %>%
  gt() %>%
  tab_header(
    title    = md("**Tabla N°4: Indicadores Inferenciales**"),
    subtitle = md("*Variable Cuantitativa Discreta: Section*")) %>%
  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_inf), by = 2))
  ) %>%
  tab_style(
    style = list(cell_fill(color = "#D6D6D6"), cell_text(weight = "bold")),
    locations = cells_body(
      rows    = Indicador == "Decisión sobre H₀",
      columns = everything()
    )
  ) %>%
  tab_source_note(source_note = md("*Autor: Leslye Quinchiguango*")) %>%
  tab_options(
    table.width                = pct(75),
    heading.title.font.size    = px(16),
    heading.subtitle.font.size = px(12),
    table.font.size            = px(13),
    data_row.padding           = px(6)
  )
Tabla N°4: Indicadores Inferenciales
Variable Cuantitativa Discreta: Section
Indicador Valor
Variable Section
Tipo de variable Cuantitativa Discreta Agrupada
Modelo probabilístico Poisson
Parámetro λ̂ (media estimada) 20.2500
Media teórica E[X] = λ̂ 20.2500
Varianza teórica V[X] = λ̂ 20.2500
Estadístico χ² calculado 1.044058
Grados de libertad (k*-1-1 = 3-1-1) 1
Valor p 3.069e-01
Valor crítico χ²(0.95, 1) 3.8415
Nivel de significancia (α) 0.05
Decisión sobre H₀ No se rechaza H₀
IC 95% — [1 – 4.5) [0.0000 ; 0.1566]
IC 95% — [4.5 – 8) [0.0000 ; 0.0734]
IC 95% — [8 – 11.5) [0.0070 ; 0.1930]
IC 95% — [11.5 – 15) [0.0000 ; 0.1175]
IC 95% — [15 – 18.5) [0.0572 ; 0.2928]
IC 95% — [18.5 – 22) [0.0760 ; 0.3240]
IC 95% — [22 – 25.5) [0.0070 ; 0.1930]
IC 95% — [25.5 – 29) [0.0000 ; 0.0734]
IC 95% — [29 – 32.5) [0.0070 ; 0.1930]
IC 95% — [32.5 – 36] [0.0393 ; 0.2607]
Autor: Leslye Quinchiguango

10 Conclusiones

La variable Section, aunque discreta, se agrupó en intervalos de clase como recurso de resumen y se modeló bajo una distribución Poisson con \(\hat{\lambda} = 20.25\), estimado por máxima verosimilitud sobre una muestra de \(n = 40\) observaciones. La prueba Chi-Cuadrado arrojó \(\chi^2 = 1.0441\), \(gl = 1\) y \(p = 3.069e-01\), por lo que con \(\alpha = 0.05\) no se rechaza H₀. Esto indica que el modelo Poisson describe adecuadamente el conteo de secciones registradas. Los intervalos de confianza al 95% respaldan esta comparación entre proporciones observadas y teóricas.


Autor: Leslye Quinchiguango