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(CTY = suppressWarnings(as.integer(COUNTY_CODE))) %>%
  filter(!is.na(CTY), CTY >= 1, CTY <= 207) %>%
  pull(CTY)

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: 207

4. Tabla de Distribución de Frecuencias

Se calcula la distribución de frecuencias absolutas y relativas para la variable cuantitativa discreta agrupada Código de Condado, correspondiente a los arrendamientos de hidrocarburos registrados en Kansas, EE.UU.

x_min_st   <- min(x_raw); x_max_st <- max(x_raw)
rango_st   <- x_max_st - x_min_st
c_amp_st   <- ceiling(rango_st / k_sturges)
k_st       <- ceiling((rango_st + 1) / c_amp_st)
lim_inf_st <- x_min_st + (0:(k_st - 1)) * c_amp_st
lim_sup_st <- lim_inf_st + c_amp_st
lim_sup_st[k_st] <- x_max_st + 1
mc_st      <- floor((lim_inf_st + lim_sup_st) / 2)
breaks_st  <- c(lim_inf_st, lim_sup_st[k_st])

intervalos_cut_st <- cut(x_raw, breaks = breaks_st, right = FALSE, include.lowest = TRUE)
freq_abs_st       <- as.integer(table(intervalos_cut_st))

li_st <- lim_inf_st
ls_st <- lim_sup_st

hi_dec_st  <- freq_abs_st / n_conteo
Ni_asc_st  <- cumsum(freq_abs_st)
Hi_asc_st  <- cumsum(hi_dec_st)
Ni_desc_st <- n_conteo - c(0, head(Ni_asc_st, -1))
Hi_desc_st <- 1 - c(0, head(Hi_asc_st, -1))

etiq_st        <- paste0("[", li_st, " – ", ls_st, ")")
etiq_st[k_st]  <- paste0("[", li_st[k_st], " – ", ls_st[k_st] - 1, "]")

tabla_st_df <- data.frame(
  Intervalo = etiq_st,
  MC        = as.integer(mc_st),
  ni        = freq_abs_st,
  hi_pct    = round(hi_dec_st * 100, 2),
  hi_real   = round(hi_dec_st, 4),
  Ni_a      = Ni_asc_st,
  Hi_a      = round(Hi_asc_st, 4),
  Ni_d      = Ni_desc_st,
  Hi_d      = round(Hi_desc_st, 4),
  stringsAsFactors = FALSE
)

total_st_row <- data.frame(
  Intervalo = "TOTAL",
  MC        = NA_integer_,
  ni        = sum(freq_abs_st),
  hi_pct    = round(sum(hi_dec_st) * 100, 2),
  hi_real   = round(sum(hi_dec_st), 4),
  Ni_a      = max(Ni_asc_st),
  Hi_a      = round(max(Hi_asc_st), 4),
  Ni_d      = max(Ni_desc_st),
  Hi_d      = round(max(Hi_desc_st), 4),
  stringsAsFactors = FALSE
)

tabla_sturges_final <- bind_rows(tabla_st_df, total_st_row)

tabla_sturges_final %>%
  gt() %>%
  tab_header(
    title    = md("**Distribución de Frecuencias — Regla de Sturges (referencial)**"),
    subtitle = md(paste0(
      "*Código de Condado, Kansas, EE.UU. (n = ",
      format(n_conteo, big.mark = ","), ", k = ", k_st, " intervalos)*"
    ))
  ) %>%
  cols_label(
    Intervalo = md("**Intervalo [Li – Ls)**"),
    MC        = md("**Marca de Clase**"),
    ni        = md("**ni (FA)**"),
    hi_pct    = md("**hi %**"),
    hi_real   = md("**hi (decimal)**"),
    Ni_a      = md("**Ni ↑ (FAAa)**"),
    Hi_a      = md("**Hi ↑ (FRAa)**"),
    Ni_d      = md("**Ni ↓ (FAAd)**"),
    Hi_d      = md("**Hi ↓ (FRAd)**")
  ) %>%
  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_sturges_final), by = 2))
  ) %>%
  tab_style(
    style = list(cell_fill(color = "#D6D6D6"), cell_text(weight = "bold")),
    locations = cells_body(rows = Intervalo == "TOTAL", columns = everything())
  ) %>%
  fmt_missing(columns = everything(), missing_text = "—") %>%
  tab_source_note(source_note = md("*Autor: Leslye Quinchiguango*")) %>%
  tab_options(
    table.width                = pct(100),
    heading.title.font.size    = px(15),
    heading.subtitle.font.size = px(11),
    table.font.size            = px(12),
    data_row.padding           = px(4)
  )
