library(dplyr)
library(gt)

1 Carga de Datos y Librerías

datos <- read.csv("~/Estudio/TERCER SEMESTRE/Estadistica/Dataset.csv",
                   sep = ";", stringsAsFactors = FALSE)

datos_ciudad <- datos %>%
  group_by(CITY) %>%
  summarise(MINAS_EXTRA = first(MINAS_EXTRA)) %>%
  ungroup()

MINAS_EXTRA <- as.numeric(datos_ciudad$MINAS_EXTRA)
MINAS_EXTRA <- na.omit(MINAS_EXTRA)
n <- length(MINAS_EXTRA)
n
## [1] 1347

2 Tabla de Distribución de Frecuencias

tabla_freq <- table(MINAS_EXTRA)

valor <- as.numeric(names(tabla_freq))
ni    <- as.numeric(tabla_freq)
hi    <- round((ni/sum(ni))*100, 2)

TDFgeo <- data.frame(valor, ni, hi)

fila_total <- data.frame(
  valor = "TOTAL",
  ni    = sum(TDFgeo$ni),
  hi    = 100.00
)

TDFgeo_total <- rbind(TDFgeo, fila_total)

tabla_geo <- TDFgeo_total %>%
  gt() %>%
  tab_header(
    title = md("**Tabla N°1**"),
    subtitle = md("Tabla de distribución de frecuencias de MINAS_EXTRA")
  ) %>%
  cols_label(
    valor = "N° de minas extra",
    ni    = "Frecuencia absoluta",
    hi    = "Frecuencia relativa (%)"
  ) %>%
  tab_source_note(
    source_note = md("Autor: Luis Cruz")
  ) %>%
  tab_options(
    table.border.top.color = "black",
    table.border.bottom.color = "black",
    table.border.top.style = "solid",
    table.border.bottom.style = "solid",
    column_labels.border.top.color = "black",
    column_labels.border.bottom.color = "black",
    column_labels.border.bottom.width = px(2),
    row.striping.include_table_body = TRUE,
    heading.border.bottom.color = "black",
    heading.border.bottom.width = px(2),
    table_body.hlines.color = "gray",
    table_body.border.bottom.color = "black"
  )

tabla_geo
Tabla N°1
Tabla de distribución de frecuencias de MINAS_EXTRA
N° de minas extra Frecuencia absoluta Frecuencia relativa (%)
0 570 42.32
1 377 27.99
2 167 12.40
3 105 7.80
4 54 4.01
5 33 2.45
6 16 1.19
7 14 1.04
8 4 0.30
9 4 0.30
10 2 0.15
11 1 0.07
TOTAL 1347 100.00
Autor: Luis Cruz

3 Gráfica de Distribución de Frecuencias

porcentajes_plot <- hi
nombres_plot <- valor

barras <- barplot(
  height = porcentajes_plot,
  names.arg = nombres_plot,
  space = 0.4,
  col = "skyblue",
  border = "black",
  main = "Gráfica N°1: Distribución porcentual del número\nde minas extra por ciudad ",
  xlab = "Número de minas extra",
  ylab = "Porcentaje",
  las = 1,
  ylim = c(0, max(porcentajes_plot) * 1.15),
  cex.names = 0.85
)

# Cuadrícula horizontal (líneas guía)
abline(h = pretty(c(0, max(porcentajes_plot))), col = "gray70", lty = 2, lwd = 0.8)

# Se vuelven a dibujar las barras encima para que la cuadrícula quede detrás
barplot(
  height = porcentajes_plot,
  space = 0.4,
  col = "skyblue",
  border = "black",
  add = TRUE,
  axes = FALSE,
  names.arg = rep("", length(nombres_plot))
)

box()

4 Conjetura del Modelo

Pensemos en la apertura de minas en una ciudad como una secuencia de “intentos” independientes: una vez que una ciudad tiene su primera mina, existe una probabilidad p de que ahí se detenga la expansión (éxito = no se abren más minas) y una probabilidad (1-p) de que se abra una mina adicional (fracaso = la expansión continúa).

