ANÁLISIS INFERENCIAL

CARGA DE DATOS Y LIBRERÍAS

#Limpiar entorno
rm(list = ls())

#Cargar librerías
if (!require("readr")) install.packages("readr")
if (!require("dplyr")) install.packages("dplyr")
if (!require("knitr")) install.packages("knitr")
if (!require("moments")) install.packages("moments")

library(readr)
library(dplyr)
library(knitr)
library(moments)
library(gt)

#Cargar datos
ruta <- "D:/geoquimica datos.csv"
datos <- read_csv(ruta)

SELECCIÓN DE VARIABLE

# Normalizar nombres de columnas
names(datos) <- toupper(gsub("[^A-Za-z0-9]+", "_", names(datos)))

# Selección de la variable CANTIDAD_ANOMALIAS_GEOQUIMICAS
col_variable <- names(datos)[grepl("ANOMALIA", names(datos)) | 
                               grepl("GEOQUIMIC", names(datos))][1]

ANOMALIAS <- datos[[col_variable]]
ANOMALIAS <- as.numeric(ANOMALIAS)
ANOMALIAS <- ANOMALIAS[!is.na(ANOMALIAS)]

TABLA DE DISTRIBUCIÓN DE FRECUENCIA

# Definición de categorías para el modelo
Intervalo <- c("0", "1", "2", "3", "4", "5 o más")

# Conteo de frecuencia absoluta
ni <- c(
  sum(ANOMALIAS == 0),
  sum(ANOMALIAS == 1),
  sum(ANOMALIAS == 2),
  sum(ANOMALIAS == 3),
  sum(ANOMALIAS == 4),
  sum(ANOMALIAS >= 5)
)

N <- sum(ni)

# Frecuencia relativa porcentual y probabilidad
hi <- (ni / N) * 100
p_s <- ni / N

# Tabla de frecuencia
TDF_anomalias <- data.frame(
  Intervalo = Intervalo,
  ni = ni,
  hi = round(hi, 2),
  p_s = round(p_s, 4)
)

colnames(TDF_anomalias) <- c("Intervalo", "ni", "hi(%)", "p(s)")

# Fila de totales
totales <- data.frame(
  Intervalo = "Totales",
  ni = sum(ni),
  hi = 100,
  p_s = 1
)

colnames(totales) <- c("Intervalo", "ni", "hi(%)", "p(s)")

TDF_anomalias_final <- rbind(TDF_anomalias, totales)

# Aplicación del diseño
TDF_anomalias_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 anomalías geoquímicas en muestras minerales**")
  ) %>%
  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 anomalías geoquímicas en muestras minerales
Intervalo ni hi(%) p(s)
0 0 0.00 0.00
1 1 0.04 0.00
2 0 0.00 0.00
3 3 0.12 0.00
4 12 0.48 0.00
5 o más 2484 99.36 0.99
Totales 2500 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 <- Intervalo

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\nde anomalías geoquímicas en muestras minerales",
  xlab = "Cantidad de anomalías geoquímicas",
  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 ANOMALIAS, tratada como una variable cuantitativa discreta de conteo, se ajusta a un modelo de probabilidad de Poisson. Esto se justifica porque representa el número de anomalías geoquímicas identificadas por cada muestra.Se evalúa la tasa media de ocurrencia a partir de las frecuencias muestrales para modelar la probabilidad esperada en cada intervalo de anomalías.

# CÁLCULO DEL PARÁMETRO DEL MODELO POISSON

# Estimador de lambda (Media de la variable)
lambda_pois <- mean(ANOMALIAS)

cat("Parámetro del modelo Poisson (lambda) =", round(lambda_pois, 4), "\n")
## Parámetro del modelo Poisson (lambda) = 11.98
# SOBREPOSICIÓN DE LA REALIDAD CON EL MODELO POISSON

# Probabilidades teóricas para las categorías 0, 1, 2, 3 y 4
esperada_pois <- dpois(0:4, lambda = lambda_pois)

# Probabilidad acumulada de la cola: 5 o más
esperada_cola <- 1 - ppois(4, lambda = lambda_pois)

# Modelo Poisson en porcentaje
hi_modelo <- c(esperada_pois, esperada_cola) * 100

# Matriz de comparación realidad vs modelo
datos_comparacion <- rbind(
  Realidad = hi,
  Modelo = hi_modelo
)

# Configuración de márgenes
par(mar = c(6.1, 4.1, 4.1, 2.1))

