1. Cargar Librerías

library(readr); library(dplyr); library(gt); library(MASS)
cat("Librerías cargadas correctamente.\n")
## Librerías cargadas correctamente.

2. Cargar Datos

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

3. Conteo

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

4. Tabla de Distribución de Frecuencias

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

5. Gráfico Histograma General

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)

6. Conjetura

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

6.1 Histograma con Cortes por Zona

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)

6.2 Histogramas Individuales por Zona

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))

7. Cálculo de Parámetros y Probabilidades

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

8. Intervalo de Confianza

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

9. Conclusiones

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