ANÁLISIS INFERENCIAL

CARGA DE DATOS Y LIBRERÍAS

CARGA DE LIBRERÍAS

library(readxl)
library(gt)
library(dplyr)
library(knitr)

CARGA DE DATOS

datos <- read_excel(
  "C:/Users/klaus/Downloads/ELEMENTOS_NO_DETECTADOS_modelo_geometrico_2500_v2.xlsx",
  sheet = "Datos_GEOMETRICO"
)

SELECCIÓN DE LA VARIABLE

# Normalizar nombres de columnas

names(datos) <- toupper(gsub("[^A-Za-z0-9]+", "_", names(datos)))

# Selección de la variable CANTIDAD_ELEMENTOS_NO_DETECTADOS

col_variable <- names(datos)[grepl("ELEMENTOS", names(datos)) & 
                               grepl("DETECT", names(datos))][1]

CANTIDAD_ELEMENTOS_NO_DETECTADOS <- datos[[col_variable]]

CANTIDAD_ELEMENTOS_NO_DETECTADOS <- as.numeric(CANTIDAD_ELEMENTOS_NO_DETECTADOS)

CANTIDAD_ELEMENTOS_NO_DETECTADOS <- CANTIDAD_ELEMENTOS_NO_DETECTADOS[
  !is.na(CANTIDAD_ELEMENTOS_NO_DETECTADOS)
]

TABLA DE DISTRIBUCIÓN DE FRECUENCIA

# Definición de categorías para el modelo geométrico

Categoria <- c("0", "1", "2", "3", "4", "5")

# Si existen valores mayores a 5, se eliminan para trabajar solo hasta 5

CANTIDAD_ELEMENTOS_NO_DETECTADOS <- CANTIDAD_ELEMENTOS_NO_DETECTADOS[
  CANTIDAD_ELEMENTOS_NO_DETECTADOS >= 0 &
  CANTIDAD_ELEMENTOS_NO_DETECTADOS <= 5
]

# Conteo de frecuencia absoluta

ni <- c(
  sum(CANTIDAD_ELEMENTOS_NO_DETECTADOS == 0),
  sum(CANTIDAD_ELEMENTOS_NO_DETECTADOS == 1),
  sum(CANTIDAD_ELEMENTOS_NO_DETECTADOS == 2),
  sum(CANTIDAD_ELEMENTOS_NO_DETECTADOS == 3),
  sum(CANTIDAD_ELEMENTOS_NO_DETECTADOS == 4),
  sum(CANTIDAD_ELEMENTOS_NO_DETECTADOS == 5)
)

N <- sum(ni)

hi <- (ni / N) * 100

p_s <- ni / N

TDF_elementos <- data.frame(
  Categoria = Categoria,
  ni = ni,
  hi = round(hi, 2),
  p_s = round(p_s, 4)
)

colnames(TDF_elementos) <- c("Categoría", "ni", "hi(%)", "p(s)")

# Fila de totales

totales <- data.frame(
  Categoría = "Totales",
  ni = sum(ni),
  `hi(%)` = 100,
  `p(s)` = 1,
  check.names = FALSE
)

# Unir tabla con totales

TDF_elementos_final <- rbind(TDF_elementos, totales)

# Aplicación del diseño con gt

TDF_elementos_final %>%
  gt() %>%
  fmt_number(
    columns = c("hi(%)", "p(s)"),
    decimals = 2
  ) %>%
  tab_header(
    title = md("*Tabla Nro. 1*"),
    subtitle = md("**Distribución de frecuencia de la cantidad de elementos no detectados en muestras geoquímicas de depósitos minerales en Estados Unidos**")
  ) %>%
  tab_source_note(
    source_note = md("Autor: Grupo 2")
  ) %>%
  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),
    heading.border.bottom.color = "black",
    heading.border.bottom.width = px(2),
    
    row.striping.include_table_body = TRUE,
    table_body.hlines.color = "gray",
    table_body.border.bottom.color = "black",
    
    table.border.left.color = "black",
    table.border.left.style = "solid",
    table.border.left.width = px(1),
    table.border.right.color = "black",
    table.border.right.style = "solid",
    table.border.right.width = px(1),
    
    column_labels.vlines.color = "black",
    column_labels.vlines.style = "solid",
    column_labels.vlines.width = px(1),
    table_body.vlines.color = "black",
    table_body.vlines.style = "solid",
    table_body.vlines.width = px(1)
  )
Tabla Nro. 1
Distribución de frecuencia de la cantidad de elementos no detectados en muestras geoquímicas de depósitos minerales en Estados Unidos
Categoría ni hi(%) p(s)
0 1163 47.61 0.48
1 651 26.65 0.27
2 338 13.84 0.14
3 161 6.59 0.07
4 82 3.36 0.03
5 48 1.96 0.02
Totales 2443 100.00 1.00
Autor: Grupo 2

