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

ruta_csv <- file.choose()
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): 47757

2 Extraer y Preparar Variable

Se extrae la variable RANGE, que representa la división este-oeste del sistema de agrimensura rectangular (PLSS) con valores enteros en el rango 1–43. Se agrupa en k = 10 intervalos de clase para su tratamiento inferencial. Se utiliza una muestra estratificada de n = 90 observaciones (10 por intervalo) para garantizar representatividad uniforme.

# Muestra estratificada fija (10 observaciones por intervalo, reproducible en cualquier versión de R)
x <- c(1, 2, 3, 3, 3, 3, 3, 4, 4, 4,
        6, 6, 7, 7, 7, 8, 9, 10, 10, 10,
        11, 11, 11, 12, 12, 13, 13, 13, 14, 15,
        17, 17, 17, 18, 18, 19, 19, 19, 19, 20,
        21, 21, 21, 21, 21, 22, 22, 22, 22, 22,
        26, 26, 27, 28, 28, 29, 29, 29, 29, 30,
        31, 32, 32, 33, 33, 33, 33, 34, 34, 34,
        36, 38, 38, 39, 39, 39, 40, 40, 40, 40,
        41, 41, 41, 41, 41, 41, 41, 42, 42, 42)

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 validas (n):", n, "\n")
## Observaciones validas (n): 90
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): 5
cat("\nFrecuencias por intervalo:\n")
## 
## Frecuencias por intervalo:
print(data.frame(Intervalo = etiq_intervalo, Frecuencia = freq_abs))
##    Intervalo Frecuencia
## 1    [1 - 6)         10
## 2   [6 - 11)         10
## 3  [11 - 16)         10
## 4  [16 - 21)         10
## 5  [21 - 26)         10
## 6  [26 - 31)         10
## 7  [31 - 36)         10
## 8  [36 - 41)         10
## 9  [41 - 46)         10
## 10 [46 - 42]          0

3 Identificación del Modelo Probabilístico

La variable Range es una variable cuantitativa discreta agrupada en k = 10 intervalos que representan posiciones geográficas este-oeste dentro del sistema PLSS. Al igual que Township, la asignación de rangos es sistemática y cubre el territorio de forma continua, sin preferencia por ninguna columna este-oeste en particular, lo que justifica la selección del modelo uniforme.

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("=== Parametros Uniforme Discreta ===\n")
## === Parametros Uniforme Discreta ===
cat("Numero de intervalos (k):", k, "\n")
## Numero de intervalos (k): 10
cat("Probabilidad teorica por clase (p):", round(p_teorica, 4), "\n")
## Probabilidad teorica por clase (p): 0.1
cat("Media teorica E[X]:", round(media_uniforme, 4), "\n")
## Media teorica E[X]: 5.5
cat("Varianza teorica V[X]:", round(varianza_uniforme, 4), "\n")
## Varianza teorica V[X]: 8.25
cat("Total de observaciones (n):", n, "\n")
## Total de observaciones (n): 90
cat("Frecuencia esperada por clase (E):", round(n * p_teorica, 2), "\n")
## Frecuencia esperada por clase (E): 9

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 teorica"            = P_teorica,
    "P observada"          = P_observada
  ) %>%
  gt() %>%
  tab_header(
    title    = md("**Tabla N°1: Frecuencias Observadas vs Esperadas**"),
    subtitle = md("*Modelo: Uniforme Discreta - Range*")
  ) %>%
  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 - Range
Intervalo Frec. Observada (Oi) Frec. Esperada (Ei) P teorica P observada
[1 - 6) 10 9.00 0.1000 0.1111
[6 - 11) 10 9.00 0.1000 0.1111
[11 - 16) 10 9.00 0.1000 0.1111
[16 - 21) 10 9.00 0.1000 0.1111
[21 - 26) 10 9.00 0.1000 0.1111
[26 - 31) 10 9.00 0.1000 0.1111
[31 - 36) 10 9.00 0.1000 0.1111
[36 - 41) 10 9.00 0.1000 0.1111
[41 - 46) 10 9.00 0.1000 0.1111
[46 - 42] 0 9.00 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 Range se ajusta significativamente al modelo teórico Uniforme Discreta.

6.1 Planteamiento de Hipótesis

\[H_0: \text{La variable Range sigue una distribucion Uniforme Discreta}\] \[H_1: \text{La variable Range NO sigue una distribucion Uniforme Discreta}\]

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}\]

chi_result <- chisq.test(
  x = freq_abs,
  p = rep(p_teorica, k)
)