MINAS_EXTRA = número de minas adicionales (más allá de la primera) que se siguieron abriendo en esa ciudad antes de que la expansión se detuviera.

Esto es exactamente la definición clásica de la variable Geométrica: número de fracasos antes del primer éxito, en una secuencia de ensayos independientes con probabilidad de éxito constante p. Cada “intento de seguir expandiendo” es independiente de los anteriores (propiedad de falta de memoria), lo cual es razonable si asumimos que la decisión de abrir una mina más no depende de cuántas ya se abrieron antes.

p_1 <- 1 / (mean(MINAS_EXTRA) + 1)
p_1
## [1] 0.4420742
valores <- 0:max(MINAS_EXTRA)

Fo_pct_conjetura <- as.numeric(table(factor(MINAS_EXTRA, levels = valores))) / n * 100
Fe_pct_conjetura <- dgeom(valores, p_1) * 100

datos_barras <- rbind(Fo_pct_conjetura, Fe_pct_conjetura)
colnames(datos_barras) <- valores
rownames(datos_barras) <- c("Realidad", "Modelo Geométrico")

barplot(datos_barras,
        beside = TRUE,
        col = c("blue", "red"),
        border = "black",
        ylim = c(0, max(datos_barras) * 1.2),
        main = "Gráfica N°2: Distribución porcentual de\nMINAS_EXTRA",
        xlab = "Número de minas extra",
        ylab = "Probabilidad")

legend("topright",
       legend = c("Realidad", "Modelo geométrico"),
       fill = c("blue", "red"),
       horiz = TRUE,
       bty = "n",
       cex = 0.8)

5 Test de Aprobación

Fo_completo <- as.numeric(table(factor(MINAS_EXTRA, levels = 0:max(MINAS_EXTRA))))

Fo_1 <- c(Fo_completo[1:9], sum(Fo_completo[10:length(Fo_completo)]))
Fo_1
##  [1] 570 377 167 105  54  33  16  14   4   7
Fe_1 <- c(dgeom(0:8, p_1) * n, (1 - pgeom(8, p_1)) * n)
Fe_1
##  [1] 595.473909 332.230274 185.359851 103.417048  57.699042  32.191786
##  [7]  17.960629  10.020699   5.590807   7.055955
# Expresar Fo y Fe en porcentaje para comparar
Fo_pct <- (Fo_1/n)*100
Fe_pct <- (Fe_1/n)*100

plot(Fo_pct, Fe_pct,
     xlim = c(0, max(Fo_pct, Fe_pct)),
     ylim = c(0, max(Fo_pct, Fe_pct)),
     main = "Gráfica N°3: Correlación de frecuencias observadas y\nesperadas del modelo Geométrico de minas extra por ciudad",
     xlab = "Frecuencia Observada (%)",
     ylab = "Frecuencia Esperada (%)",
     col  = "blue3",
     pch  = 19)

abline(a = 0, b = 1, col = "red", lwd = 2)

Correlacion_1 <- cor(Fo_pct, Fe_pct)*100
Correlacion_1
## [1] 99.54493
# Chi-cuadrado
grados_libertad_1 <- length(Fo_1) - 1 - 1   # 1 parametro estimado (p)
grados_libertad_1
## [1] 8
nivel_significancia <- 0.95

x2_1 <- sum((Fo_1 - Fe_1)^2 / Fe_1)
x2_1
## [1] 11.47024
umbral_aceptacion_1 <- qchisq(nivel_significancia, grados_libertad_1)
umbral_aceptacion_1
## [1] 15.50731
# Tabla resumen
Variable <- c("Número de minas extra por ciudad")

tabla_resumen_1 <- data.frame(
  Variable,
  round(Correlacion_1, 2),
  round(x2_1, 2),
  round(umbral_aceptacion_1, 2)
)

