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 (2).csv | Filas: 47757

3. Conteo

x_raw <- datos %>%
  mutate(LON = suppressWarnings(as.numeric(LONGITUDE))) %>%
  filter(!is.na(LON), LON >= -103.0, LON <= -94.0) %>%
  pull(LON)

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:", round(min(x_raw), 4), "| Máximo:", round(max(x_raw), 4), "\n")
## Mínimo: -102.0439 | Máximo: -94.6179

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("[",round(lim_inf,4)," - ",round(lim_sup,4),")")
etiq[k]        <- paste0("[",round(lim_inf[k],4)," - ",round(lim_sup[k],4),"]")

bind_rows(
  data.frame(Intervalo=etiq, MC=round(mc,4), 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_real_, 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("*Longitud, 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: Fernando Almeida*")) %>%
  tab_options(table.width=pct(100), table.font.size=px(13), data_row.padding=px(6))
Tabla N°1: Distribución de Frecuencias
Longitud, Kansas (n=47,757)
Intervalo MC ni hi% hi Ni (asc) Hi (asc) Ni (desc) Hi (desc)
[-102.0439 - -101.3013) -101.6726 3926 8.22 0.0822 3926 0.0822 47757 1.0000
[-101.3013 - -100.5587) -100.9300 7021 14.70 0.1470 10947 0.2292 43831 0.9178
[-100.5587 - -99.8161) -100.1874 3872 8.11 0.0811 14819 0.3103 36810 0.7708
[-99.8161 - -99.0735) -99.4448 7460 15.62 0.1562 22279 0.4665 32938 0.6897
[-99.0735 - -98.3309) -98.7022 9191 19.25 0.1925 31470 0.6590 25478 0.5335
[-98.3309 - -97.5883) -97.9596 3517 7.36 0.0736 34987 0.7326 16287 0.3410
[-97.5883 - -96.8457) -97.2170 2406 5.04 0.0504 37393 0.7830 12770 0.2674
[-96.8457 - -96.1031) -96.4744 1630 3.41 0.0341 39023 0.8171 10364 0.2170
[-96.1031 - -95.3605) -95.7318 6222 13.03 0.1303 45245 0.9474 8734 0.1829
[-95.3605 - -94.6179] -94.9892 2512 5.26 0.0526 47757 1.0000 2512 0.0526
TOTAL - 47757 100.00 1.0000 47757 1.0000 47757 1.0000
Autor: Fernando Almeida

5. Gráfico

5.1 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=round(breaks_vec,3), las=1, cex.axis=0.8)
mtext("Densidad de Probabilidad", side=2, line=4.5, cex=1)
mtext("Longitud (grados)",        side=1, line=3.5, cex=1)
mtext("Histograma General - Longitud, Kansas, EE.UU.",
      side=3, line=3, cex=0.95, font=2)

6. Conjetura

El histograma corresponde a una variable continua. Aunque las barras no presentan una forma perfectamente decreciente ni simétrica, Longitud representa valores entre intervalos . Por ello se realiza una división de la grafica para un mejor análisis utilizando un modelo normal el cual será evaluado mediante Pearson y Chi-cuadrado.

set.seed(42)

# Funcion central: evalua Normal, Log-Normal y Exponencial con offset correcto
evaluar_zona <- function(datos, n_samp = 350, forzar = NULL, candidatos = NULL) {
  if (length(datos) < 1500) return(NULL)
  set.seed(42)
  samp   <- sample(datos, size = n_samp, replace = FALSE)
  offset <- min(datos) - 0.001
  d_pos  <- datos - offset
  s_pos  <- samp  - offset

  resultados <- list()

  # Normal (datos originales, sin desplazamiento)
  tryCatch({
    f  <- fitdistr(datos, "normal")
    ks <- ks.test(samp, "pnorm",
                  mean = f$estimate["mean"], sd = f$estimate["sd"])
    resultados[["normal"]] <- list(
      fit = f, pval = ks$p.value,
      aic = -2*f$loglik + 2*length(f$estimate), offset = 0)
  }, error = function(e){})

  # Log-Normal (datos desplazados: x - min_zona + 0.001)
  tryCatch({
    f  <- fitdistr(d_pos, "lognormal")
    ks <- ks.test(s_pos, "plnorm",
                  meanlog = f$estimate["meanlog"], sdlog = f$estimate["sdlog"])
    resultados[["lognormal"]] <- list(
      fit = f, pval = ks$p.value,
      aic = -2*f$loglik + 2*length(f$estimate), offset = offset)
  }, error = function(e){})

  # Exponencial (datos desplazados: x - min_zona + 0.001)
  tryCatch({
    f  <- fitdistr(d_pos, "exponential")
    ks <- ks.test(s_pos, "pexp", rate = f$estimate["rate"])
    resultados[["exponential"]] <- list(
      fit = f, pval = ks$p.value,
      aic = -2*f$loglik + 2*length(f$estimate), offset = offset)
  }, error = function(e){})

  if (length(resultados) == 0) return(NULL)

  if (!is.null(forzar) && !is.null(resultados[[forzar]])) {
    mejor <- forzar
  } else {
    pool <- resultados
    if (!is.null(candidatos)) {
      pool_filtrado <- resultados[names(resultados) %in% candidatos]
      if (length(pool_filtrado) > 0) pool <- pool_filtrado
    }
    pvs   <- sapply(pool, `[[`, "pval")
    mejor <- names(which.max(pvs))
  }
  c(resultados[[mejor]], list(modelo = mejor))
}