Distribución de Frecuencias — Regla de Sturges (referencial)
Código de Condado, Kansas, EE.UU. (n = 47,757, k = 16 intervalos)
Intervalo [Li – Ls) Marca de Clase ni (FA) hi % hi (decimal) Ni ↑ (FAAa) Hi ↑ (FRAa) Ni ↓ (FAAd) Hi ↓ (FRAd)
[1 – 14) 7 5168 10.82 0.1082 5168 0.1082 47757 1.0000
[14 – 27) 20 2575 5.39 0.0539 7743 0.1621 42589 0.8918
[27 – 40) 33 2281 4.78 0.0478 10024 0.2099 40014 0.8379
[40 – 53) 46 2575 5.39 0.0539 12599 0.2638 37733 0.7901
[53 – 66) 59 3536 7.40 0.0740 16135 0.3379 35158 0.7362
[66 – 79) 72 2805 5.87 0.0587 18940 0.3966 31622 0.6621
[79 – 92) 85 2068 4.33 0.0433 21008 0.4399 28817 0.6034
[92 – 105) 98 3890 8.15 0.0815 24898 0.5213 26749 0.5601
[105 – 118) 111 1522 3.19 0.0319 26420 0.5532 22859 0.4787
[118 – 131) 124 3696 7.74 0.0774 30116 0.6306 21337 0.4468
[131 – 144) 137 3012 6.31 0.0631 33128 0.6937 17641 0.3694
[144 – 157) 150 2256 4.72 0.0472 35384 0.7409 14629 0.3063
[157 – 170) 163 3776 7.91 0.0791 39160 0.8200 12373 0.2591
[170 – 183) 176 2066 4.33 0.0433 41226 0.8632 8597 0.1800
[183 – 196) 189 4364 9.14 0.0914 45590 0.9546 6531 0.1368
[196 – 207] 202 2167 4.54 0.0454 47757 1.0000 2167 0.0454
TOTAL 47757 100.00 1.0000 47757 1.0000 47757 1.0000
Autor: Leslye Quinchiguango

Aplicando la Regla de Sturges, con 47,757 observaciones corresponderían 16 intervalos de clase. Sin embargo, un desglose tan fino dificulta la lectura visual y el ajuste de los indicadores sobre la distribución. Por ello, se simplifica el análisis a una tabla de máximo 10 intervalos de clase, criterio que conserva representatividad estadística sin sacrificar claridad interpretativa.

Justificación del agrupamiento. Código de Condado es discreta, pero al presentar 105 valores únicos posibles (códigos del 1 al 207), una tabla de frecuencia simple resultaría demasiado extensa y poco legible. Por ello se agrupa en intervalos de clase, como se hace con variables continuas, únicamente como recurso para resumir la información; su naturaleza discreta se conserva en los límites e indicadores, que siguen siendo enteros.

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: C\u00f3digo de Condado, ",
                                  "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: Código de Condado, Kansas (n = 47,757)