GRÁFICA DE DISTRIBUCIÓN DE FRECUENCIA

# Ajuste de márgenes

par(mar = c(5.1, 5.1, 4.1, 2.1))

porcentajes_plot <- hi

nombres_plot <- Categoria

barras <- barplot(
  height = porcentajes_plot,
  names.arg = nombres_plot,
  space = 0.4,
  col = "gray",
  border = "black",
  main = "Gráfica N°1: Distribución porcentual de la cantidad 
  de elementos no detectados en muestras geoquímicas 
  de depósitos minerales en Estados Unidos",
  xlab = "Cantidad de elementos no detectados",
  ylab = "Porcentaje (%)",
  las = 1,
  ylim = c(0, max(porcentajes_plot) * 1.15),
  cex.names = 0.85
)

abline(
  h = pretty(c(0, max(porcentajes_plot))),
  col = "gray70",
  lty = 2,
  lwd = 0.8
)

barplot(
  height = porcentajes_plot,
  space = 0.4,
  col = "gray",
  border = "black",
  add = TRUE,
  axes = FALSE,
  names.arg = rep("", length(nombres_plot))
)

box()

CONJETURA DEL MODELO

Se conjetura que la variable CANTIDAD_ELEMENTOS_NO_DETECTADOS, tratada como una variable cuantitativa discreta, se ajusta a un modelo de probabilidad geométrica. Esto se justifica porque representa el número de elementos geoquímicos que no fueron detectados en cada muestra mineral.

Se espera que la mayor cantidad de registros se concentre en valores bajos, como 0, 1 o 2 elementos no detectados, mientras que las cantidades más altas presenten menor frecuencia.

Visualmente, este comportamiento se relaciona con una distribución decreciente, característica del modelo geométrico.

PARÁMETROS

# CÁLCULO DEL PARÁMETRO DEL MODELO GEOMÉTRICO

# Se mapean las categorías exactas de 0 a 5

x_mapped <- 0:5

# Probabilidad real en decimales

p_s_data <- hi / 100

# Media esperada de las categorías

media_x <- sum(x_mapped * p_s_data)

# Parámetro del modelo geométrico

prob_geom <- 1 / (1 + media_x)

cat("Media =", round(media_x, 4), "\n")
## Media = 0.9734
cat("Parámetro del modelo geométrico (p) =", round(prob_geom, 4), "\n")
## Parámetro del modelo geométrico (p) = 0.5067

COMPARACIÓN DE LA REALIDAD VS MODELO GEOMÉTRICO

# SOBREPOSICIÓN DE LA REALIDAD CON EL MODELO GEOMÉTRICO

# Probabilidades teóricas para las categorías exactas 0, 1, 2, 3, 4 y 5

P_teorica <- dgeom(0:5, prob = prob_geom)

# Como se trabaja solo hasta 5, se normalizan las probabilidades
# para que sumen 1 dentro de las categorías analizadas.

P_teorica <- P_teorica / sum(P_teorica)

hi_modelo <- P_teorica * 100

datos_comparacion <- rbind(
  Realidad = hi,
  Modelo = hi_modelo
)

par(mar = c(6.1, 4.1, 4.1, 2.1))

grafica_comp <- barplot(
  datos_comparacion,
  beside = TRUE,
  names.arg = Categoria,
  col = c("skyblue", "blue"),
  main = "Gráfica N°2: Comparación de la realidad con el modelo geométrico
de elementos no detectados en muestras geoquímicas",
  xlab = "Cantidad de elementos no detectados",
  ylab = "Probabilidad (%)",
  ylim = c(0, max(datos_comparacion) * 1.35),
  las = 1,
  cex.names = 0.85
)

abline(
  h = pretty(c(0, max(datos_comparacion))),
  col = "gray80",
  lty = 2
)

barplot(
  datos_comparacion,
  beside = TRUE,
  col = c("skyblue", "blue"),
  add = TRUE,
  axes = FALSE,
  names.arg = rep("", length(Categoria))
)

legend(
  "top",
  legend = c("Realidad", "Modelo geométrico"),
  fill = c("skyblue", "blue"),
  horiz = TRUE,
  bty = "n",
  inset = c(0, 0),
  cex = 0.9
)

box()

TEST DE APROBACIÓN

TEST DE PEARSON

# TEST DE PEARSON

fo_pearson <- ni

fe_pearson <- N * P_teorica

Coef_Pearson <- cor(fo_pearson, fe_pearson) * 100

cat("Coeficiente de Pearson (%):", round(Coef_Pearson, 2), "\n")
## Coeficiente de Pearson (%): 99.77

