#Lugares (VenueCount): Corresponde al número de lugares o puntos registrados relacionados con cada observación del estudio de contaminación del agua. Es una variable cuantitativa discreta de conteo, ya que expresa la cantidad de sitios registrados y no admite valores fraccionarios.
library(gt)
library(dplyr)
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
df <- read.csv(
"waterPollution.csv",
header = TRUE,
sep = ",",
stringsAsFactors = FALSE
)
# ==========================================
# SELECCIÓN DE LA VARIABLE
# ==========================================
Venue <- round(df$VenueCount)
Venue <- na.omit(Venue)
# ==========================================
# TABLA DE FRECUENCIAS TRATADA
# ==========================================
tabla_freq_tratada <- as.data.frame(table(venue..))
tabla_freq_tratada <- tabla_freq_tratada %>%
arrange(as.numeric(as.character(venue..))) %>%
rename(
Venue = venue..,
ni = Freq
) %>%
mutate(
hi = round((ni / sum(ni)) * 100, 2),
Ni_asc = cumsum(ni),
Hi_asc = round(cumsum(hi), 2)
)
# Fila TOTAL
fila_total <- data.frame(
Venue = "TOTAL",
ni = sum(tabla_freq_tratada$ni),
hi = 100,
Ni_asc = sum(tabla_freq_tratada$ni),
Hi_asc = 100
)
tabla_final <- bind_rows(tabla_freq_tratada, fila_total)
tabla_final %>%
gt() %>%
tab_header(
title = md("**Tabla N°1**"),
subtitle = md("**Distribución de frecuencias Venue Count en el estudio
de la calidad de agua en Europa(1991-2017)**")
) %>%
cols_label(
Venue = "Venue Count",
ni = "ni",
hi = "hi (%)",
Ni_asc = "Ni",
Hi_asc = "Hi (%)"
) %>%
tab_style(
style = cell_text(weight = "bold"),
locations = cells_body(rows = Venue == "TOTAL")
) %>%
opt_row_striping()
| Tabla N°1 | ||||
| Distribución de frecuencias Venue Count en el estudio de la calidad de agua en Europa(1991-2017) | ||||
| Venue Count | ni | hi (%) | Ni | Hi (%) |
|---|---|---|---|---|
| 3 | 77 | 23.91 | 77 | 23.91 |
| 4 | 114 | 35.40 | 191 | 59.31 |
| 5 | 65 | 20.19 | 256 | 79.50 |
| 6 | 38 | 11.80 | 294 | 91.30 |
| 7 | 17 | 5.28 | 311 | 96.58 |
| 8 | 5 | 1.55 | 316 | 98.13 |
| 9 | 6 | 1.86 | 322 | 99.99 |
| TOTAL | 322 | 100.00 | 322 | 100.00 |
# ==========================================
# GRÁFICA DE LA DISTRIBUCIÓN TRATADA
# ==========================================
barplot(
tabla_freq_tratada$hi,
names.arg = tabla_freq_tratada$Venue,
main = "Gráfica N°1: Distribución porcentual de Venue Count en el
estudio de la calidad de agua en Europa (1991-2017) para el modelo de
Poisson",
xlab = "Venue Count",
ylab = "Frecuencia relativa (%)",
col = "lightgreen",
border = "black",
ylim = c(0, max(tabla_freq_tratada$hi) * 1.10),
las = 1
)
grid(
nx = NA,
ny = NULL,
lty = 2,
col = "gray80"
)
box()
Se conjetura que la variable Venue Count presenta un comportamiento compatible con una distribución de Poisson, debido a que corresponde a una variable discreta de conteo. Para este análisis se consideran únicamente los conteos comprendidos entre 3 y 9, observándose una disminución progresiva de las frecuencias conforme aumenta el número de lugares registrados.
# ==========================================
# PARÁMETRO λ
# ==========================================
# Valores de Venue Count
x_mapped <- as.numeric(
as.character(tabla_freq_tratada$Venue)
)
# Probabilidades observadas
p_s_data <- tabla_freq_tratada$ni / sum(tabla_freq_tratada$ni)
# Esperanza matemática (λ)
lambda <- sum(
x_mapped * p_s_data
)
cat(
"Lambda =",
round(lambda, 4),
"\n"
)
## Lambda = 4.5124
# ==========================================
# PROBABILIDADES TEÓRICAS
# ==========================================
# Valores tratados
x_mapped <- as.numeric(as.character(tabla_freq_tratada$Venue))
# Probabilidades observadas
p_s_data <- tabla_freq_tratada$ni / sum(tabla_freq_tratada$ni)
# Parámetro lambda
lambda <- sum(x_mapped * p_s_data)
# Probabilidades teóricas de Poisson
prob_poisson <- dpois(
x = x_mapped,
lambda = lambda
)
# Convertir a porcentaje
hi_poisson <- prob_poisson * 100
# Mostrar probabilidades
comparacion_poisson <- data.frame(
Venue = tabla_freq_tratada$Venue,
Realidad = round(tabla_freq_tratada$hi, 2),
Poisson = round(hi_poisson, 2)
)
comparacion_poisson
## Venue Realidad Poisson
## 1 3 23.91 16.80
## 2 4 35.40 18.95
## 3 5 20.19 17.11
## 4 6 11.80 12.86
## 5 7 5.28 8.29
## 6 8 1.55 4.68
## 7 9 1.86 2.35
# ==========================================
# COMPARACIÓN
# ==========================================
datos_poisson <- rbind(
Realidad = tabla_freq_tratada$hi,
`Modelo Poisson` = hi_poisson
)
# ==========================================
# GRÁFICA
# ==========================================
par(mar = c(6.5,4.5,4.5,2))
barplot(
datos_poisson,
beside = TRUE,
names.arg = tabla_freq_tratada$Venue,
col = c("steelblue","firebrick"),
main = "Gráfica N°3: Comparación de la realidad con el modelo de
Poisson Venue Count",
xlab = "Venue Count",
ylab = "Porcentaje",
ylim = c(0, max(datos_poisson) * 1.25),
las = 1,
cex.names = 0.9
)
abline(
h = pretty(c(0, max(datos_poisson))),
col = "gray80",
lty = 2
)
legend(
"topright",
legend = c("Realidad", "Modelo Poisson"),
fill = c("steelblue", "firebrick"),
bty = "n"
)
box()
# ==========================================
# TEST DE PEARSON
# ==========================================
# Probabilidades teóricas
P_teorica <- hi_poisson / 100
# Frecuencias observadas
fo_pearson <- tabla_freq_tratada$ni
# Total de observaciones
N <- sum(fo_pearson)
# Frecuencias esperadas
fe_pearson <- N * P_teorica
# Coeficiente de Pearson
Coef_Pearson <- cor(
fo_pearson,
fe_pearson
) * 100
cat(
"Coeficiente de Pearson (%):",
round(Coef_Pearson,2),
"\n"
)
## Coeficiente de Pearson (%): 93.21
# ==========================================
# TEST CHI-CUADRADO
# ==========================================
# Total de observaciones
N_chi <- sum(tabla_freq_tratada$ni)
# Frecuencias relativas observadas
fo <- tabla_freq_tratada$ni / N_chi
# Número de categorías
k <- length(fo)
# Probabilidades teóricas
fe <- dpois(
x_mapped,
lambda
)
# Estadístico Chi-cuadrado
Chi_Calculado <- sum(
(fo - fe)^2 / fe
)
# Grados de libertad
gl <- k - 1
# Valor crítico
Chi_Critico <- qchisq(
0.95,
df = gl
)
cat(
"Chi Calculado:",
round(Chi_Calculado,4),
"\n"
)
## Chi Calculado: 0.2121
cat(
"Chi Crítico:",
round(Chi_Critico,4),
"\n"
)
## Chi Crítico: 12.5916
if(Chi_Calculado < Chi_Critico){
cat(
"\nNo se rechaza H0: El modelo de Poisson es adecuado.\n"
)
}else{
cat(
"\nSe rechaza H0: El modelo de Poisson no es adecuado.\n"
)
}
##
## No se rechaza H0: El modelo de Poisson es adecuado.
# ========================================================================
# 10. CÁLCULO DE PROBABILIDADES
# ========================================================================
# --------------------------------------
# PREGUNTA DE PORCENTAJE
# ¿Cuál es la probabilidad de que Venue Count
# sea menor o igual a 5?
# --------------------------------------
prob_5 <- ppois(
q = 5,
lambda = lambda
)
prob_5_porcentaje <- prob_5 * 100
cat(
"Probabilidad de que Venue Count sea menor o igual a 5:",
round(prob_5_porcentaje, 2),
"%\n"
)
## Probabilidad de que Venue Count sea menor o igual a 5: 70.08 %
# --------------------------------------
# PREGUNTA DE CANTIDAD
# ¿Cuántas observaciones se espera que tengan
# Venue Count menor o igual a 5?
# --------------------------------------
cantidad_esperada <- prob_5 * length(venue..)
cat(
"Cantidad esperada de observaciones:",
round(cantidad_esperada),
"observaciones\n"
)
## Cantidad esperada de observaciones: 226 observaciones
# --------------------------------------
# PREGUNTA DE INTERVALO
# ¿Cuál es la probabilidad de que Venue Count
# se encuentre entre 4 y 6?
# --------------------------------------
prob_4_6 <- (
ppois(6, lambda = lambda) -
ppois(3, lambda = lambda)
) * 100
cat(
"Probabilidad entre 4 y 6:",
round(prob_4_6, 2),
"%\n"
)
## Probabilidad entre 4 y 6: 48.93 %
# ========================================================================
# DEMOSTRACIÓN GRÁFICA
# ========================================================================
# Valores posibles
x <- 3:9
# Probabilidades del modelo de Poisson
y <- dpois(
x,
lambda = lambda
) * 100
# Colores de las barras
colores <- rep("orange", length(x))
# Verde para P(X ≤ 5)
colores[x <= 5] <- "darkgreen"
# Azul para P(4 ≤ X ≤ 6)
colores[x >= 4 & x <= 6] <- "blue"
# Gráfico
barplot(
height = y,
names.arg = x,
col = colores,
border = "black",
ylim = c(0, max(y) * 1.25),
main = "Gráfica N°4: Cálculo de Probabilidades\nModelo de Poisson",
xlab = "Venue Count",
ylab = "Probabilidad (%)"
)
grid(
nx = NA,
ny = NULL,
lty = 2,
col = "gray80"
)
legend(
"topright",
legend = c(
"Modelo de Poisson",
"P(Venue ≤ 5)",
"P(4 ≤ Venue ≤ 6)"
),
fill = c(
"orange",
"darkgreen",
"blue"
),
bty = "o",
bg = "white"
)
box()
# ==============================================================================
# 11. INTERVALO DE CONFIANZA
# ==============================================================================
# Variable tratada
Venue_num <- venue..
# Media
media_venue <- mean(Venue_num)
# Desviación estándar
desviacion_venue <- sd(Venue_num)
# Tamaño de muestra
n_venue <- length(Venue_num)
# Nivel de confianza del 95%
error_venue <- 1.96 * (
desviacion_venue /
sqrt(n_venue)
)
# Límites del intervalo
limite_inferior <- round(
media_venue - error_venue,
2
)
limite_superior <- round(
media_venue + error_venue,
2
)
# Crear tabla
tabla_intervalo <- data.frame(
Intervalo = paste0(
"P [",
limite_inferior,
" < μ < ",
limite_superior,
"] = 95%"
)
)
# Mostrar tabla
tabla_intervalo %>%
gt() %>%
tab_header(
title = md("**Tabla N°3**"),
subtitle = md(
"**Intervalo de confianza para Venue Count**"
)
) %>%
opt_row_striping()
| Tabla N°3 |
| Intervalo de confianza para Venue Count |
| Intervalo |
|---|
| P [4.36 < μ < 4.66] = 95% |
Nota: El intervalo de confianza estima la media poblacional (μ), no los valores individuales de la variable. Aunque Venue Count es una variable discreta, su media puede tomar valores decimales. Con un 95 % de confianza, se estima que la media poblacional se encuentra entre 4.36 y 4.66.
La variable Venue Count presentó un comportamiento compatible con una distribución de Poisson, con un parámetro estimado de λ = 3.2057. Además, el coeficiente de Pearson (84.93 %) y la prueba de Chi-cuadrado confirmaron que el modelo es adecuado. Finalmente, con un 95 % de confianza, se estimó que la media poblacional se encuentra entre 3.05 y 3.36.