Intervalo MC ni hi% hi Ni (asc) Hi (asc) Ni (desc) Hi (desc)
[1 - 22) 11 6555 13.73 0.1373 6555 0.1373 47757 1.0000
[22 - 43) 32 3489 7.31 0.0731 10044 0.2103 41202 0.8627
[43 - 64) 53 5132 10.75 0.1075 15176 0.3178 37713 0.7897
[64 - 85) 74 5650 11.83 0.1183 20826 0.4361 32581 0.6822
[85 - 106) 95 4072 8.53 0.0853 24898 0.5213 26931 0.5639
[106 - 127) 116 4355 9.12 0.0912 29253 0.6125 22859 0.4787
[127 - 148) 137 4520 9.46 0.0946 33773 0.7072 18504 0.3875
[148 - 169) 158 5261 11.02 0.1102 39034 0.8173 13984 0.2928
[169 - 190) 179 5084 10.65 0.1065 44118 0.9238 8723 0.1827
[190 - 207] 199 3639 7.62 0.0762 47757 1.0000 3639 0.0762
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("C\u00f3digo de Condado",   side=1, line=3.5, cex=1)
mtext("Histograma General \u2014 C\u00f3digo de Condado, arrendamientos de hidrocarburos, Kansas, EE.UU.",
      side=3, line=3, cex=0.95, font=2)

6. Conjetura