TEST DE CHI-CUADRADO

# TEST DE CHI-CUADRADO

N_chi <- sum(ni)

fo <- ni / N_chi

fe <- P_teorica

k <- length(fo)

Chi_Calculado <- sum((fo - fe)^2 / fe)

gl <- k - 1

Chi_Critico <- qchisq(0.95, df = gl)

cat("\nChi Calculado:", round(Chi_Calculado, 4), "\n")
## 
## Chi Calculado: 0.0069
cat("Chi Crítico:", round(Chi_Critico, 4), "\n")
## Chi Crítico: 11.0705
if (Chi_Calculado < Chi_Critico) {
  print("Evalúa H0: El modelo geométrico es adecuado.")
} else {
  print("Se rechaza H0: El modelo geométrico no es adecuado.")
}
## [1] "Evalúa H0: El modelo geométrico es adecuado."

TABLA RESUMEN

Variable <- c("CANTIDAD_ELEMENTOS_NO_DETECTADOS")

tabla_resumen <- data.frame(
  Variable,
  round(Coef_Pearson, 2),
  round(Chi_Calculado, 4),
  round(Chi_Critico, 4)
)

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

kable(
  tabla_resumen,
  format = "markdown",
  caption = "Tabla Nro. 2: Resumen de test de bondad al modelo geométrico"
)
Tabla Nro. 2: Resumen de test de bondad al modelo geométrico
Variable Test Pearson (%) Chi Cuadrado Umbral de aceptación
CANTIDAD_ELEMENTOS_NO_DETECTADOS 99.77 0.0069 11.0705

ESTIMACIONES

# Probabilidad de que una muestra presente
# 3 o más elementos no detectados

prob_3_mas <- 1 - pgeom(2, prob = prob_geom)

prob_3_mas_porcentaje <- prob_3_mas * 100

prob_3_mas_porcentaje
## [1] 12.00119
# Gráfico de texto explicativo

plot(1, type = "n", axes = FALSE, xlab = "", ylab = "")

text(
  x = 1, y = 1,
  labels = paste(
    "Cálculo de probabilidad\n",
    "¿Cuál es la probabilidad de que una muestra\n",
    "presente 3 o más elementos no detectados?\n",
    "Probabilidad = ", round(prob_3_mas_porcentaje, 2), " (%)",
    sep = ""
  ),
  cex = 1.3,
  col = "black",
  font = 2
)

INTERVALO DE CONFIANZA

# Media de elementos no detectados

media_elementos <- mean(CANTIDAD_ELEMENTOS_NO_DETECTADOS)

# Desviación estándar

desviacion_elementos <- sd(CANTIDAD_ELEMENTOS_NO_DETECTADOS)

# Número de observaciones

n_elementos <- length(CANTIDAD_ELEMENTOS_NO_DETECTADOS)

# Nivel de confianza del 95%

error_elementos <- 1.96 * (desviacion_elementos / sqrt(n_elementos))

# Límites del intervalo de confianza

limite_inferior_elementos <- round(media_elementos - error_elementos, 2)

limite_superior_elementos <- round(media_elementos + error_elementos, 2)

# Tabla del intervalo

tabla_intervalo_elementos <- data.frame(
  Intervalo = paste0(
    "P [",
    limite_inferior_elementos,
    " < µ < ",
    limite_superior_elementos,
    "] = 95%"
  )
)

tabla_intervalo_elementos %>%
  gt() %>%
  tab_header(
    title = md("*Tabla Nro. 3*"),
    subtitle = md("**Intervalo de confianza de la cantidad media de elementos no detectados en muestras geoquímicas**")
  ) %>%
  tab_source_note(
    source_note = md("Autor: Grupo 2")
  ) %>%
  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",
    table.border.left.color = "black",
    table.border.left.style = "solid",
    table.border.left.width = px(1),
    table.border.right.color = "black",
    table.border.right.style = "solid",
    table.border.right.width = px(1)
  )
Tabla Nro. 3
Intervalo de confianza de la cantidad media de elementos no detectados en muestras geoquímicas
Intervalo
P [0.92 < µ < 1.02] = 95%
Autor: Grupo 2

CONCLUSIÓN

La variable CANTIDAD_ELEMENTOS_NO_DETECTADOS se ajusta a un modelo geométrico, debido a que representa una variable cuantitativa discreta asociada al número de elementos geoquímicos no detectados por muestra. El parámetro de probabilidad obtenido fue p = 0.50, con un coeficiente de Pearson de 99.77%. Con un 95% de confianza, la media poblacional se encuentra entre 0.92 y 1.02 elementos no detectados. Además, existe una probabilidad del 12% de registrar una muestra con 3 o más elementos no detectados.