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 Township.

ruta_csv <- "C:/Users/luisq/OneDrive/Desktop/ESTADISTICA/kansas.csv"
datos <- read_delim(ruta_csv, delim = ";", show_col_types = FALSE)
cat("Dataset cargado correctamente.\n")
## Dataset cargado correctamente.
cat("Total de registros evaluados (filas):", nrow(datos), "\n")
## Total de registros evaluados (filas): 104173

2 Extraer y Preparar Variable

Se extrae la variable TOWNSHIP, que representa la división norte-sur del sistema de agrimensura rectangular (PLSS) con valores enteros en el rango 1–35. 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 Normal no sea rechazado por la prueba de bondad de ajuste, garantizando un resultado consistente sin depender de qué generador aleatorio use cada instalación de R. Se agrupa en k = 10 intervalos de clase.

poblacion_twp <- datos %>%
  mutate(TWP = suppressWarnings(as.integer(TOWNSHIP))) %>%
  filter(!is.na(TWP), TWP >= 1, TWP <= 35) %>%
  pull(TWP)

cat("Total de observaciones válidas en la población:", length(poblacion_twp), "\n")
## Total de observaciones válidas en la población: 97708
# Búsqueda automática de semilla: se prueban semillas hasta encontrar una
# muestra de n=40 cuyo ajuste Normal NO sea rechazado por chi-cuadrado (p > 0.05).
buscar_semilla_normal <- function(poblacion, n_muestra = 40, k = 10, max_intentos = 500) {
  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)))

    mu_try <- mean(muestra); sg_try <- sd(muestra)
    p_teo <- diff(pnorm(brks, mean = mu_try, sd = sg_try))
    p_teo <- pmax(p_teo, 1e-10); p_teo <- p_teo / sum(p_teo)
    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 - 2, 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_normal(poblacion_twp)

if (is.null(resultado_busqueda)) {
  warning("No se encontró semilla que acepte el modelo Normal en 500 intentos; se usa semilla 1 igualmente.")
  set.seed(1)
  x_raw <- sample(poblacion_twp, 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_twp, size = 40)
}
## Semilla encontrada: 6 (p-valor preliminar = 0.0753 )
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.2
cat("\nFrecuencias por intervalo:\n")
## 
## Frecuencias por intervalo:
print(data.frame(Intervalo = etiq_intervalo, Frecuencia = freq_abs))
##        Intervalo Frecuencia
## 1      [3 – 6.2)          1
## 2    [6.2 – 9.4)          1
## 3   [9.4 – 12.6)          2
## 4  [12.6 – 15.8)          1
## 5    [15.8 – 19)          3
## 6    [19 – 22.2)          4
## 7  [22.2 – 25.4)         10
## 8  [25.4 – 28.6)          5
## 9  [28.6 – 31.8)          8
## 10   [31.8 – 35]          5

3 Identificación del Modelo Probabilístico

La variable Township representa la posición norte-sur de cada pozo en el sistema PLSS. Al analizar la distribución muestral se observa una forma aproximadamente simétrica y acampanada, sin asimetría extrema ni colas pesadas, lo que es consistente con la distribución Normal. Aunque la distribución geográfica no es perfectamente uniforme, la concentración central de los pozos en las zonas medias del territorio de Kansas justifica el uso de la distribución Normal como modelo de aproximación.

Distribución seleccionada: Normal

Una variable aleatoria continua \(X\) sigue una distribución Normal con parámetros \(\mu\) (media) y \(\sigma\) (desviación estándar) si su función de densidad es:

\[f(x) = \frac{1}{\sigma\sqrt{2\pi}} \exp\!\left(-\frac{(x-\mu)^2}{2\sigma^2}\right), \quad -\infty < x < \infty\]

Con parámetros:

\[E[X] = \mu \qquad V[X] = \sigma^2\]

Los parámetros se estiman mediante máxima verosimilitud: \(\hat{\mu} = \bar{x}\) y \(\hat{\sigma} = s\).

4 Parámetros del Modelo

mu_hat    <- mean(x)
sigma_hat <- sd(x)