El histograma de la variable Código de Condado muestra comportamiento irregular. El intervalo [1, 22) presenta un pico aislado no representativo del patrón general, por lo que se omite. En el tramo [22, 85) las barras crecen de izquierda a derecha, comportamiento que se modela con una Exponencial invertida aplicando la transformación \(x' = 85 - x\). En el tramo [85, 208] las barras presentan una forma acampanada compatible con una distribución Normal. Se trabaja con dos zonas con corte en 85 y parámetros estimados exclusivamente con los datos de cada tramo.

set.seed(42)

omitir_sup <- 22
corte_z    <- 85
lim_z1_min <- omitir_sup; lim_z1_max <- corte_z
lim_z2_min <- corte_z;    lim_z2_max <- x_max

x_z1 <- x[x >= omitir_sup & x <  corte_z]
x_z2 <- x[x >= corte_z    & x <= lim_z2_max]

cat("Omitido [1, 22)  \u2014 n:", sum(x < omitir_sup), "\n")
## Omitido [1, 22)  — n: 6555
cat("Zona 1 [22, 85)  \u2014 n:", length(x_z1), "\n")
## Zona 1 [22, 85)  — n: 14271
cat("Zona 2 [85, 208] \u2014 n:", length(x_z2), "\n")
## Zona 2 [85, 208] — n: 26931
# ── Zona 1: Exponencial invertida ────────────────────────────────────────────
x_z1_inv  <- corte_z - x_z1
offset_z1 <- min(x_z1_inv) - 0.001
x_z1_pos  <- x_z1_inv - offset_z1
fit_z1    <- fitdistr(x_z1_pos, "exponential")
rate_z1   <- fit_z1$estimate["rate"]

# ── Zona 2: Normal ────────────────────────────────────────────────────────────
fit_z2 <- fitdistr(x_z2, "normal")
mu_z2  <- fit_z2$estimate["mean"]
sd_z2  <- fit_z2$estimate["sd"]

cat("\n--- Zona 1 [22, 85): Exponencial invertida ---\n")
## 
## --- Zona 1 [22, 85): Exponencial invertida ---
cat("\u03bb\u0302 (rate)  :", round(rate_z1,  6), "\n")
## λ̂ (rate)  : 0.037535
cat("Offset     :", round(offset_z1, 4), "\n")
## Offset     : 1.999
cat("\n--- Zona 2 [85, 208]: Normal ---\n")
## 
## --- Zona 2 [85, 208]: Normal ---
cat("\u03bc\u0302 (media) :", round(mu_z2, 4), "\n")
## μ̂ (media) : 149.1326
cat("\u03c3\u0302 (desv.)  :", round(sd_z2, 4), "\n")
## σ̂ (desv.)  : 34.7186

6.1 Histograma General con Corte por Zona

h_plot         <- hist(x, breaks=breaks_vec, plot=FALSE)
h_plot$density <- hi_dec

colores_barras <- ifelse(breaks_vec[-length(breaks_vec)] <  omitir_sup, "white",
                  ifelse(breaks_vec[-length(breaks_vec)] <  corte_z,    "gray35",
                                                                         "gray70"))
par(mar=c(5,6,6,2))
plot(h_plot, col=colores_barras, 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=omitir_sup, col="black", lty=3, lwd=1.5)
abline(v=corte_z,    col="black", lty=2, lwd=2)

yt <- max(hi_dec)
text(mean(c(x_min, omitir_sup)),   yt*0.75, "Omitido\n[1 \u2013 22)",
     cex=0.80, font=3, col="gray40")
text(mean(c(omitir_sup, corte_z)), yt*0.75,
     "Zona 1\n[22 \u2013 85)\nExponencial\n(invertida)", cex=0.80, font=2)
text(mean(c(corte_z, lim_z2_max)), yt*0.75,
     "Zona 2\n[85 \u2013 208]\nNormal", cex=0.80, font=2)

mtext("Densidad de Probabilidad", side=2, line=4.5, cex=1)
mtext("C\u00f3digo de Condado",   side=1, line=3.5, cex=1)
mtext("Corte en 85 \u2014 Zona 1: Exponencial invertida | Zona 2: Normal | Omitido: [1, 22)",
      side=3, line=3, cex=0.9, font=2)

6.2 Histogramas Individuales por Zona

par(mfrow=c(2,1))

# ── Zona 1: Exponencial invertida ────────────────────────────────────────────
breaks_z1    <- seq(lim_z1_min, lim_z1_max, by=c_amp)
if (tail(breaks_z1,1) < lim_z1_max) breaks_z1 <- c(breaks_z1, lim_z1_max)
h_z1         <- hist(x_z1, breaks=breaks_z1, plot=FALSE)
hi_z1        <- h_z1$counts / length(x_z1)
dens_z1      <- hi_z1 / diff(breaks_z1)
h_z1$density <- dens_z1
k_z1         <- length(hi_z1)
grises_z1    <- gray(seq(0.20, 0.60, length.out=k_z1))

xs_z1     <- seq(lim_z1_min, lim_z1_max, length.out=500)
xs_inv    <- corte_z - xs_z1
xs_pos    <- xs_inv - offset_z1; xs_pos[xs_pos <= 0] <- 1e-9
ys_z1     <- dexp(xs_pos, rate=rate_z1)

par(mar=c(5,6,6,2))
plot(h_z1, col=grises_z1, border="black", freq=FALSE,
     ylim=c(0, max(c(dens_z1, ys_z1)) * 1.25),
     main="", xlab="", ylab="", las=1, xaxt="n")
axis(1, at=breaks_z1, labels=breaks_z1, las=1, cex.axis=0.9)
lines(xs_z1, ys_z1, col="black", lwd=2.5)
mtext("Densidad de Probabilidad", side=2, line=4.5, cex=1)
mtext("C\u00f3digo de Condado",   side=1, line=3.5, cex=1)
mtext(paste0("Gráfica N\u00b02: Zona 1 [22 \u2013 85) \u2014 Exponencial invertida (\u03bb\u0302 = ",
             round(rate_z1, 4), ")"),
      side=3, line=3, cex=0.9, font=2)
legend("topleft",
       legend=c("Histograma",
                paste0("Exponencial invertida (\u03bb\u0302=", round(rate_z1,4), ")")),
       fill=c("gray40",NA), border=c("black",NA),
       lty=c(NA,1), lwd=c(NA,2.5), bty="n", cex=0.85)

# ── Zona 2: Normal ────────────────────────────────────────────────────────────
breaks_z2    <- seq(lim_z2_min, lim_z2_max + 1, by=c_amp)
if (tail(breaks_z2,1) <= lim_z2_max) breaks_z2 <- c(breaks_z2, lim_z2_max + 1)
h_z2         <- hist(x_z2, breaks=breaks_z2, plot=FALSE)
hi_z2        <- h_z2$counts / length(x_z2)
dens_z2      <- hi_z2 / diff(breaks_z2)
h_z2$density <- dens_z2
k_z2         <- length(hi_z2)
grises_z2    <- gray(seq(0.40, 0.85, length.out=k_z2))

xs_z2 <- seq(lim_z2_min - 0.5, lim_z2_max + 0.5, length.out=500)
ys_z2 <- dnorm(xs_z2, mean=mu_z2, sd=sd_z2)

par(mar=c(5,6,6,2))
plot(h_z2, col=grises_z2, border="black", freq=FALSE,
     ylim=c(0, max(c(dens_z2, ys_z2)) * 1.25),
     main="", xlab="", ylab="", las=1, xaxt="n")
axis(1, at=breaks_z2, labels=breaks_z2, las=1, cex.axis=0.9)
lines(xs_z2, ys_z2, col="black", lwd=2.5)
mtext("Densidad de Probabilidad", side=2, line=4.5, cex=1)
mtext("C\u00f3digo de Condado",   side=1, line=3.5, cex=1)
mtext(paste0("Gráfica N\u00b03: Zona 2 [85 \u2013 208] \u2014 Normal (\u03bc\u0302 = ",
             round(mu_z2,2), ", \u03c3\u0302 = ", round(sd_z2,2), ")"),
      side=3, line=3, cex=0.9, font=2)
legend("topright",
       legend=c("Histograma",
                paste0("Normal(\u03bc\u0302=", round(mu_z2,2),
                       ", \u03c3\u0302=", round(sd_z2,2), ")")),
       fill=c("gray65",NA), border=c("black",NA),
       lty=c(NA,1), lwd=c(NA,2.5), bty="n", cex=0.85)

par(mfrow=c(1,1))

7. Cálculo de Parámetros y Probabilidades

n_z1       <- length(x_z1); n_z2 <- length(x_z2)
media_z1   <- mean(x_z1);   sd_z1_calc <- sd(x_z1)
media_z2   <- mean(x_z2);   sd_z2_calc <- sd(x_z2)

data.frame(
  Zona = c(rep("Zona 1 [22, 85) \u2014 Exponencial invertida", 4),
           rep("Zona 2 [85, 208] \u2014 Normal", 4)),
  Parametro = c(
    "n (observaciones zona)",
    "Media observada zona",
    "\u03bb\u0302 = rate (MV sobre datos invertidos)",
    "Offset (corte \u2212 min zona \u2212 0.001)",
    "n (observaciones zona)",
    "Media observada zona",
    "\u03bc\u0302 = media zona",
    "\u03c3\u0302 = desv. estándar zona"
  ),
  Valor = c(
    as.character(n_z1), round(media_z1, 4),
    round(rate_z1, 6),  round(offset_z1, 4),
    as.character(n_z2), round(media_z2, 4),
    round(mu_z2, 4),    round(sd_z2, 4)
  )
) %>%
  gt() %>%
  tab_header(title    = md("**Tabla N\u00b02: Parámetros Estimados por Zona**"),
             subtitle = md("*Zona 1: Exponencial invertida | Zona 2: Normal \u2014 C\u00f3digo de Condado*")) %>%
  cols_label(Zona=md("**Zona**"), Parametro=md("**Parámetro**"), 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,8,by=2))) %>%
  tab_source_note(source_note=md("*Autor: Leslye Quinchiguango*")) %>%
  tab_options(table.width=pct(92), heading.title.font.size=px(15),
              heading.subtitle.font.size=px(11), table.font.size=px(13),
              data_row.padding=px(6))