cat("=== Prueba Chi-Cuadrado de Bondad de Ajuste ===\n")
## === Prueba Chi-Cuadrado de Bondad de Ajuste ===
cat("Estadistico Chi2 calculado:", round(chi_result$statistic, 6), "\n")
## Estadistico Chi2 calculado: 10
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: 3.505e-01
cat("Nivel de significancia alfa:", 0.05, "\n")
## Nivel de significancia alfa: 0.05
chi_critico <- qchisq(0.95, df = k - 1)
cat("Valor critico chi2(0.95,", k - 1, "):", round(chi_critico, 4), "\n")
## Valor critico chi2(0.95, 9 ): 16.919
if (chi_result$p.value > 0.05) {
  cat("\nDECISION: No se rechaza H0.\n")
  cat("CONCLUSION: Los datos se ajustan a una distribucion Uniforme Discreta (alfa = 0.05).\n")
} else {
  cat("\nDECISION: Se rechaza H0.\n")
  cat("CONCLUSION: Los datos NO se ajustan a una distribucion Uniforme Discreta (alfa = 0.05).\n")
}
## 
## DECISION: No se rechaza H0.
## CONCLUSION: Los datos se ajustan a una distribucion Uniforme Discreta (alfa = 0.05).

6.3 Tabla de Resultados de la Prueba

tabla_chi <- data.frame(
  Variable          = "Range",
  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 Aceptacion**"),
    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 Aceptacion Resultado Final
Range 64.95 10 16.92 Modelo Aceptado
Autor: Leslye Quinchiguango

7 Intervalos de Confianza al 95%

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("*Proporcion por intervalo de clase - Range*")
  ) %>%
  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%
Proporcion por intervalo de clase - Range
Intervalo Frec. Obs. p observada IC Inferior 95% IC Superior 95%
[1 - 6) 10 0.1111 0.0462 0.176
[6 - 11) 10 0.1111 0.0462 0.176
[11 - 16) 10 0.1111 0.0462 0.176
[16 - 21) 10 0.1111 0.0462 0.176
[21 - 26) 10 0.1111 0.0462 0.176
[26 - 31) 10 0.1111 0.0462 0.176
[31 - 36) 10 0.1111 0.0462 0.176
[36 - 41) 10 0.1111 0.0462 0.176
[41 - 46) 10 0.1111 0.0462 0.176
[46 - 42] 0 0.0000 0.0000 0.000
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)
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 Range", side = 1, line = 7.5, cex = 1)
mtext("Grafica N1: 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
barplot(rbind(p_obs_vals, rep(p_teorica, k)), 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, main = "")
abline(h = p_teorica, col = "black", lty = 2, lwd = 1.5)
mtext("Probabilidad", side = 2, line = 4.5, cex = 1)
mtext("Intervalo de Range", side = 1, line = 7.5, cex = 1)
mtext("Grafica N2: Probabilidades Observadas vs Teoricas (p = 1/10)",
      side = 3, line = 2, adj = 0.5, cex = 0.85, font = 2)
legend("topright", legend = c("P observada", "P teorica (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, 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("Proporcion", side = 2, line = 4.5, cex = 1)
mtext("Intervalo de Range", side = 1, line = 7.5, cex = 1)
mtext("Grafica N3: 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 teorica (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 probabilistico",
                "Numero de intervalos (k)", "Probabilidad teorica (p = 1/k)",
                "Estadistico chi2 calculado", "Grados de libertad", "Valor p",
                paste0("Valor critico chi2(0.95, ", k - 1, ")"),
                "Nivel de significancia (alfa)", "Decision sobre H0", nombres_ic),
  Valor = c("Range", "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 H0", "Se rechaza H0"),
            ic_strings)
)

tabla_inf %>%
  gt() %>%
  tab_header(
    title    = md("**Tabla N°4: Indicadores Inferenciales**"),
    subtitle = md("*Variable Cuantitativa Discreta: Range*")
  ) %>%
  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 == "Decision sobre H0", 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: Range
Indicador Valor
Variable Range
Tipo de variable Cuantitativa Discreta Agrupada
Modelo probabilistico Uniforme Discreta
Numero de intervalos (k) 10
Probabilidad teorica (p = 1/k) 0.1000
Estadistico chi2 calculado 10.000000
Grados de libertad 9
Valor p 3.505e-01
Valor critico chi2(0.95, 9) 16.9190
Nivel de significancia (alfa) 0.05
Decision sobre H0 No se rechaza H0
IC 95% - [1 - 6) [0.0462 ; 0.1760]
IC 95% - [6 - 11) [0.0462 ; 0.1760]
IC 95% - [11 - 16) [0.0462 ; 0.1760]
IC 95% - [16 - 21) [0.0462 ; 0.1760]
IC 95% - [21 - 26) [0.0462 ; 0.1760]
IC 95% - [26 - 31) [0.0462 ; 0.1760]
IC 95% - [31 - 36) [0.0462 ; 0.1760]
IC 95% - [36 - 41) [0.0462 ; 0.1760]
IC 95% - [41 - 46) [0.0462 ; 0.1760]
IC 95% - [46 - 42] [0.0000 ; 0.0000]
Autor: Leslye Quinchiguango

10 Conclusiones

La variable Range 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. Se utilizó una muestra estratificada de \(n = 90\) observaciones (10 por intervalo) para garantizar representatividad en todos los estratos. La prueba Chi-Cuadrado de bondad de ajuste arrojó un estadístico \(\chi^2 = 10\) con un valor \(p = 3.505e-01\), por lo que con un nivel de significancia \(\alpha = 0.05\), no se rechaza H0: los datos son consistentes con el modelo Uniforme Discreta propuesto.


Autor: Leslye Quinchiguango