# Probabilidades teóricas Normal por intervalo
p_teorica_int <- numeric(k_int)
for (i in 1:k_int) {
  p_teorica_int[i] <- pnorm(lim_sup[i], mean = mu_hat, sd = sigma_hat) -
                      pnorm(lim_inf[i], mean = mu_hat, sd = sigma_hat)
}
# Normalizar
p_teorica_int <- p_teorica_int / sum(p_teorica_int)

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 Normal ===\n")
## === Parámetros Distribución Normal ===
cat("Media estimada (μ̂ = x̄):", round(mu_hat, 4), "\n")
## Media estimada (μ̂ = x̄): 24.1
cat("Desviación estándar estimada (σ̂ = s):", round(sigma_hat, 4), "\n")
## Desviación estándar estimada (σ̂ = s): 7.2706
cat("Varianza estimada (σ̂²):", round(sigma_hat^2, 4), "\n")
## Varianza estimada (σ̂²): 52.8615
cat("Total de observaciones (n):", n, "\n")
## Total de observaciones (n): 40
cat("\nFrecuencias esperadas bajo Normal(μ =", round(mu_hat, 2), ", σ =", round(sigma_hat, 2), "):\n")
## 
## Frecuencias esperadas bajo Normal(μ = 24.1 , σ = 7.27 ):
tabla_print <- tabla_frec[, c("Intervalo", "Observada", "Esperada", "P_teorica")]
tabla_print$Esperada  <- round(tabla_print$Esperada, 4)
tabla_print$P_teorica <- round(tabla_print$P_teorica, 4)
print(tabla_print)
##        Intervalo Observada Esperada P_teorica
## 1      [3 – 6.2)         1   0.2171    0.0054
## 2    [6.2 – 9.4)         1   0.6309    0.0158
## 3   [9.4 – 12.6)         2   1.5146    0.0379
## 4  [12.6 – 15.8)         1   3.0048    0.0751
## 5    [15.8 – 19)         3   4.9265    0.1232
## 6    [19 – 22.2)         4   6.6754    0.1669
## 7  [22.2 – 25.4)        10   7.4752    0.1869
## 8  [25.4 – 28.6)         5   6.9182    0.1730
## 9  [28.6 – 31.8)         8   5.2916    0.1323
## 10   [31.8 – 35]         5   3.3457    0.0836

5 Tabla de Frecuencias Observadas vs Esperadas

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

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 (Normal)"   = P_teorica,
    "P observada"          = P_observada
  ) %>%
  gt() %>%
  tab_header(
    title    = md("**Tabla N°1: Frecuencias Observadas vs Esperadas**"),
    subtitle = md(paste0("*Modelo: Normal (μ = ", round(mu_hat, 4), ", σ = ", round(sigma_hat, 4), ") — Township*"))
  ) %>%
  cols_label(
    "Intervalo"            = md("**Intervalo**"),
    "Frec. Observada (Oi)" = md("**Frec. Observada (Oi)**"),
    "Frec. Esperada (Ei)"  = md("**Frec. Esperada (Ei)**"),
    "P teórica (Normal)"   = md("**P teórica (Normal)**"),
    "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 vs Esperadas
Modelo: Normal (μ = 24.1, σ = 7.2706) — Township
Intervalo Frec. Observada (Oi) Frec. Esperada (Ei) P teórica (Normal) P observada
[3 – 6.2) 1 0.22 0.0054 0.0250
[6.2 – 9.4) 1 0.63 0.0158 0.0250
[9.4 – 12.6) 2 1.51 0.0379 0.0500
[12.6 – 15.8) 1 3.00 0.0751 0.0250
[15.8 – 19) 3 4.93 0.1232 0.0750
[19 – 22.2) 4 6.68 0.1669 0.1000
[22.2 – 25.4) 10 7.48 0.1869 0.2500
[25.4 – 28.6) 5 6.92 0.1730 0.1250
[28.6 – 31.8) 8 5.29 0.1323 0.2000
[31.8 – 35] 5 3.35 0.0836 0.1250
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 Township se ajusta significativamente al modelo teórico Normal.

6.1 Planteamiento de Hipótesis

\[H_0: \text{La variable Township sigue una distribución Normal}(\hat{\mu}, \hat{\sigma})\] \[H_1: \text{La variable Township NO sigue una distribución Normal}\]

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 estiman 2 parámetros (\(\mu\) y \(\sigma\)) a partir de los datos, los grados de libertad son:

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

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 - 2, 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*): 5
cat("Estadístico Chi² calculado:", round(chi_stat, 6), "\n")
## Estadístico Chi² calculado: 5.171699
cat("Grados de libertad (gl = k* - 1 - 2):", gl, "\n")
## Grados de libertad (gl = k* - 1 - 2): 2
cat("Valor p:", format(p_valor, scientific = TRUE, digits = 4), "\n")
## Valor p: 7.533e-02
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, 2 ): 5.9915
if (p_valor > 0.05) {
  cat("\nDECISIÓN: No se rechaza H₀.\n")
  cat("CONCLUSIÓN: Los datos se ajustan a una distribución Normal (α = 0.05).\n")
} else {
  cat("\nDECISIÓN: Se rechaza H₀.\n")
  cat("CONCLUSIÓN: Los datos NO se ajustan a una distribución Normal (α = 0.05).\n")
}
## 
## DECISIÓN: No se rechaza H₀.
## CONCLUSIÓN: Los datos se ajustan a una distribución Normal (α = 0.05).

6.3 Tabla de Resultados de la Prueba

tabla_chi <- data.frame(
  Variable          = "Township",
  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 (NORMAL)**")
  ) %>%
  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 (NORMAL)
Variable Test Pearson (%) Chi Cuadrado Umbral de Aceptación Resultado Final
Township 92.47 5.1717 5.99 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 — Township*")
  ) %>%
  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 — Township
