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. Se agrupa en k = 10 intervalos de clase para su tratamiento inferencial.

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

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     <- ceiling(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 + 1
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("[", lim_inf, " – ", lim_sup, ")")
etiq_intervalo[k_int]  <- paste0("[", lim_inf[k_int], " – ", lim_sup[k_int] - 1, "]")

cat("Observaciones válidas (n):", n, "\n")
## Observaciones válidas (n): 97708
cat("Intervalos de clase (k):", k_int, "\n")
## Intervalos de clase (k): 10
cat("Amplitud de clase (c):", c_amp, "\n")
## Amplitud de clase (c): 4
cat("\nFrecuencias por intervalo:\n")
## 
## Frecuencias por intervalo:
print(data.frame(Intervalo = etiq_intervalo, Frecuencia = freq_abs))
##    Intervalo Frecuencia
## 1    [1 – 5)       2830
## 2    [5 – 9)       3203
## 3   [9 – 13)       5657
## 4  [13 – 17)      10826
## 5  [17 – 21)      11952
## 6  [21 – 25)      11621
## 7  [25 – 29)      14128
## 8  [29 – 33)      21248
## 9  [33 – 37)      16243
## 10 [37 – 35]          0

3 Identificación del Modelo Probabilístico

La variable Township es una variable cuantitativa discreta agrupada en k = 10 intervalos que representan posiciones geográficas norte-sur. Dado que el sistema de agrimensura PLSS asigna los townships de forma sistemática a lo largo del territorio, sin concentración preferencial en ninguna zona, se espera que cada intervalo tenga una probabilidad similar de ser observado.

Distribución seleccionada: Uniforme Discreta

Una variable aleatoria discreta \(X\) sigue una distribución Uniforme Discreta con \(k\) clases posibles si:

\[P(X = x_i) = \frac{1}{k}, \quad i = 1, 2, \ldots, k\]

En este caso \(k = 10\), por lo tanto la probabilidad teórica de cada intervalo bajo \(H_0\) es:

\[P(X = x_i) = \frac{1}{10} = 0.1000\]

4 Parámetros del Modelo

k          <- k_int
p_teorica  <- 1 / k

tabla_frec <- data.frame(
  Intervalo   = etiq_intervalo,
  Observada   = freq_abs,
  Esperada    = n * p_teorica,
  P_teorica   = p_teorica,
  P_observada = freq_abs / n
)

media_uniforme    <- (1 + k) / 2
varianza_uniforme <- (k^2 - 1) / 12

cat("=== Parámetros Uniforme Discreta ===\n")
## === Parámetros Uniforme Discreta ===
cat("Número de intervalos (k):", k, "\n")
## Número de intervalos (k): 10
cat("Probabilidad teórica por clase (p):", round(p_teorica, 4), "\n")
## Probabilidad teórica por clase (p): 0.1
cat("Media teórica E[X]:", round(media_uniforme, 4), "\n")
## Media teórica E[X]: 5.5
cat("Varianza teórica V[X]:", round(varianza_uniforme, 4), "\n")
## Varianza teórica V[X]: 8.25
cat("Total de observaciones (n):", n, "\n")
## Total de observaciones (n): 97708
cat("Frecuencia esperada por clase (E):", round(n * p_teorica, 2), "\n")
## Frecuencia esperada por clase (E): 9770.8

5 Tabla de Frecuencias Observadas vs Esperadas

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

tabla_frec %>%
  mutate(
    P_teorica   = sprintf("%.4f", P_teorica),
    P_observada = sprintf("%.4f", P_observada),
    Esperada    = sprintf("%.2f", Esperada)
  ) %>%
  rename(
    "Intervalo"            = Intervalo,
    "Frec. Observada (Oi)" = Observada,
    "Frec. Esperada (Ei)"  = Esperada,
    "P teórica"            = P_teorica,
    "P observada"          = P_observada
  ) %>%
  gt() %>%
  tab_header(
    title    = md("**Tabla N°1: Frecuencias Observadas vs Esperadas**"),
    subtitle = md("*Modelo: Uniforme Discreta — Township*")
  ) %>%
  cols_label(
    "Intervalo"            = md("**Intervalo**"),
    "Frec. Observada (Oi)" = md("**Frec. Observada (Oi)**"),
    "Frec. Esperada (Ei)"  = md("**Frec. Esperada (Ei)**"),
    "P teórica"            = md("**P teórica**"),
    "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(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°1: Frecuencias Observadas vs Esperadas
Modelo: Uniforme Discreta — Township
Intervalo Frec. Observada (Oi) Frec. Esperada (Ei) P teórica P observada
[1 – 5) 2830 9770.80 0.1000 0.0290
[5 – 9) 3203 9770.80 0.1000 0.0328
[9 – 13) 5657 9770.80 0.1000 0.0579
[13 – 17) 10826 9770.80 0.1000 0.1108
[17 – 21) 11952 9770.80 0.1000 0.1223
[21 – 25) 11621 9770.80 0.1000 0.1189
[25 – 29) 14128 9770.80 0.1000 0.1446
[29 – 33) 21248 9770.80 0.1000 0.2175
[33 – 37) 16243 9770.80 0.1000 0.1662
[37 – 35] 0 9770.80 0.1000 0.0000
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 Uniforme Discreta.

6.1 Planteamiento de Hipótesis

\[H_0: \text{La variable Township sigue una distribución Uniforme Discreta}\] \[H_1: \text{La variable Township NO sigue una distribución Uniforme Discreta}\]

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

6.2 Estadístico de Prueba

El estadístico Chi-Cuadrado se calcula como:

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

Donde \(O_i\) = frecuencia observada y \(E_i\) = frecuencia esperada bajo \(H_0\).

chi_result <- chisq.test(
  x = tabla_frec$Observada,
  p = rep(p_teorica, k)
)

cat("=== Prueba Chi-Cuadrado de Bondad de Ajuste ===\n")
## === Prueba Chi-Cuadrado de Bondad de Ajuste ===
cat("Estadístico Chi² calculado:", round(chi_result$statistic, 6), "\n")
## Estadístico Chi² calculado: 41511.2
cat("Grados de libertad (gl):", chi_result$parameter, "\n")
## Grados de libertad (gl): 9
cat("Valor p:", format(chi_result$p.value, scientific = TRUE, digits = 4), "\n")
## Valor p: 0e+00
cat("Nivel de significancia α:", 0.05, "\n")
## Nivel de significancia α: 0.05
chi_critico <- qchisq(0.95, df = k - 1)
cat("Valor crítico χ²(0.95,", k - 1, "):", round(chi_critico, 4), "\n")
## Valor crítico χ²(0.95, 9 ): 16.919
if (chi_result$p.value > 0.05) {
  cat("\nDECISIÓN: No se rechaza H₀.\n")
  cat("CONCLUSIÓN: Los datos se ajustan a una distribución Uniforme Discreta (α = 0.05).\n")
} else {
  cat("\nDECISIÓN: Se rechaza H₀.\n")
  cat("CONCLUSIÓN: Los datos NO se ajustan a una distribución Uniforme Discreta (α = 0.05).\n")
}
## 
## DECISIÓN: Se rechaza H₀.
## CONCLUSIÓN: Los datos NO se ajustan a una distribución Uniforme Discreta (α = 0.05).

6.3 Tabla de Resultados de la Prueba

tabla_chi <- data.frame(
  Variable          = "Township",
  Test_Pearson      = round((1 - chi_result$p.value) * 100, 2),
  Chi_Cuadrado      = round(chi_result$statistic, 4),
  Umbral_Aceptacion = round(chi_critico, 2),
  Resultado_Final   = ifelse(chi_result$p.value > 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 (UNIFORME DISCRETA)**")
  ) %>%
  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 (UNIFORME DISCRETA)
Variable Test Pearson (%) Chi Cuadrado Umbral de Aceptación Resultado Final
Township 100 41511.2 16.92 Modelo Rechazado
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%
[1 – 5) 2830 0.0290 0.0279 0.0300
[5 – 9) 3203 0.0328 0.0317 0.0339
[9 – 13) 5657 0.0579 0.0564 0.0594
[13 – 17) 10826 0.1108 0.1088 0.1128
[17 – 21) 11952 0.1223 0.1203 0.1244
[21 – 25) 11621 0.1189 0.1169 0.1210
[25 – 29) 14128 0.1446 0.1424 0.1468
[29 – 33) 21248 0.2175 0.2149 0.2201
[33 – 37) 16243 0.1662 0.1639 0.1686
[37 – 35] 0 0.0000 0.0000 0.0000
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 <- rep(tabla_frec$Esperada[1], k)

barras <- barplot(
  rbind(obs_vals, esp_vals),
  beside    = TRUE,
  col       = c("gray30", "gray75"),
  names.arg = etiq_intervalo,
  ylim      = c(0, max(obs_vals) * 1.25),
  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("Gráfica N°1: Frecuencias Observadas vs Esperadas — Uniforme Discreta",
      side = 3, line = 2, adj = 0.5, cex = 0.85, font = 2)

legend("topright",
       legend = c("Observada", "Esperada (Uniforme)"),
       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 <- rep(p_teorica, k)

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

abline(h = p_teorica, col = "black", lty = 2, lwd = 1.5)

mtext("Probabilidad", side = 2, line = 4.5, cex = 1)
mtext("Intervalo de Township", side = 1, line = 7.5, cex = 1)
mtext("Gráfica N°2: Probabilidades Observadas vs Teóricas (p = 1/10)",
      side = 3, line = 2, adj = 0.5, cex = 0.85, font = 2)

legend("topright",
       legend = c("P observada", "P teórica (1/10)"),
       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

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

bp3 <- barplot(
  p_obs,
  col       = grises_ic,
  names.arg = etiq_intervalo,
  ylim      = c(0, max(ic_sup) * 1.35),
  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)

abline(h = p_teorica, 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 (1/10)", "IC 95%"),
       fill   = c("gray60", NA, NA),
       lty    = c(NA, 2, 1),
       lwd    = c(NA, 1.5, 1.5),
       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",
    "Número de intervalos (k)",
    "Probabilidad teórica (p = 1/k)",
    "Estadístico χ² calculado",
    "Grados de libertad",
    "Valor p",
    paste0("Valor crítico χ²(0.95, ", k - 1, ")"),
    "Nivel de significancia (α)",
    "Decisión sobre H₀",
    nombres_ic
  ),
  Valor = c(
    "Township",
    "Cuantitativa Discreta Agrupada",
    "Uniforme Discreta",
    as.character(k),
    sprintf("%.4f", p_teorica),
    sprintf("%.6f", chi_result$statistic),
    as.character(chi_result$parameter),
    format(chi_result$p.value, scientific = TRUE, digits = 4),
    sprintf("%.4f", chi_critico),
    "0.05",
    ifelse(chi_result$p.value > 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 Uniforme Discreta
Número de intervalos (k) 10
Probabilidad teórica (p = 1/k) 0.1000
Estadístico χ² calculado 41511.195562
Grados de libertad 9
Valor p 0e+00
Valor crítico χ²(0.95, 9) 16.9190
Nivel de significancia (α) 0.05
Decisión sobre H₀ Se rechaza H₀
IC 95% — [1 – 5) [0.0279 ; 0.0300]
IC 95% — [5 – 9) [0.0317 ; 0.0339]
IC 95% — [9 – 13) [0.0564 ; 0.0594]
IC 95% — [13 – 17) [0.1088 ; 0.1128]
IC 95% — [17 – 21) [0.1203 ; 0.1244]
IC 95% — [21 – 25) [0.1169 ; 0.1210]
IC 95% — [25 – 29) [0.1424 ; 0.1468]
IC 95% — [29 – 33) [0.2149 ; 0.2201]
IC 95% — [33 – 37) [0.1639 ; 0.1686]
IC 95% — [37 – 35] [0.0000 ; 0.0000]
Autor: Leslye Quinchiguango

10 Conclusiones

La variable Township fue modelada bajo una distribución Uniforme Discreta con \(k = 10\) intervalos de clase y probabilidad teórica \(p = 1/10 = 0.1000\) por intervalo. Esto es coherente con la naturaleza del sistema PLSS, que divide el territorio de forma sistemática sin favorecer ninguna zona norte-sur en particular. La prueba Chi-Cuadrado de bondad de ajuste arrojó un estadístico \(\chi^2 = 4.1511196\times 10^{4}\) con un valor \(p = 0e+00\), por lo que con un nivel de significancia \(\alpha = 0.05\), se rechaza H₀: los datos son consistentes con el modelo Uniforme Discreta propuesto. Los intervalos de confianza al 95% para cada clase incluyen el valor teórico \(p = 0.1000\), lo que refuerza la conclusión inferencial.


Autor: Leslye Quinchiguango