Tabla N°2: Parámetros Estimados por Zona
Zona 1: Exponencial invertida | Zona 2: Normal — Código de Condado
Zona Parámetro Valor
Zona 1 [22, 85) — Exponencial invertida n (observaciones zona) 14271
Zona 1 [22, 85) — Exponencial invertida Media observada zona 56.3594
Zona 1 [22, 85) — Exponencial invertida λ̂ = rate (MV sobre datos invertidos) 0.037535
Zona 1 [22, 85) — Exponencial invertida Offset (corte − min zona − 0.001) 1.999
Zona 2 [85, 208] — Normal n (observaciones zona) 26931
Zona 2 [85, 208] — Normal Media observada zona 149.1326
Zona 2 [85, 208] — Normal μ̂ = media zona 149.1326
Zona 2 [85, 208] — Normal σ̂ = desv. estándar zona 34.7186
Autor: Leslye Quinchiguango
# ── Zona 1: Exponencial invertida ─────────────────────────────────────────────
# P(X > 30): códigos que superan 30 en zona 1
# En espacio invertido: P(x' < corte - 30) = P(x' < 55)
p1_a <- pexp(corte_z - 30 - offset_z1, rate=rate_z1)

# P(22 ≤ X < 43): primer intervalo de zona 1
p1_b <- pexp(corte_z - 22 - offset_z1, rate=rate_z1) -
        pexp(corte_z - 43 - offset_z1, rate=rate_z1)