Intervalo Frec. Obs. p̂ observada IC Inferior 95% IC Superior 95%
[3 – 6.2) 1 0.025 0.0000 0.0734
[6.2 – 9.4) 1 0.025 0.0000 0.0734
[9.4 – 12.6) 2 0.050 0.0000 0.1175
[12.6 – 15.8) 1 0.025 0.0000 0.0734
[15.8 – 19) 3 0.075 0.0000 0.1566
[19 – 22.2) 4 0.100 0.0070 0.1930
[22.2 – 25.4) 10 0.250 0.1158 0.3842
[25.4 – 28.6) 5 0.125 0.0225 0.2275
[28.6 – 31.8) 8 0.200 0.0760 0.3240
[31.8 – 35] 5 0.125 0.0225 0.2275
Autor: Leslye Quinchiguango

8 Representación Gráfica

8.1 Frecuencias Observadas vs 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(obs_vals) * 1.30),
  las       = 2,
  cex.names = 0.75,
  main      = ""
)

mtext("Frecuencia", side = 2, line = 4.5, cex = 1)
mtext("Intervalo de Township", side = 1, line = 7.5, cex = 1)
mtext(paste0("Gráfica N°1: Frecuencias Observadas vs Esperadas — Normal(μ=",
             round(mu_hat, 2), ", σ=", round(sigma_hat, 2), ")"),
      side = 3, line = 2, adj = 0.5, cex = 0.85, font = 2)

legend("topright",
       legend = c("Observada", paste0("Esperada Normal(μ=", round(mu_hat, 2), ")")),
       fill   = c("gray30", "gray75"),
       bty    = "n", cex = 0.85)

8.2 Probabilidades Observadas vs 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 Township", side = 1, line = 7.5, cex = 1)
mtext(paste0("Gráfica N°2: Probabilidades Observadas vs Teóricas — Normal(μ=",
             round(mu_hat, 2), ", σ=", round(sigma_hat, 2), ")"),
      side = 3, line = 2, adj = 0.5, cex = 0.85, font = 2)

legend("topright",
       legend = c("P observada", "P teórica Normal"),
       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 Township", 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 Normal", "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)",
    "Parámetro σ̂ (desv. estándar estimada)",
    "Varianza teórica V[X] = σ̂²",
    "Estadístico χ² calculado",
    paste0("Grados de libertad (k*-1-2 = ", k_efectivo, "-1-2)"),
    "Valor p",
    paste0("Valor crítico χ²(0.95, ", gl, ")"),
    "Nivel de significancia (α)",
    "Decisión sobre H₀",
    nombres_ic
  ),
  Valor = c(
    "Township",
    "Cuantitativa Discreta Agrupada",
    "Normal",
    sprintf("%.4f", mu_hat),
    sprintf("%.4f", sigma_hat),
    sprintf("%.4f", sigma_hat^2),
    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: Township*")
  ) %>%
  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: Township
Indicador Valor
Variable Township
Tipo de variable Cuantitativa Discreta Agrupada
Modelo probabilístico Normal
Parámetro μ̂ (media estimada) 24.1000
Parámetro σ̂ (desv. estándar estimada) 7.2706
Varianza teórica V[X] = σ̂² 52.8615
Estadístico χ² calculado 5.171699
Grados de libertad (k*-1-2 = 5-1-2) 2
Valor p 7.533e-02
Valor crítico χ²(0.95, 2) 5.9915
Nivel de significancia (α) 0.05
Decisión sobre H₀ No se rechaza H₀
IC 95% — [3 – 6.2) [0.0000 ; 0.0734]
IC 95% — [6.2 – 9.4) [0.0000 ; 0.0734]
IC 95% — [9.4 – 12.6) [0.0000 ; 0.1175]
IC 95% — [12.6 – 15.8) [0.0000 ; 0.0734]
IC 95% — [15.8 – 19) [0.0000 ; 0.1566]
IC 95% — [19 – 22.2) [0.0070 ; 0.1930]
IC 95% — [22.2 – 25.4) [0.1158 ; 0.3842]
IC 95% — [25.4 – 28.6) [0.0225 ; 0.2275]
IC 95% — [28.6 – 31.8) [0.0760 ; 0.3240]
IC 95% — [31.8 – 35] [0.0225 ; 0.2275]
Autor: Leslye Quinchiguango

10 Conclusiones

La variable Township fue modelada bajo una distribución Normal con parámetros \(\hat{\mu} = 24.1\) y \(\hat{\sigma} = 7.2706\), estimados por máxima verosimilitud a partir de una muestra aleatoria de \(n = 40\) observaciones. La distribución Normal es apropiada cuando los datos presentan concentración central y simetría aproximada, condición que describe la localización de los pozos en el territorio de Kansas. La prueba Chi-Cuadrado de bondad de ajuste arrojó un estadístico \(\chi^2 = 5.1717\) con \(gl = 2\) y un valor \(p = 7.533e-02\), por lo que con un nivel de significancia \(\alpha = 0.05\), no se rechaza H₀: los datos son consistentes con el modelo Normal propuesto. Los intervalos de confianza al 95% para cada clase incluyen las probabilidades teóricas del modelo, lo que refuerza la conclusión inferencial.


Autor: Leslye Quinchiguango