library(readr); library(dplyr); library(gt); library(MASS)
cat("Librerías cargadas correctamente.\n")
## Librerías cargadas correctamente.
ruta_csv <- file.choose()
datos <- read_csv(ruta_csv, show_col_types = FALSE)
cat("Archivo:", basename(ruta_csv), "| Filas:", nrow(datos), "\n")
## Archivo: oil_and_gas_leases_data .csv | Filas: 47757
x_raw <- datos %>%
mutate(RNG = suppressWarnings(as.integer(RANGE))) %>%
filter(!is.na(RNG), RNG >= 1, RNG <= 43) %>%
pull(RNG)
n_conteo <- length(x_raw)
k_sturges <- ceiling(1 + 3.322 * log10(n_conteo))
cat("Observaciones válidas:", n_conteo, "\n")
## Observaciones válidas: 47757
cat("Clases (Regla de Sturges):", k_sturges, "\n")
## Clases (Regla de Sturges): 17
cat("Mínimo:", min(x_raw), "| Máximo:", max(x_raw), "\n")
## Mínimo: 1 | Máximo: 43
intervalos_cut <- cut(x, breaks = breaks_vec, right = FALSE, include.lowest = TRUE)
freq_abs <- as.integer(table(intervalos_cut))
hi_dec <- freq_abs / n
Ni_asc <- cumsum(freq_abs); Hi_asc <- cumsum(hi_dec)
Ni_desc <- n - c(0, head(Ni_asc,-1)); Hi_desc <- 1 - c(0, head(Hi_asc,-1))
etiq <- paste0("[", lim_inf, " - ", lim_sup, ")")
etiq[k] <- paste0("[", lim_inf[k], " - ", lim_sup[k]-1, "]")
bind_rows(
data.frame(Intervalo=etiq, MC=as.integer(mc), ni=freq_abs,
hi_pct=round(hi_dec*100,2), hi_real=round(hi_dec,4),
Ni_a=Ni_asc, Hi_a=round(Hi_asc,4),
Ni_d=Ni_desc, Hi_d=round(Hi_desc,4), stringsAsFactors=FALSE),
data.frame(Intervalo="TOTAL", MC=NA_integer_, ni=sum(freq_abs),
hi_pct=round(sum(hi_dec)*100,2), hi_real=round(sum(hi_dec),4),
Ni_a=max(Ni_asc), Hi_a=round(max(Hi_asc),4),
Ni_d=max(Ni_desc), Hi_d=round(max(Hi_desc),4), stringsAsFactors=FALSE)
) %>%
gt() %>%
tab_header(title = md("**Tabla N\u00b01: Distribución de Frecuencias**"),
subtitle = md(paste0("*Variable Cuantitativa Discreta Agrupada: Range, ",
"Kansas (n = ", format(n, big.mark=","), ")*"))) %>%
cols_label(Intervalo=md("**Intervalo**"), MC=md("**MC**"), ni=md("**ni**"),
hi_pct=md("**hi%**"), hi_real=md("**hi**"),
Ni_a=md("**Ni (asc)**"), Hi_a=md("**Hi (asc)**"),
Ni_d=md("**Ni (desc)**"), Hi_d=md("**Hi (desc)**")) %>%
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,k+1,by=2))) %>%
tab_style(style=list(cell_fill(color="#D6D6D6"),cell_text(weight="bold")),
locations=cells_body(rows=Intervalo=="TOTAL")) %>%
fmt_missing(columns=everything(), missing_text="-") %>%
tab_source_note(source_note=md("*Autor: Leslye Quinchiguango*")) %>%
tab_options(table.width=pct(100), table.font.size=px(13), data_row.padding=px(6))
| Tabla N°1: Distribución de Frecuencias | ||||||||
| Variable Cuantitativa Discreta Agrupada: Range, Kansas (n = 47,757) | ||||||||
| Intervalo | MC | ni | hi% | hi | Ni (asc) | Hi (asc) | Ni (desc) | Hi (desc) |
|---|---|---|---|---|---|---|---|---|
| [1 - 6) | 3 | 3318 | 6.95 | 0.0695 | 3318 | 0.0695 | 47757 | 1.0000 |
| [6 - 11) | 8 | 5137 | 10.76 | 0.1076 | 8455 | 0.1770 | 44439 | 0.9305 |
| [11 - 16) | 13 | 10092 | 21.13 | 0.2113 | 18547 | 0.3884 | 39302 | 0.8230 |
| [16 - 21) | 18 | 10946 | 22.92 | 0.2292 | 29493 | 0.6176 | 29210 | 0.6116 |
| [21 - 26) | 23 | 5443 | 11.40 | 0.1140 | 34936 | 0.7315 | 18264 | 0.3824 |
| [26 - 31) | 28 | 2478 | 5.19 | 0.0519 | 37414 | 0.7834 | 12821 | 0.2685 |
| [31 - 36) | 33 | 5874 | 12.30 | 0.1230 | 43288 | 0.9064 | 10343 | 0.2166 |
| [36 - 41) | 38 | 3279 | 6.87 | 0.0687 | 46567 | 0.9751 | 4469 | 0.0936 |
| [41 - 46) | 43 | 1190 | 2.49 | 0.0249 | 47757 | 1.0000 | 1190 | 0.0249 |
| [46 - 43] | 45 | 0 | 0.00 | 0.0000 | 47757 | 1.0000 | 0 | 0.0000 |
| TOTAL | - | 47757 | 100.00 | 1.0000 | 47757 | 1.0000 | 47757 | 1.0000 |
| Autor: Leslye Quinchiguango | ||||||||
grises <- gray(seq(0.25, 0.80, length.out=k))
h_obj <- hist(x, breaks=breaks_vec, plot=FALSE)
h_obj$density <- hi_dec
par(mar=c(5,6,6,2))
plot(h_obj, col=grises, border="black", freq=FALSE,
main="", xlab="", ylab="", las=1, xaxt="n")
axis(1, at=breaks_vec, labels=breaks_vec, las=1, cex.axis=0.9)
mtext("Densidad de Probabilidad", side=2, line=4.5, cex=1)
mtext("Range", side=1, line=3.5, cex=1)
mtext("Histograma General \u2014 Range, arrendamientos de hidrocarburos, Kansas, EE.UU.",
side=3, line=3, cex=0.95, font=2)
El histograma de la variable Range muestra un comportamiento diferenciado entre la zona izquierda y la zona derecha. En el tramo [1, 31) las barras ascienden progresivamente hasta un pico central y luego descienden de forma simétrica, lo que sugiere una distribución Normal. A partir del valor 31 se observa una caída asimétrica pronunciada hacia los rangos más altos, característica de una distribución Log-Normal. Por lo anterior, se trabaja con dos zonas con corte fijo en 31. Al trabajar por tramos, los parámetros de cada modelo se estiman exclusivamente con los datos de su zona.
set.seed(42)
lbl <- c(normal="Normal", lognormal="Log-Normal", exponential="Exponencial")
# Número de bins adaptado al tamaño de la zona
k_adaptativo <- function(n_z) max(3, min(k, ceiling(1 + 3.322 * log10(n_z))))
# Calcula el Pearson entre hi_obs y hi_teo de un modelo ya ajustado
calc_pearson_zona <- function(datos, modelo, fit, offset, lim_min, lim_max) {
k_zona <- k_adaptativo(length(datos))
brks <- seq(lim_min, lim_max, length.out = k_zona + 1)
hi_obs <- hist(datos, breaks=brks, plot=FALSE)$counts / length(datos)
mc_z <- (head(brks,-1) + tail(brks,-1)) / 2
if (modelo == "lognormal") {
mc_pos <- mc_z - offset; mc_pos[mc_pos <= 0] <- 1e-9
hi_teo <- dlnorm(mc_pos, meanlog=fit$estimate["meanlog"],
sdlog=fit$estimate["sdlog"]) * diff(brks)
} else if (modelo == "exponential") {
mc_pos <- mc_z - offset; mc_pos[mc_pos <= 0] <- 1e-9
hi_teo <- dexp(mc_pos, rate=fit$estimate["rate"]) * diff(brks)
} else {
hi_teo <- dnorm(mc_z, mean=fit$estimate["mean"],
sd=fit$estimate["sd"]) * diff(brks)
}
hi_teo <- hi_teo / sum(hi_teo)
round(cor(hi_obs, hi_teo) * 100, 2)
}
# Ajusta un modelo forzado específico
ajustar_forzado <- function(datos, modelo) {
offset <- min(datos) - 0.001
d_pos <- datos - offset
if (modelo == "normal") {
f <- fitdistr(datos, "normal")
list(fit=f, modelo="normal", offset=0,
pval=ks.test(sample(datos, min(400, length(datos))),
"pnorm", mean=f$estimate["mean"],
sd=f$estimate["sd"])$p.value)
} else if (modelo == "lognormal") {
f <- fitdistr(d_pos, "lognormal")
list(fit=f, modelo="lognormal", offset=offset,
pval=ks.test(sample(d_pos, min(400, length(d_pos))),
"plnorm", meanlog=f$estimate["meanlog"],
sdlog=f$estimate["sdlog"])$p.value)
} else if (modelo == "exponential") {
f <- fitdistr(d_pos, "exponential")
list(fit=f, modelo="exponential", offset=offset,
pval=ks.test(sample(d_pos, min(400, length(d_pos))),
"pexp", rate=f$estimate["rate"])$p.value)
}
}
# Valida un modelo: Pearson > 70% = APROBADO
validar <- function(datos, res, lim_min, lim_max) {
set.seed(42)
samp <- sample(datos, size=min(50, length(datos)), replace=FALSE)
offset <- res$offset
pearson <- calc_pearson_zona(datos, res$modelo, res$fit, offset, lim_min, lim_max)
if (res$modelo == "lognormal") {
ks_res <- ks.test(samp - offset, "plnorm",
meanlog=res$fit$estimate["meanlog"],
sdlog=res$fit$estimate["sdlog"])
} else if (res$modelo == "exponential") {
ks_res <- ks.test(samp - offset, "pexp", rate=res$fit$estimate["rate"])
} else {
ks_res <- ks.test(samp, "pnorm",
mean=res$fit$estimate["mean"],
sd=res$fit$estimate["sd"])
}
list(pearson=pearson, pval=round(ks_res$p.value,4),
val=ifelse(pearson > 70, "APROBADO", "RECHAZADO"))
}
# ── Cortes fijos ──────────────────────────────────────────────────────────────
corte_z <- 31
lim_z1_min <- x_min
lim_z1_max <- corte_z
lim_z2_min <- corte_z
lim_z2_max <- x_max
x_z1 <- x[x >= lim_z1_min & x < corte_z]
x_z2 <- x[x >= corte_z & x <= lim_z2_max]
# ── Ajuste forzado por zona ────────────────────────────────────────────────────
r_z1 <- ajustar_forzado(x_z1, "normal")
r_z2 <- ajustar_forzado(x_z2, "lognormal")
v_z1 <- validar(x_z1, r_z1, lim_z1_min, lim_z1_max)
v_z2 <- validar(x_z2, r_z2, lim_z2_min, lim_z2_max)
cat("Zona 1 [1, 31) :", length(x_z1), "obs | Modelo:", lbl[r_z1$modelo],
"| Pearson:", v_z1$pearson, "% | KS p =", v_z1$pval, "\n")
## Zona 1 [1, 31) : 37414 obs | Modelo: Normal | Pearson: 95.29 % | KS p = 0.6197
cat("Zona 2 [31, 44]:", length(x_z2), "obs | Modelo:", lbl[r_z2$modelo],
"| Pearson:", v_z2$pearson, "% | KS p =", v_z2$pval, "\n")
## Zona 2 [31, 44]: 10343 obs | Modelo: Log-Normal | Pearson: 79.93 % | KS p = 0
h_plot <- hist(x, breaks=breaks_vec, plot=FALSE)
h_plot$density <- hi_dec
colores_zona <- ifelse(breaks_vec[-length(breaks_vec)] < corte_z, "gray35", "gray70")
par(mar=c(5,6,6,2))
plot(h_plot, col=colores_zona, border="black", freq=FALSE,
main="", xlab="", ylab="", las=1, xaxt="n")
axis(1, at=breaks_vec, labels=breaks_vec, las=1, cex.axis=0.9)
abline(v=corte_z, col="black", lty=2, lwd=2)
yt <- max(hi_dec)
text(mean(c(lim_z1_min, corte_z)), yt*0.88,
paste0("Zona 1\n[", lim_z1_min, " \u2013 ", corte_z, ")\n", lbl[r_z1$modelo]),
cex=0.85, font=2)
text(mean(c(corte_z, lim_z2_max)), yt*0.88,
paste0("Zona 2\n[", corte_z, " \u2013 ", lim_z2_max, "]\n", lbl[r_z2$modelo]),
cex=0.85, font=2)
mtext("Densidad de Probabilidad", side=2, line=4.5, cex=1)
mtext("Range", side=1, line=3.5, cex=1)
mtext(paste0("Corte en Range = ", corte_z,
" \u2014 Zona 1: ", lbl[r_z1$modelo],
" | Zona 2: ", lbl[r_z2$modelo],
" \u2014 Kansas, EE.UU."),
side=3, line=3, cex=0.9, font=2)
plot_zona <- function(datos, res, titulo, pal, lim_min, lim_max) {
offset <- res$offset
n_z <- length(datos)
n_bins_z <- ceiling((lim_max - lim_min) / c_amp)
lim_inf_z <- lim_min + (0:(n_bins_z-1)) * c_amp
lim_sup_z <- lim_inf_z + c_amp; lim_sup_z[n_bins_z] <- lim_max
brks <- c(lim_inf_z, lim_sup_z[n_bins_z])
h_z <- hist(datos, breaks=brks, plot=FALSE)
hi_z <- h_z$counts / n_z
dens_z <- hi_z / diff(brks)
h_z$density <- dens_z
xs <- seq(lim_min, lim_max, length.out=500)
nb <- length(brks) - 1
par(mar=c(5,6,6,2))
plot(h_z, col=pal[seq_len(nb)], border="black", freq=FALSE,
main="", xlab="", ylab="", las=1, xaxt="n")
axis(1, at=brks, labels=brks, las=1, cex.axis=0.9)
if (res$modelo == "lognormal") {
xs_pos <- xs - offset; xs_pos[xs_pos <= 0] <- 1e-9
ys <- dlnorm(xs_pos, meanlog=res$fit$estimate["meanlog"],
sdlog=res$fit$estimate["sdlog"])
} else if (res$modelo == "exponential") {
xs_pos <- xs - offset; xs_pos[xs_pos <= 0] <- 1e-9
ys <- dexp(xs_pos, rate=res$fit$estimate["rate"])
} else {
ys <- dnorm(xs, mean=res$fit$estimate["mean"], sd=res$fit$estimate["sd"])
}
lines(xs, ys, col="black", lwd=2.5)
mtext("Densidad de Probabilidad", side=2, line=4.5, cex=1)
mtext("Range", side=1, line=3.5, cex=1)
mtext(titulo, side=3, line=3, cex=0.95, font=2)
legend("topright",
legend=c("Histograma", paste0("Curva ", lbl[res$modelo])),
fill=c("gray55",NA), border=c("black",NA),
lty=c(NA,1), lwd=c(NA,2.5), bty="n", cex=0.85)
}
par(mfrow=c(2,1))
plot_zona(x_z1, r_z1,
paste0("Zona 1 [", lim_z1_min, " \u2013 ", corte_z,
") \u2014 ", lbl[r_z1$modelo],
" (\u03bc\u0302 = ", round(r_z1$fit$estimate["mean"],2),
", \u03c3\u0302 = ", round(r_z1$fit$estimate["sd"],2), ")"),
gray(seq(0.20, 0.65, length.out=k)), lim_z1_min, lim_z1_max)
plot_zona(x_z2, r_z2,
paste0("Zona 2 [", corte_z, " \u2013 ", lim_z2_max,
"] \u2014 ", lbl[r_z2$modelo],
" (\u03bc_log = ", round(r_z2$fit$estimate["meanlog"],4),
", \u03c3_log = ", round(r_z2$fit$estimate["sdlog"],4), ")"),
gray(seq(0.40, 0.85, length.out=k)), lim_z2_min, lim_z2_max)
par(mfrow=c(1,1))
cat("--- [", lbl[r_z1$modelo], "] Zona 1 [1, 31) — Parámetros ---\n")
## --- [ Normal ] Zona 1 [1, 31) — Parámetros ---
print(round(r_z1$fit$estimate, 6))
## mean sd
## 15.298605 6.585243
cat("Pearson R%:", v_z1$pearson, "| KS p-valor:", v_z1$pval, "\n")
## Pearson R%: 95.29 | KS p-valor: 0.6197
cat("\n--- [", lbl[r_z2$modelo], "] Zona 2 [31, 44] — Parámetros ---\n")
##
## --- [ Log-Normal ] Zona 2 [31, 44] — Parámetros ---
print(round(r_z2$fit$estimate, 6))
## meanlog sdlog
## 0.700031 2.404132
cat("Offset zona 2:", round(r_z2$offset, 4), "\n")
## Offset zona 2: 30.999
cat("Pearson R%:", v_z2$pearson, "| KS p-valor:", v_z2$pval, "\n")
## Pearson R%: 79.93 | KS p-valor: 0
# ── Tabla de validación ───────────────────────────────────────────────────────
tabla_resumen <- bind_rows(
data.frame(Zona = paste0("Zona 1 (", lim_z1_min, " a ", corte_z, ")"),
Modelo = as.character(lbl[r_z1$modelo]),
Pearson = v_z1$pearson,
KS_p = v_z1$pval,
Validacion= v_z1$val, stringsAsFactors=FALSE),
data.frame(Zona = paste0("Zona 2 (", corte_z, " a ", lim_z2_max, ")"),
Modelo = as.character(lbl[r_z2$modelo]),
Pearson = v_z2$pearson,
KS_p = v_z2$pval,
Validacion= v_z2$val, stringsAsFactors=FALSE)
)
tabla_resumen %>%
gt() %>%
tab_header(
title = md("**Tabla N\u00b02: Resumen de Validación por Zona**"),
subtitle = md("*Pearson (R%) y Kolmogorov-Smirnov (p-valor) por zona \u2014 Variable Range*")
) %>%
cols_label(Zona=md("**Zona**"), Modelo=md("**Modelo Aplicado**"),
Pearson=md("**Pearson (R %)**"), KS_p=md("**K-S (p-valor)**"),
Validacion=md("**Validación**")) %>%
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")),
locations=cells_title(groups="title")) %>%
tab_style(style=cell_fill(color="#F5F5F5"), locations=cells_body(rows=1)) %>%
tab_style(style=cell_text(color="darkgreen",weight="bold"),
locations=cells_body(columns=Validacion, rows=Validacion=="APROBADO")) %>%
tab_style(style=cell_text(color="darkred",weight="bold"),
locations=cells_body(columns=Validacion, rows=Validacion=="RECHAZADO")) %>%
tab_style(style=cell_borders(sides="bottom",color="#E0E0E0",weight=px(1)),
locations=cells_body(rows=everything())) %>%
cols_align(align="center", columns=c(Pearson,KS_p,Validacion)) %>%
cols_align(align="left", columns=c(Zona,Modelo)) %>%
fmt_number(columns=Pearson, decimals=2) %>%
fmt_number(columns=KS_p, decimals=4) %>%
tab_source_note(source_note=md("*Autor: Leslye Quinchiguango*")) %>%
tab_options(table.width=pct(90), table.font.size=px(13),
heading.title.font.size=px(16), heading.subtitle.font.size=px(12),
data_row.padding=px(6),
column_labels.border.top.width=px(2),
column_labels.border.bottom.width=px(2),
table_body.border.bottom.width=px(2),
table.border.top.style="hidden", table.border.bottom.style="hidden")
| Tabla N°2: Resumen de Validación por Zona | ||||
| Pearson (R%) y Kolmogorov-Smirnov (p-valor) por zona — Variable Range | ||||
| Zona | Modelo Aplicado | Pearson (R %) | K-S (p-valor) | Validación |
|---|---|---|---|---|
| Zona 1 (1 a 31) | Normal | 95.29 | 0.6197 | APROBADO |
| Zona 2 (31 a 43) | Log-Normal | 79.93 | 0.0000 | APROBADO |
| Autor: Leslye Quinchiguango | ||||
# ── Zona 1: Normal(μ̂, σ̂) ────────────────────────────────────────────────────
mu_z1 <- r_z1$fit$estimate["mean"]
sd_z1 <- r_z1$fit$estimate["sd"]
p1_a <- pnorm(15, mean=mu_z1, sd=sd_z1)
p1_b <- pnorm(20, mean=mu_z1, sd=sd_z1) - pnorm(10, mean=mu_z1, sd=sd_z1)
p1_c <- pnorm(25, mean=mu_z1, sd=sd_z1, lower.tail=FALSE)
# ── Zona 2: Log-Normal(μ_log, σ_log, offset) ─────────────────────────────────
ml_z2 <- r_z2$fit$estimate["meanlog"]
sl_z2 <- r_z2$fit$estimate["sdlog"]
off_z2 <- r_z2$offset
p2_a <- plnorm(35 - off_z2, meanlog=ml_z2, sdlog=sl_z2)
p2_b <- plnorm(36 - off_z2, meanlog=ml_z2, sdlog=sl_z2) -
plnorm(31 - off_z2, meanlog=ml_z2, sdlog=sl_z2)
p2_c <- plnorm(40 - off_z2, meanlog=ml_z2, sdlog=sl_z2, lower.tail=FALSE)
data.frame(
Zona = c(rep(paste0("Zona 1 \u2014 ", lbl["normal"]), 3),
rep(paste0("Zona 2 \u2014 ", lbl["lognormal"]), 3)),
Evento = c("P(X < 15)", "P(10 \u2264 X < 20)", "P(X \u2265 25)",
"P(X < 35)", "P(31 \u2264 X < 36)", "P(X \u2265 40)"),
Descripcion = c(
"Range en el tercio oeste de la Zona 1",
"Range en el intervalo central de la Zona 1",
"Range en la cola derecha de la Zona 1",
"Range en la primera parte de la Zona 2",
"Range en el primer intervalo de la Zona 2",
"Range en la cola lejana de la Zona 2"
),
Probabilidad = round(c(p1_a, p1_b, p1_c, p2_a, p2_b, p2_c), 4)
) %>%
gt() %>%
tab_header(
title = md("**Tabla N\u00b03: Cálculo de Probabilidades por Zona**"),
subtitle = md("*La probabilidad es el área bajo la curva del modelo teórico \u2014 Variable Range*")
) %>%
cols_label(Zona=md("**Zona**"), Evento=md("**Evento**"),
Descripcion=md("**Descripción**"), Probabilidad=md("**Probabilidad**")) %>%
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,6,by=2))) %>%
tab_source_note(source_note=md("*Autor: Leslye Quinchiguango*")) %>%
tab_options(table.width=pct(95), table.font.size=px(13),
heading.title.font.size=px(15), heading.subtitle.font.size=px(11),
data_row.padding=px(6))
| Tabla N°3: Cálculo de Probabilidades por Zona | |||
| La probabilidad es el área bajo la curva del modelo teórico — Variable Range | |||
| Zona | Evento | Descripción | Probabilidad |
|---|---|---|---|
| Zona 1 — Normal | P(X < 15) | Range en el tercio oeste de la Zona 1 | 0.4819 |
| Zona 1 — Normal | P(10 ≤ X < 20) | Range en el intervalo central de la Zona 1 | 0.5518 |
| Zona 1 — Normal | P(X ≥ 25) | Range en la cola derecha de la Zona 1 | 0.0703 |
| Zona 2 — Log-Normal | P(X < 35) | Range en la primera parte de la Zona 2 | 0.6124 |
| Zona 2 — Log-Normal | P(31 ≤ X < 36) | Range en el primer intervalo de la Zona 2 | 0.6466 |
| Zona 2 — Log-Normal | P(X ≥ 40) | Range en la cola lejana de la Zona 2 | 0.2667 |
| Autor: Leslye Quinchiguango | |||
El Intervalo de Confianza representa el puente fundamental entre los modelos empíricos observados y la estimación poblacional. Aunque la distribución de Range presenta comportamiento diferenciado por zona, el Teorema Central del Límite (TLC) garantiza que la distribución de las medias muestrales tenderá a la normalidad dado el volumen de datos (\(n=\) 47,757).
Los postulados de confianza empírica sugieren:
\[P(\bar{x} - E < \mu < \bar{x} + E) \approx 68\%\]
\[P(\bar{x} - 2E < \mu < \bar{x} + 2E) \approx 95\%\]
\[P(\bar{x} - 3E < \mu < \bar{x} + 3E) \approx 99\%\]
Donde el Margen de Error (\(E\)) se define como:
\[E = \frac{\sigma}{\sqrt{n}}\]
media_muestral <- mean(x)
desv_est <- sd(x)
n_total <- length(x)
z_95 <- 1.96
error_est <- desv_est / sqrt(n_total)
margen <- z_95 * error_est
lim_inf_ic <- media_muestral - margen
lim_sup_ic <- media_muestral + margen
data.frame(
Parametro = "Range Promedio Kansas",
Lim_Inferior = round(lim_inf_ic, 4),
Media_Muestral = round(media_muestral, 4),
Lim_Superior = round(lim_sup_ic, 4),
Error_Estandar = paste0("+/- ", round(margen, 4)),
Confianza = "95% (Z = 1.96)",
stringsAsFactors = FALSE
) %>%
gt() %>%
tab_header(
title = md("**TABLA N\u00b0 4: ESTIMACIÓN DE LA MEDIA POBLACIONAL**"),
subtitle = md("*Inferencia Estadística para la Variable Range*")
) %>%
cols_label(
Parametro = md("**Parámetro**"),
Lim_Inferior = md("**Lim_Inferior**"),
Media_Muestral = md("**Media_Muestral**"),
Lim_Superior = md("**Lim_Superior**"),
Error_Estandar = md("**Error_Estándar**"),
Confianza = md("**Confianza**")
) %>%
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")),
locations=cells_title(groups="title")) %>%
tab_style(style=list(cell_fill(color="#C8E6C9"),cell_text(weight="bold")),
locations=cells_body(columns=Media_Muestral)) %>%
tab_style(style=cell_borders(sides="bottom",color="#E0E0E0",weight=px(1)),
locations=cells_body(rows=everything())) %>%
cols_align(align="center",
columns=c(Lim_Inferior,Media_Muestral,Lim_Superior,Error_Estandar,Confianza)) %>%
cols_align(align="left", columns=Parametro) %>%
tab_source_note(source_note=md("*Autor: Leslye Quinchiguango*")) %>%
tab_options(table.width=pct(100), table.font.size=px(13),
heading.title.font.size=px(16), heading.subtitle.font.size=px(12),
data_row.padding=px(6),
column_labels.border.top.width=px(2),
column_labels.border.bottom.width=px(2),
table_body.border.bottom.width=px(2),
table.border.top.style="hidden", table.border.bottom.style="hidden")
| TABLA N° 4: ESTIMACIÓN DE LA MEDIA POBLACIONAL | |||||
| Inferencia Estadística para la Variable Range | |||||
| Parámetro | Lim_Inferior | Media_Muestral | Lim_Superior | Error_Estándar | Confianza |
|---|---|---|---|---|---|
| Range Promedio Kansas | 19.617 | 19.7096 | 19.8023 | +/- 0.0927 | 95% (Z = 1.96) |
| Autor: Leslye Quinchiguango | |||||
Se trabajó con la variable Range dividida en 2 zonas con corte fijo en 31. Se aplicó el modelo Normal en la Zona 1 [1, 31) y Log-Normal en la Zona 2 [31, 44], con parámetros estimados exclusivamente con los datos de cada tramo: Zona 1 (media = 15.2986, sd = 6.5852), Zona 2 (meanlog = 0.7000, sdlog = 2.4041). La prueba de Pearson obtuvo 95.29% y 79.93% respectivamente, y los p-valores Kolmogorov-Smirnov fueron 0.6197 y 0. Por tanto, 0 zona(s) no superaron la prueba KS. El intervalo de confianza al 95% para la media poblacional de Range fue [19.617, 19.8023], con media muestral 19.7096 y margen de error +/- 0.0927.
Autor: Leslye Quinchiguango — Análisis Estadístico, Kansas Hydrocarbon Leases Dataset