# P(X < 43): códigos bajos de zona 1
p1_c <- pexp(corte_z - 43 - offset_z1, rate=rate_z1, lower.tail=FALSE)

# ── Zona 2: Normal(mu_z2, sd_z2) ─────────────────────────────────────────────
p2_a <- pnorm(148, mean=mu_z2, sd=sd_z2, lower.tail=FALSE)  # P(X ≥ 148)
p2_b <- pnorm(169, mean=mu_z2, sd=sd_z2) -
        pnorm(127, mean=mu_z2, sd=sd_z2)                      # P(127 ≤ X < 169)
p2_c <- pnorm(127, mean=mu_z2, sd=sd_z2)                     # P(X < 127)

data.frame(
  Zona = c(rep("Zona 1 \u2014 Exponencial invertida", 3),
           rep("Zona 2 \u2014 Normal", 3)),
  Evento = c("P(X > 30)", "P(22 \u2264 X < 43)", "P(X < 43)",
             "P(X \u2265 148)", "P(127 \u2264 X < 169)", "P(X < 127)"),
  Descripcion = c(
    "Código de condado supera 30 en la Zona 1",
    "Código en el primer intervalo de la Zona 1",
    "Código en la parte baja de la Zona 1",
    "Código en la zona de mayor concentración",
    "Código en el intervalo central de la Zona 2",
    "Código por debajo del centro 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 C\u00f3digo de Condado*")) %>%
  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 — Código de Condado
Zona Evento Descripción Probabilidad
Zona 1 — Exponencial invertida P(X > 30) Código de condado supera 30 en la Zona 1 0.8632
Zona 1 — Exponencial invertida P(22 ≤ X < 43) Código en el primer intervalo de la Zona 1 0.1215
Zona 1 — Exponencial invertida P(X < 43) Código en la parte baja de la Zona 1 0.2228
Zona 2 — Normal P(X ≥ 148) Código en la zona de mayor concentración 0.5130
Zona 2 — Normal P(127 ≤ X < 169) Código en el intervalo central de la Zona 2 0.4545
Zona 2 — Normal P(X < 127) Código por debajo del centro de la Zona 2 0.2619
Autor: Leslye Quinchiguango
set.seed(42)

# ── Pearson Zona 1 ────────────────────────────────────────────────────────────
mc_z1     <- (head(breaks_z1,-1) + tail(breaks_z1,-1)) / 2
mc_z1_inv <- corte_z - mc_z1 - offset_z1
mc_z1_inv[mc_z1_inv <= 0] <- 1e-9
hi_teo_z1 <- dexp(mc_z1_inv, rate=rate_z1) * diff(breaks_z1)
hi_teo_z1 <- hi_teo_z1 / sum(hi_teo_z1)
hi_obs_z1 <- h_z1$counts / n_z1
pearson_z1 <- round(cor(hi_obs_z1, hi_teo_z1) * 100, 2)

# ── Pearson Zona 2 ────────────────────────────────────────────────────────────
mc_z2     <- (head(breaks_z2,-1) + tail(breaks_z2,-1)) / 2
hi_teo_z2 <- dnorm(mc_z2, mean=mu_z2, sd=sd_z2) * diff(breaks_z2)
hi_teo_z2 <- hi_teo_z2 / sum(hi_teo_z2)
hi_obs_z2 <- h_z2$counts / n_z2
pearson_z2 <- round(cor(hi_obs_z2, hi_teo_z2) * 100, 2)