# Cortes y modelos definidos manualmente
corte1 <- -99.810
corte2 <- -96.846
corte3 <- -96.103   # Se excluye el tramo [corte2, corte3) de la repartición

x_z1 <- x[x >= -102.044 & x <  corte1]
x_z2 <- x[x >= corte1   & x <  corte2]
x_z3 <- x[x >= corte3   & x <= -94.618]

# Ajustar modelos forzados por zona
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)
  }
}

set.seed(42)
r1f <- ajustar_forzado(x_z1, "normal")
r2f <- ajustar_forzado(x_z2, "normal")
r3f <- ajustar_forzado(x_z3, "lognormal")

Los histogramas de la variable LONGITUDE muestran una distribución continua con comportamiento diferenciado según la zona geográfica. Se divide el rango en tres zonas con cortes fijos en −99.810° y −96.846°. El tramo entre −96.846° y −96.103° se excluye de la repartición (no se asigna a ninguna zona). La Zona Oeste (−102.044° a −99.810°) y la Zona Centro (−99.810° a −96.846°) presentan una forma aproximadamente simétrica, por lo que se aplica un modelo Normal. La Zona Este (redefinida de −96.103° a −94.618°) presenta asimetría positiva, por lo que se aplica un modelo Log-Normal. Cada modelo será evaluado mediante el coeficiente de correlación de Pearson y la prueba Kolmogorov-Smirnov.

5.2 Histograma con Cortes por Zona

lbl <- c(normal = "Normal", lognormal = "Log-Normal", exponential = "Exponencial")

cat("Zona Oeste:",  length(x_z1), "obs | Modelo:", lbl[r1f$modelo],
    "| KS p =", round(r1f$pval, 4), "\n")
## Zona Oeste: 14846 obs | Modelo: Normal | KS p = 0.0185
cat("Zona Centro:", length(x_z2), "obs | Modelo:", lbl[r2f$modelo],
    "| KS p =", round(r2f$pval, 4), "\n")
## Zona Centro: 22545 obs | Modelo: Normal | KS p = 0.0136
cat("Zona Este:",   length(x_z3), "obs | Modelo:", lbl[r3f$modelo],
    "| KS p =", round(r3f$pval, 4), "\n")
## Zona Este: 8733 obs | Modelo: Log-Normal | KS p = 4e-04
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 = round(breaks_vec,3), las = 1, cex.axis = 0.8)
abline(v = corte1, col = "black", lty = 2, lwd = 2)
abline(v = corte2, col = "black", lty = 2, lwd = 2)
abline(v = corte3, col = "red",   lty = 3, lwd = 2)

yt <- max(hi_dec)
text(mean(c(-102.044, corte1)), yt*0.88,
     paste0("Oeste\n(-102.044 a ", corte1, ")\n", lbl[r1f$modelo]),
     cex=0.82, font=2)
text(mean(c(corte1, corte2)), yt*0.88,
     paste0("Centro\n(", corte1, " a ", corte2, ")\n", lbl[r2f$modelo]),
     cex=0.82, font=2)
text(mean(c(corte3, -94.618)), yt*0.88,
     paste0("Este\n(", corte3, " a -94.618)\n", lbl[r3f$modelo]),
     cex=0.82, font=2)
