#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)
# 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)]
# 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 | |||
# 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()
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()
# 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"
)
| Variable | Test Pearson (%) | Chi Cuadrado | Umbral de aceptación |
|---|---|---|---|
| CANTIDAD_ANOMALIAS_GEOQUIMICAS | 100 | 0.0021 | 9.4877 |
# 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
)
# 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 |
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.