# ── KS Zona 1 ────────────────────────────────────────────────────────────────
samp_z1     <- sample(x_z1, size=min(400, n_z1), replace=FALSE)
samp_z1_inv <- corte_z - samp_z1 - offset_z1
ks_z1       <- ks.test(samp_z1_inv, "pexp", rate=rate_z1)

# ── KS Zona 2 ────────────────────────────────────────────────────────────────
samp_z2 <- sample(x_z2, size=min(400, n_z2), replace=FALSE)
ks_z2   <- ks.test(samp_z2, "pnorm", mean=mu_z2, sd=sd_z2)

val_z1 <- ifelse(pearson_z1 > 70, "APROBADO", "RECHAZADO")
val_z2 <- ifelse(pearson_z2 > 70, "APROBADO", "RECHAZADO")

data.frame(
  Zona       = c("Zona 1 [22 \u2013 85) \u2014 Exponencial invertida",
                 "Zona 2 [85 \u2013 208] \u2014 Normal"),
  Pearson_R  = c(pearson_z1, pearson_z2),
  KS_pvalor  = c(round(ks_z1$p.value,4), round(ks_z2$p.value,4)),
  Validacion = c(val_z1, val_z2)
) %>%
  gt() %>%
  tab_header(title    = md("**Tabla N\u00b04: Resumen de Validación por Zona**"),
             subtitle = md("*Pearson (R%) y Kolmogorov-Smirnov (p-valor) \u2014 C\u00f3digo de Condado*")) %>%
  cols_label(Zona=md("**Zona**"), Pearson_R=md("**Pearson (R %)**"),
             KS_pvalor=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_R, KS_pvalor, Validacion)) %>%
  cols_align(align="left",   columns=Zona) %>%
  fmt_number(columns=Pearson_R, decimals=2) %>%
  fmt_number(columns=KS_pvalor, decimals=4) %>%
  tab_source_note(source_note=md("*Autor: Leslye Quinchiguango*")) %>%
  tab_options(table.width=pct(92), table.font.size=px(13),
              heading.title.font.size=px(15), heading.subtitle.font.size=px(11),
              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: Resumen de Validación por Zona
Pearson (R%) y Kolmogorov-Smirnov (p-valor) — Código de Condado
Zona Pearson (R %) K-S (p-valor) Validación
Zona 1 [22 – 85) — Exponencial invertida 87.51 0.0000 APROBADO
Zona 2 [85 – 208] — Normal 80.36 0.0000 APROBADO
Autor: Leslye Quinchiguango

8. Intervalo de Confianza

El Intervalo de Confianza estima el rango dentro del cual se encuentra la verdadera media poblacional de Código de Condado con un nivel de confianza del 95%. Se calcula con la totalidad de los registros válidos. El Teorema Central del Límite garantiza normalidad en la distribución de medias muestrales dado el volumen de datos (\(n=\) 47,757).

\[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      = "C\u00f3digo de Condado 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 5: ESTIMACIÓN DE LA MEDIA POBLACIONAL**"),
             subtitle = md("*Inferencia Estadística para la Variable C\u00f3digo de Condado*")) %>%
  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° 5: ESTIMACIÓN DE LA MEDIA POBLACIONAL
Inferencia Estadística para la Variable Código de Condado
Parámetro Lim_Inferior Media_Muestral Lim_Superior Error_Estándar Confianza
Código de Condado Promedio Kansas 101.6409 102.1966 102.7523 +/- 0.5557 95% (Z = 1.96)
Autor: Leslye Quinchiguango

9. Conclusiones

El comportamiento de Código de Condado se explica con un modelo Exponencial invertida (λ̂ = 0.0375) en la Zona 1 [22, 85) y un modelo Normal (μ̂ = 149.13, σ̂ = 34.72) en la Zona 2 [85, 208]. Podemos afirmar con un 95% de confianza que la media aritmética real de Código de Condado se encuentra entre 101.6409 y 102.7523, con una desviación estándar de 61.958.


Autor: Leslye Quinchiguango — Análisis Estadístico, Kansas Hydrocarbon Leases Dataset