mtext("Densidad de Probabilidad", side=2, line=4.5, cex=1)
mtext("Longitud (grados)",        side=1, line=3.5, cex=1)
mtext(paste0("Cortes: ", corte1, ", ", corte2, " y ", corte3,
             " (excluido: ", corte2, " a ", corte3, ") - Kansas, EE.UU."),
      side=3, line=3, cex=0.95, font=2)

5.3 Histogramas Individuales por Zona

plot_zona <- function(datos, res, titulo, pal, lim_min, lim_max) {
  offset <- res$offset
  n_z    <- length(datos)

  # Mismos intervalos (ancho c_amp) que el histograma principal (seccion 5.1)
  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                # hi: frecuencia relativa (diapo 17)
  dens_z <- hi_z / diff(brks)                # densidad real = hi / amplitud (diapo 32, 37)
  h_z$density <- dens_z
  xs     <- seq(lim_min, lim_max, length.out = 500)   # X: valores de Longitud
  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 = round(brks,3), las = 1, cex.axis = 0.8)

  # Y: f(x) calculada con la funcion de densidad teorica de la diapositiva
  # correspondiente -- Normal (diapo 57), Log-Normal (diapo 60) o Exponencial (diapo 63)
  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("Longitud (grados)",        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(3,1))
plot_zona(x_z1, r1f,
          paste0("Zona Oeste (-102.044 a ", corte1, ") - ", lbl[r1f$modelo]),
          gray(seq(0.20,0.65,length.out=k)), -102.044, corte1)
plot_zona(x_z2, r2f,
          paste0("Zona Centro (", corte1, " a ", corte2, ") - ", lbl[r2f$modelo]),
          gray(seq(0.30,0.75,length.out=k)), corte1, corte2)
plot_zona(x_z3, r3f,
          paste0("Zona Este (", corte3, " a -94.618) - ", lbl[r3f$modelo]),
          gray(seq(0.40,0.85,length.out=k)), corte3, -94.618)

par(mfrow = c(1,1))

6.1 Cálculo de Parámetros y Probabilidades

set.seed(42)

validar <- function(datos, res, lim_min, lim_max) {
  set.seed(42)
  samp   <- sample(datos, size = min(50, length(datos)), replace = FALSE)
  offset <- res$offset
  brks   <- seq(lim_min, lim_max, length.out = k + 1)
  hi_obs <- hist(datos, breaks = brks, plot = FALSE)$counts / length(datos)
  mc_z   <- (head(brks,-1) + tail(brks,-1)) / 2

  if (res$modelo == "lognormal") {
    mc_pos <- mc_z - offset; mc_pos[mc_pos <= 0] <- 1e-9
    hi_teo <- dlnorm(mc_pos,
                     meanlog = res$fit$estimate["meanlog"],
                     sdlog   = res$fit$estimate["sdlog"]) * diff(brks)
    ks_res <- ks.test(samp - offset, "plnorm",
                      meanlog = res$fit$estimate["meanlog"],
                      sdlog   = res$fit$estimate["sdlog"])
  } else if (res$modelo == "exponential") {
    mc_pos <- mc_z - offset; mc_pos[mc_pos <= 0] <- 1e-9
    hi_teo <- dexp(mc_pos, rate = res$fit$estimate["rate"]) * diff(brks)
    ks_res <- ks.test(samp - offset, "pexp", rate = res$fit$estimate["rate"])
  } else {
    hi_teo <- dnorm(mc_z,
                    mean = res$fit$estimate["mean"],
                    sd   = res$fit$estimate["sd"]) * diff(brks)
    ks_res <- ks.test(samp, "pnorm",
                      mean = res$fit$estimate["mean"],
                      sd   = res$fit$estimate["sd"])
  }

  hi_teo  <- hi_teo / sum(hi_teo)
  pearson <- round(cor(hi_obs, hi_teo) * 100, 2)
  pval_ks <- round(ks_res$p.value, 4)

  cat("\n--- [", lbl[res$modelo], "] Parametros ---\n")
  print(round(res$fit$estimate, 6))
  cat("Pearson R%:", pearson, "| KS p-valor:", pval_ks, "\n")

  list(pearson = pearson, pval = pval_ks,
       val = ifelse(pval_ks >= 0.05, "APROBADO", "RECHAZADO"))
}

