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 cualitativa ordinal Nivel de Profundidad.
datos <- read_csv(file.choose(), 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
Se extrae la variable DEPTH_LEVEL y se traduce al
español con su orden lógico establecido.
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")
orden_logico <- c("Superficial", "Medio", "Profundo")
datos <- datos %>%
mutate(
PROFUNDIDAD = factor(PROFUNDIDAD, levels = orden_logico, ordered = TRUE)
)
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
La variable Nivel de Profundidad es una variable cualitativa ordinal con k = 3 categorías discretas. A partir del análisis descriptivo previo se observó que las tres categorías presentan proporciones prácticamente iguales (~33,3% cada una), lo que indica que ninguna categoría es más probable que otra.
Distribución seleccionada: Uniforme Discreta
Una variable aleatoria discreta \(X\) sigue una distribución Uniforme Discreta con \(k\) valores posibles si:
\[P(X = x_i) = \frac{1}{k}, \quad i = 1, 2, \ldots, k\]
En este caso \(k = 3\), por lo tanto la probabilidad teórica de cada categoría bajo \(H_0\) es:
\[P(X = x_i) = \frac{1}{3} \approx 0.3333\]
k <- 3
p_teorica <- 1 / k
# Frecuencias observadas
tabla_frec <- datos %>%
group_by(PROFUNDIDAD, .drop = FALSE) %>%
summarise(Observada = n(), .groups = "drop") %>%
arrange(PROFUNDIDAD)
n_total <- sum(tabla_frec$Observada)
# Frecuencia esperada bajo Uniforme
tabla_frec <- tabla_frec %>%
mutate(
Esperada = n_total * p_teorica,
P_teorica = p_teorica,
P_observada = Observada / n_total
)
# Media y varianza de la Uniforme Discreta
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 categorías (k):", k, "\n")
## Número de categorías (k): 3
cat("Probabilidad teórica por categoría (p):", round(p_teorica, 4), "\n")
## Probabilidad teórica por categoría (p): 0.3333
cat("Media teórica E[X]:", round(media_uniforme, 4), "\n")
## Media teórica E[X]: 2
cat("Varianza teórica V[X]:", round(varianza_uniforme, 4), "\n")
## Varianza teórica V[X]: 0.6667
cat("Total de observaciones (n):", n_total, "\n")
## Total de observaciones (n): 47757
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(
"Categoría" = PROFUNDIDAD,
"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 — Nivel de Profundidad*")
) %>%
cols_label(
"Categoría" = md("**Categoría**"),
"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: Fernando Almeida*")) %>%
tab_options(
table.width = pct(70),
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 — Nivel de Profundidad | ||||
| Categoría | Frec. Observada (Oi) | Frec. Esperada (Ei) | P teórica | P observada |
|---|---|---|---|---|
| Superficial | 15986 | 15919.00 | 0.3333 | 0.3347 |
| Medio | 15852 | 15919.00 | 0.3333 | 0.3319 |
| Profundo | 15919 | 15919.00 | 0.3333 | 0.3333 |
| Autor: Fernando Almeida | ||||
Se aplica la Prueba Chi-Cuadrado de Bondad de Ajuste (\(\chi^2\)) para determinar si la distribución observada de la variable Nivel de Profundidad se ajusta significativamente al modelo teórico Uniforme Discreta.
\[H_0: \text{La variable Nivel de Profundidad sigue una distribución Uniforme Discreta}\] \[H_1: \text{La variable Nivel de Profundidad NO sigue una distribución Uniforme Discreta}\]
Nivel de significancia: \(\alpha = 0.05\)
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\).
# Prueba Chi-Cuadrado de bondad de ajuste
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: 0.56398
cat("Grados de libertad (gl):", chi_result$parameter, "\n")
## Grados de libertad (gl): 2
cat("Valor p:", format(chi_result$p.value, scientific = TRUE, digits = 4), "\n")
## Valor p: 7.543e-01
cat("Nivel de significancia α:", 0.05, "\n")
## Nivel de significancia α: 0.05
# Valor crítico
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, 2 ): 5.9915
# Decisión
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: No se rechaza H₀.
## CONCLUSIÓN: Los datos se ajustan a una distribución Uniforme Discreta (α = 0.05).
tabla_chi <- data.frame(
Variable = "Nivel de Profundidad",
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: Fernando Almeida*")) %>%
tab_options(
table.width = pct(80),
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 |
|---|---|---|---|---|
| Nivel de Profundidad | 24.57 | 0.564 | 5.99 | Modelo Aceptado |
| Autor: Fernando Almeida | ||||
Se estima el intervalo de confianza al 95% para la proporción poblacional de cada categoría mediante la aproximación normal (intervalo de Wilson).
\[IC_{95\%}: \hat{p} \pm z_{\alpha/2} \sqrt{\frac{\hat{p}(1-\hat{p})}{n}}\]
z <- qnorm(0.975) # z para 95% de confianza
tabla_ic <- tabla_frec %>%
mutate(
p_obs = Observada / n_total,
error = z * sqrt((p_obs * (1 - p_obs)) / n_total),
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(PROFUNDIDAD, Observada, p_obs, IC_inf, IC_sup)
tabla_ic %>%
rename(
"Categoría" = PROFUNDIDAD,
"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 categoría — Nivel de Profundidad*")
) %>%
cols_label(
"Categoría" = md("**Categoría**"),
"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: Fernando Almeida*")) %>%
tab_options(
table.width = pct(70),
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 categoría — Nivel de Profundidad | ||||
| Categoría | Frec. Obs. | p̂ observada | IC Inferior 95% | IC Superior 95% |
|---|---|---|---|---|
| Superficial | 15986 | 0.3347 | 0.3305 | 0.3390 |
| Medio | 15852 | 0.3319 | 0.3277 | 0.3362 |
| Profundo | 15919 | 0.3333 | 0.3291 | 0.3376 |
| Autor: Fernando Almeida | ||||
par(mar = c(8, 6, 5, 2))
categorias <- as.character(tabla_frec$PROFUNDIDAD)
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 = categorias,
ylim = c(0, max(obs_vals) * 1.2),
las = 2,
cex.names = 0.9,
main = ""
)
mtext("Frecuencia", side = 2, line = 4.5, cex = 1)
mtext("Nivel de Profundidad", side = 1, line = 6, 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)
par(mar = c(8, 6, 5, 2))
p_obs_vals <- tabla_frec$P_observada
p_teo_vals <- rep(p_teorica, k)
bp2 <- barplot(
rbind(p_obs_vals, p_teo_vals),
beside = TRUE,
col = c("gray30", "gray75"),
names.arg = categorias,
ylim = c(0, 0.5),
las = 2,
cex.names = 0.9,
ylab = "Probabilidad",
main = ""
)
abline(h = p_teorica, col = "black", lty = 2, lwd = 1.5)
mtext("Nivel de Profundidad", side = 1, line = 6, cex = 1)
mtext("Gráfica N°2: Probabilidades Observadas vs Teóricas (p = 1/3)",
side = 3, line = 2, adj = 0.5, cex = 0.85, font = 2)
legend("topright",
legend = c("P observada", "P teórica (1/3)"),
fill = c("gray30", "gray75"),
bty = "n", cex = 0.85)
par(mar = c(8, 6, 5, 2))
p_obs <- tabla_ic$p_obs
ic_inf <- tabla_ic$IC_inf
ic_sup <- tabla_ic$IC_sup
bp3 <- barplot(
p_obs,
col = c("gray30", "gray60", "gray85"),
names.arg = as.character(tabla_ic$PROFUNDIDAD),
ylim = c(0, 0.5),
las = 2,
cex.names = 0.9,
ylab = "Proporción",
main = ""
)
# Barras de error
arrows(x0 = bp3, y0 = ic_inf,
x1 = bp3, y1 = ic_sup,
angle = 90, code = 3, length = 0.08, lwd = 1.5)
abline(h = p_teorica, col = "black", lty = 2, lwd = 1.5)
mtext("Nivel de Profundidad", side = 1, line = 6, cex = 1)
mtext("Gráfica N°3: Intervalos de Confianza al 95% por Categoría",
side = 3, line = 2, adj = 0.5, cex = 0.85, font = 2)
legend("topright",
legend = c("p̂ observada", "p teórica (1/3)", "IC 95%"),
fill = c("gray60", NA, NA),
lty = c(NA, 2, 1),
lwd = c(NA, 1.5, 1.5),
bty = "n", cex = 0.85)
tabla_inf <- data.frame(
Indicador = c(
"Variable",
"Tipo de variable",
"Modelo probabilístico",
"Número de categorías (k)",
"Probabilidad teórica (p = 1/k)",
"Estadístico χ² calculado",
"Grados de libertad",
"Valor p",
"Valor crítico χ²(0.95, 2)",
"Nivel de significancia (α)",
"Decisión sobre H₀",
"IC 95% — Superficial",
"IC 95% — Medio",
"IC 95% — Profundo"
),
Valor = c(
"Nivel de Profundidad",
"Cualitativa Ordinal",
"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₀"),
sprintf("[%.4f ; %.4f]", tabla_ic$IC_inf[1], tabla_ic$IC_sup[1]),
sprintf("[%.4f ; %.4f]", tabla_ic$IC_inf[2], tabla_ic$IC_sup[2]),
sprintf("[%.4f ; %.4f]", tabla_ic$IC_inf[3], tabla_ic$IC_sup[3])
)
)
tabla_inf %>%
gt() %>%
tab_header(
title = md("**Tabla N°4: Indicadores Inferenciales**"),
subtitle = md("*Variable Cualitativa Ordinal: Nivel de Profundidad*")
) %>%
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: Fernando Almeida*")) %>%
tab_options(
table.width = pct(70),
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 Cualitativa Ordinal: Nivel de Profundidad | |
| Indicador | Valor |
|---|---|
| Variable | Nivel de Profundidad |
| Tipo de variable | Cualitativa Ordinal |
| Modelo probabilístico | Uniforme Discreta |
| Número de categorías (k) | 3 |
| Probabilidad teórica (p = 1/k) | 0.3333 |
| Estadístico χ² calculado | 0.563980 |
| Grados de libertad | 2 |
| Valor p | 7.543e-01 |
| Valor crítico χ²(0.95, 2) | 5.9915 |
| Nivel de significancia (α) | 0.05 |
| Decisión sobre H₀ | No se rechaza H₀ |
| IC 95% — Superficial | [0.3305 ; 0.3390] |
| IC 95% — Medio | [0.3277 ; 0.3362] |
| IC 95% — Profundo | [0.3291 ; 0.3376] |
| Autor: Fernando Almeida | |
La variable Nivel de Profundidad fue modelada bajo una distribución Uniforme Discreta con \(k = 3\) categorías y probabilidad teórica \(p = 1/3\) por categoría. La prueba Chi-Cuadrado de bondad de ajuste arrojó un estadístico \(\chi^2 = 0.564\) con un valor \(p = 7.543e-01\), por lo que con un nivel de significancia \(\alpha = 0.05\), no se rechaza H₀: los datos son consistentes con el modelo Uniforme Discreta propuesto. Los intervalos de confianza al 95% para cada categoría incluyen el valor teórico \(p = 0.3333\), lo que refuerza la conclusión inferencial.
Autor: Fernando Almeida