grafica_comp <- barplot(
  datos_comparacion,
  beside = TRUE,
  names.arg = Intervalo,
  col = c("skyblue", "blue"),
  main = "Gráfica N°2: Comparación de la realidad con el modelo Poisson\nde anomalías geoquímicas en muestras minerales",
  xlab = "Cantidad de anomalías geoquímicas",
  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(Intervalo))
)

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

box()

TEST DE APROBACIÓN

# Probabilidades teóricas calculadas en el modelo Poisson
P_teorica <- c(esperada_pois, esperada_cola)

# Frecuencias observadas y esperadas
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 (%): 100
# Total de datos
N_chi <- sum(ni)

# Frecuencia relativa observada
fo <- ni / N_chi

# Número de categorías
k <- length(fo)

# Probabilidades teóricas esperadas
fe <- P_teorica

# Chi-cuadrado calculated
Chi_Calculado <- sum((fo - fe)^2 / fe)

# Grados de libertad (k - 1 - número de parámetros estimados = k - 2)
gl <- k - 2

# Valor crítico al 95%
Chi_Critico <- qchisq(0.95, df = gl)

cat("\nChi Calculado:", round(Chi_Calculado, 4), "\n")
## 
## Chi Calculado: 0.0021
cat("Chi Crítico:", round(Chi_Critico, 4), "\n")
## Chi Crítico: 9.4877
if (Chi_Calculado < Chi_Critico) {
  print("Evalúa H0: El modelo Poisson es adecuado.")
} else {
  print("Se rechaza H0: El modelo Poisson no es adecuado.")
}
## [1] "Evalúa H0: El modelo Poisson es adecuado."
Variable <- c("CANTIDAD_ANOMALIAS_GEOQUIMICAS")

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 Poisson"
)
Tabla Nro. 2: Resumen de test de bondad al modelo Poisson
Variable Test Pearson (%) Chi Cuadrado Umbral de aceptación
CANTIDAD_ANOMALIAS_GEOQUIMICAS 100 0.0021 9.4877

ESTIMACIONES

# Probabilidad de que una muestra presente entre 10 y 15 anomalías geoquímicas
prob_10_15 <- (ppois(15, lambda = lambda_pois) - ppois(9, lambda = lambda_pois))
prob_10_15_porcentaje <- prob_10_15 * 100

prob_10_15_porcentaje
## [1] 60.1716
# 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 entre 10 y 15 anomalías geoquímicas?\n",
    "Probabilidad = ", round(prob_10_15_porcentaje, 2), " (%)",
    sep = ""
  ),
  cex = 1.3,
  col = "black",
  font = 2
)

INTERVALOS DE CONFIANZA

# Media de anomalías (lambda)
media_anomalias <- mean(ANOMALIAS)

# Número de observaciones
n_anomalias <- length(ANOMALIAS)

# Error estándar para distribución Poisson (sqrt(lambda / n))
error_anomalias <- 1.96 * sqrt(media_anomalias / n_anomalias)

# Límites del intervalo de confianza para lambda
limite_inferior_anomalias <- round(media_anomalias - error_anomalias, 2)
limite_superior_anomalias <- round(media_anomalias + error_anomalias, 2)

# Tabla del intervalo
tabla_intervalo_anomalias <- data.frame(
  Intervalo = paste0(
    "P [",
    limite_inferior_anomalias,
    " < λ < ",
    limite_superior_anomalias,
    "] = 95%"
  )
)

tabla_intervalo_anomalias %>%
  gt() %>%
  tab_header(
    title = md("*Tabla Nro. 3*"),
    subtitle = md("**Intervalo de confianza del parámetro media (λ) de la cantidad de anomalías 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 del parámetro media (λ) de la cantidad de anomalías geoquímicas
Intervalo
P [11.84 < λ < 12.12] = 95%
Autor: Grupo 2

CONCLUSIÓN

La variable CANTIDAD_ANOMALIAS_GEOQUIMICAS se ajusta a un modelo Poisson, debido a que representa una variable cuantitativa discreta asociada al conteo de eventos independientes por muestra.

El parámetro de tasa media obtenido fue λ = 11.98. El coeficiente de correlación de Pearson alcanzó un 100%, evidenciando una alta concordancia entre las frecuencias observadas y las esperadas por el modelo.

Además, se calculó que la probabilidad de registrar entre 10 y 15 anomalías geoquímicas es de 60.17%. Finalmente, con un 95% de confianza, el parámetro λ poblacional se encuentra entre 11.84 y 12.12 anomalías geoquímicas por muestra.