colnames(tabla_resumen_1) <- c("Variable", "Test Pearson (%)", "Chi Cuadrado", "Umbral de aceptación")

tabla_resumen_1 %>%
  gt() %>%
  tab_header(title = md("**Tabla N°2**"),
             subtitle = md("Resumen del test de bondad de ajuste (modelo Geométrico)")) %>%
  tab_source_note(source_note = md("Autor: Luis Cruz"))
Tabla N°2
Resumen del test de bondad de ajuste (modelo Geométrico)
Variable Test Pearson (%) Chi Cuadrado Umbral de aceptación
Número de minas extra por ciudad 99.54 11.47 15.51
Autor: Luis Cruz

Con Chi² = 11.47 por debajo del umbral de aceptación 15.51 (95% de confianza, gl = 8), el modelo Geométrico se acepta.

6 Cálculo de Probabilidades

¿Cuál es la probabilidad de que una ciudad tenga como máximo 2 minas extra?

Probabilidad_1 <- pgeom(2, p_1) * 100
Probabilidad_1
## [1] 82.63282
x <- 0:max(MINAS_EXTRA)
y <- dgeom(x, p_1)

plot(x, y,
     type = "h",
     lwd = 3,
     col = "skyblue3",
     main = "Gráfica N°4: Cálculo de probabilidades del modelo\nGeométrico de minas extra por ciudad ",
     ylab = "Probabilidad",
     xlab = "Número de minas extra")

x_section <- 0:2
y_section <- dgeom(x_section, p_1)

points(x_section, y_section, pch = 19, col = "red")
segments(x_section, 0, x_section, y_section, col = "red", lwd = 3)

legend("topright",
       legend = c("Modelo Geométrico", "Área de Probabilidad"),
       col = c("skyblue3", "red"),
       lwd = 3,
       cex = 0.7)

texto_prob <- paste0("Probabilidad = ", round(Probabilidad_1, 2), " %")
text(x = max(x) * 0.6, y = max(y) * 0.9,
     labels = texto_prob,
     col = "black",
     cex = 0.8,
     font = 2)

# De 300 ciudades futuras, cuantas tendrian a lo sumo 2 minas extra
cantidad_1 <- pgeom(2, p_1) * 300
cantidad_1
## [1] 247.8984

7 Intervalos de Confianza

x_media <- mean(MINAS_EXTRA)
x_media
## [1] 1.262064
sigma <- sd(MINAS_EXTRA)
sigma
## [1] 1.65719
n_ic <- length(MINAS_EXTRA)
n_ic
## [1] 1347
e <- (sigma/sqrt(n_ic)) * qt(0.975, n_ic - 1)
e
## [1] 0.0885783
li <- x_media - e
li
## [1] 1.173486
ls <- x_media + e
ls
## [1] 1.350642
tabla_media <- data.frame(
  round(li, 2),
  Variable,
  round(ls, 2),
  round(e, 4)
)

colnames(tabla_media) <- c("Límite inferior", "Media poblacional", "Límite superior", "Error estándar")

tabla_media %>%
  gt() %>%
  tab_header(title = md("**Tabla N°3**"),
             subtitle = md("Intervalo de confianza de la media poblacional (95%)")) %>%
  tab_source_note(source_note = md("Autor: Luis Cruz"))
Tabla N°3
Intervalo de confianza de la media poblacional (95%)
Límite inferior Media poblacional Límite superior Error estándar
1.17 Número de minas extra por ciudad 1.35 0.0886
Autor: Luis Cruz

8 Conclusiones

En conclusión: el número de minas extra por ciudad se ajusta a un modelo geométrico con un parámetro de probabilidad (p = 0.442) y un coeficiente de Pearson de 99.54%. Con un 95% de confianza, la media poblacional se encuentra entre 1.17 y 1.35, y existe una probabilidad del 82.63% de que una ciudad tenga a lo sumo 2 minas extra.