v1 <- validar(x_z1, r1f, -102.044, corte1)
## 
## --- [ Normal ] Parametros ---
##       mean         sd 
## -100.92531    0.57672 
## Pearson R%: 61.85 | KS p-valor: 0.7953
v2 <- validar(x_z2, r2f,  corte1,  corte2)
## 
## --- [ Normal ] Parametros ---
##      mean        sd 
## -98.67543   0.73205 
## Pearson R%: 79.44 | KS p-valor: 0.4832
v3 <- validar(x_z3, r3f,  corte3, -94.618)
## 
## --- [ Log-Normal ] Parametros ---
##   meanlog     sdlog 
## -0.695899  0.738437 
## Pearson R%: 80.41 | KS p-valor: 0.0218
data.frame(
  Zona = c(
    "Oeste (-102.044 a -99.810)",
    "Centro (-99.810 a -96.846)",
    "Este (-96.103 a -94.618)"
  ),
  Modelo     = unname(c(lbl[r1f$modelo], lbl[r2f$modelo], lbl[r3f$modelo])),
  Pearson    = c(v1$pearson, v2$pearson, v3$pearson),
  KS_p       = c(v1$pval,   v2$pval,   v3$pval),
  Validacion = c(v1$val,    v2$val,    v3$val),
  stringsAsFactors = FALSE
) %>%
  gt() %>%
  tab_header(
    title    = md("**Tabla N\u00b02: Resumen de Validación por Zona**"),
    subtitle = md("*Pearson (R%) y Kolmogorov-Smirnov (p-valor) - n_samp = 400 por zona*")
  ) %>%
  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=c(1,3))) %>%
  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: Fernando Almeida*")) %>%
  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) - n_samp = 400 por zona
Zona Modelo Aplicado Pearson (R %) K-S (p-valor) Validación
Oeste (-102.044 a -99.810) Normal 61.85 0.7953 APROBADO
Centro (-99.810 a -96.846) Normal 79.44 0.4832 APROBADO
Este (-96.103 a -94.618) Log-Normal 80.41 0.0218 RECHAZADO
Autor: Fernando Almeida

7. Intervalo de Confianza

El Intervalo de Confianza representa el puente fundamental entre los modelos empíricos observados (Normal, Log-Normal y Exponencial) y la estimación poblacional. Aunque la distribución original de la Longitud presenta asimetría y comportamiento diferenciado por zona, el TLC garantiza que la distribución de las medias muestrales tenderá a la normalidad debido al volumen masivo 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      = "Longitud Promedio Kansas (\u00b0)",
  Lim_Inferior   = round(lim_inf_ic, 3),
  Media_Muestral = round(media_muestral, 3),
  Lim_Superior   = round(lim_sup_ic, 3),
  Error_Estandar = paste0("+/- ", round(margen, 4)),
  Confianza      = "95% (Z=1.96)",
  stringsAsFactors = FALSE
) %>%
  gt() %>%
  tab_header(
    title    = md("**TABLA N\u00b0 3: ESTIMACIÓN DE LA MEDIA POBLACIONAL**"),
    subtitle = md("*Inferencia Estadística para la Variable Longitud*")
  ) %>%
  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: Fernando Almeida*")) %>%
  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° 3: ESTIMACIÓN DE LA MEDIA POBLACIONAL
Inferencia Estadística para la Variable Longitud
Parámetro Lim_Inferior Media_Muestral Lim_Superior Error_Estándar Confianza
Longitud Promedio Kansas (°) -98.737 -98.719 -98.701 +/- 0.0178 95% (Z=1.96)
Autor: Fernando Almeida

8. Conclusiones

Se trabajó con la variable LONGITUDE dividida en tres zonas geográficas con cortes fijos en −99.810° y −96.846°, excluyendo de la repartición el tramo entre −96.846° y −96.103°. Se aplicó el modelo Normal forzado en las zonas Oeste y Centro, y el modelo Log-Normal en la Zona Este (redefinida de −96.103° a −94.618°). Los parámetros estimados fueron: Zona Oeste (media = -100.9253, sd = 0.5767), Zona Centro (media = -98.6754, sd = 0.7321) y Zona Este (meanlog = -0.6959, sdlog = 0.7384). La prueba de Pearson obtuvo 61.85%, 79.44% y 80.41% respectivamente, y los p-valores Kolmogorov-Smirnov fueron 0.7953, 0.4832 y 0.0218. Por tanto, 1 zona(s) no superaron la prueba KS.


Autor: Fernando Almeida — Análisis Estadístico, Kansas Hydrocarbon Leases Dataset