# -------------------------
# Cargar librerías
# -------------------------
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
# -------------------------
# Cargar datos
# -------------------------
datos <- read.csv("waterPollution.csv",
sep = ",",
stringsAsFactors = FALSE)
# ================================
# VARIABLE CUANTITATIVA CONTINUA
# ================================
CYP <- na.omit(datos$composition_yard_garden_green_waste_percent)
# ===================================
# TABLA NB:2 ESTADÍSTICA DESCRIPTIVA
# ===================================
histoP <- hist(
CYP,
breaks = 10,
plot = FALSE
)
# Extraer límites continuos directos del histograma
Limites <- histoP$breaks
LimInf <- Limites[1:(length(Limites) - 1)]
LimSup <- Limites[2:length(Limites)]
Mc <- histoP$mids
ni <- histoP$counts
hi <- round((ni / sum(ni)) * 100, 2)
# Crear el DataFrame base continuo
TDF_Histo_CYP <- data.frame(
LimInf,
LimSup,
Mc,
ni,
hi
)
# Recalcular frecuencias acumuladas
TDF_Histo_CYP$Ni_asc <- cumsum(TDF_Histo_CYP$ni)
TDF_Histo_CYP$Ni_dsc <- rev(cumsum(rev(TDF_Histo_CYP$ni)))
TDF_Histo_CYP$Hi_asc <- round(cumsum(TDF_Histo_CYP$hi), 2)
TDF_Histo_CYP$Hi_dsc <- round(rev(cumsum(rev(TDF_Histo_CYP$hi))), 2)
# Crear fila de totales
TDF_Histo_CYP_Completo <- rbind(
TDF_Histo_CYP,
data.frame(
LimInf = "Total",
LimSup = " ",
Mc = " ",
ni = sum(TDF_Histo_CYP$ni),
hi = 100,
Ni_asc = " ",
Ni_dsc = " ",
Hi_asc = " ",
Hi_dsc = " "
)
)
# Generar Tabla Simplificada con 'gt'
tabla_Histo_CYP <- TDF_Histo_CYP_Completo %>%
gt() %>%
tab_header(
title = md("*Tabla Nº1*"),
subtitle = md("**Distribución de frecuencias simplificada del porcentaje de residuos
verdes en el estudio de la calidad de agua en Europa (1991-2017)**")
) %>%
tab_source_note(
source_note = md("Autor: Grupo 3")
) %>%
tab_options(
table.border.top.color = "black",
table.border.bottom.color = "black",
column_labels.border.bottom.color = "black",
row.striping.include_table_body = TRUE
)
tabla_Histo_CYP
| Tabla Nº1 | ||||||||
| Distribución de frecuencias simplificada del porcentaje de residuos verdes en el estudio de la calidad de agua en Europa (1991-2017) | ||||||||
| LimInf | LimSup | Mc | ni | hi | Ni_asc | Ni_dsc | Hi_asc | Hi_dsc |
|---|---|---|---|---|---|---|---|---|
| 0 | 5 | 2.5 | 18838 | 94.70 | 18838 | 19893 | 94.7 | 100 |
| 5 | 10 | 7.5 | 324 | 1.63 | 19162 | 1055 | 96.33 | 5.3 |
| 10 | 15 | 12.5 | 156 | 0.78 | 19318 | 731 | 97.11 | 3.67 |
| 15 | 20 | 17.5 | 493 | 2.48 | 19811 | 575 | 99.59 | 2.89 |
| 20 | 25 | 22.5 | 0 | 0.00 | 19811 | 82 | 99.59 | 0.41 |
| 25 | 30 | 27.5 | 0 | 0.00 | 19811 | 82 | 99.59 | 0.41 |
| 30 | 35 | 32.5 | 82 | 0.41 | 19893 | 82 | 100 | 0.41 |
| Total | 19893 | 100.00 | ||||||
| Autor: Grupo 3 | ||||||||
# ===========================================
# GRÁFICA Nº4: Distribución porcentual (hi)
# ===========================================
# 1. Definir los límites exactos de tu tabla
cortes <- c(0, 5, 10, 15, 20, 25, 30, 35)
# 2. Crear la estructura del histograma sin dibujarlo para obtener los datos
histo_objetivo <- hist(CYP, breaks = cortes, plot = FALSE)
barplot(
histo_objetivo$counts / sum(histo_objetivo$counts) * 100,
space = 0,
col = "lightblue",
main = "Gráfica Nº1: Distribución porcentual de porcentajes de residuos
verdes en el estudio de la caldad de gua en Europa (1991-2017)",
xlab = "Porcentaje de residuos verdes (%)",
ylab = "Porcentaje (%)",
xaxt = "n",
las = 1
)
# 4. Personalizar el eje X para que muestre los límites (5, 10, 15...)
axis(1, at = 0:7, labels = cortes)
# 5. Línea base
abline(h = 0)
Se conjetura que el porcentaje de residuos verdes sigue un modelo de probabilidad exponencial, dada la alta concentración de datos en el intervalo inicial. Para optimizar el ajuste del modelo y garantizar una mayor precisión representativa, se ha decidido acotar el análisis al intervalo de 0% a 15%, ya que es en este rango donde la tendencia de decaimiento del fenómeno es más clara y consistente con la naturaleza de la distribución exponencial.
# ================================================
# CÁLCULO DE PARÁMETROS DISTRIBUCIÓN EXPONENCIAL
# ================================================
# Media de la variable original (CYP)
media <- mean(CYP)
print(paste("Media:", round(media, 4)))
## [1] "Media: 1.3025"
# Parámetro Lambda (Tasa de fallos / decaimiento)
lambda <- 1 / media
print(paste("Lambda:", round(lambda, 4)))
## [1] "Lambda: 0.7678"
CYP_filtrado <- CYP[CYP <= 15]
hist(
CYP_filtrado,
breaks = seq(0, 15, by = 5),
probability = TRUE,
col = "lightblue",
border = "black",
xlim = c(0, 15),
main = "Gráfica Nº2: Comparación de la Realidad y el Modelo Exponencial
del porcentaje de residuos verdes en el estudio de la calidad de
agua en Europa (1991-2017)",
xlab = "Residuos verdes (%)",
ylab = "Densidad de probabilidad",
las = 1
)
curve(
dexp(x, rate = lambda),
from = 0,
to = 15,
add = TRUE,
col = "red",
lwd = 3
)
# ==========================================
# TEST DE BONDAD (Ajustado a los 3 intervalos)
# ==========================================
# Definimos el dataframe con los datos reales de tu tabla
TDF_Acotada <- data.frame(
LimInf = c(0, 5, 10),
LimSup = c(5, 10, 15),
ni = c(18838, 324, 156)
)
fo <- TDF_Acotada$ni
n <- sum(fo)
# Estimación de lambda basada en los datos observados en estos intervalos
# Para una distribución exponencial, lambda = 1 / media
# Usamos el punto medio (Mc) ponderado por las frecuencias
Mc <- c(2.5, 7.5, 12.5)
lambda <- 1 / sum(Mc * (fo / n))
# Cálculo de frecuencias esperadas (fe)
fe <- numeric(length(fo))
for(i in 1:length(fo)){
fe[i] <- n * (pexp(TDF_Acotada$LimSup[i], rate = lambda) -
pexp(TDF_Acotada$LimInf[i], rate = lambda))
}
# ===========================
# CORRELACIÓN DE PEARSON
# ===========================
# Correlación lineal entre observados y esperados
Correlacion <- cor(fo, fe) * 100
print(paste("Correlación de Pearson:", round(Correlacion, 2), "%"))
## [1] "Correlación de Pearson: 99.34 %"
# ==========================================
# TEST DE CHI-CUADRADO (Formato final)
# ==========================================
# 1. Cálculo de frecuencias relativas (proporciones)
fe_frac <- fe / n
fo_frac <- fo / n
# 2. Cálculo del estadístico X2
# Nota: La suma de (fo_frac - fe_frac)^2 / fe_frac es el método solicitado
x2 <- sum((fo_frac - fe_frac)^2 / fe_frac)
# 3. Grados de libertad
gl <- length(fo_frac) - 2
# 4. Obtención del valor crítico (Estándar para gl=1 y alpha=0.05)
umbral_aceptacion <- qchisq(0.95, df = gl)
# 5. Evaluación del modelo
acepta_modelo <- x2 < umbral_aceptacion
# Impresión de resultados detallada
print(paste("Estadístico X2 calculado:", round(x2, 6)))
## [1] "Estadístico X2 calculado: 0.124734"
print(paste("Grados de libertad (gl):", gl))
## [1] "Grados de libertad (gl): 1"
print(paste("Valor crítico (Umbral):", round(umbral_aceptacion, 4)))
## [1] "Valor crítico (Umbral): 3.8415"
print(paste("¿El modelo exponencial es aceptado?:", acepta_modelo))
## [1] "¿El modelo exponencial es aceptado?: TRUE"
# Probabilidad de estar entre 5% y 10%
prob_rango <- pexp(10, rate = lambda) - pexp(5, rate = lambda)
print(paste("La probabilidad es:", round(prob_rango * 100, 2), "%"))
## [1] "La probabilidad es: 12.97 %"
# Definimos el tamaño de la muestra
n_muestra <- 250
# Calculamos la probabilidad de ser mayor al 5% (1 - P(X <= 5))
prob_mayor_5 <- 1 - pexp(5, rate = lambda)
# Calculamos la cantidad esperada
esperadas <- prob_mayor_5 * n_muestra
print(paste("Se espera que", round(esperadas, 0), "muestras tengan más del 5% de residuos."))
## [1] "Se espera que 38 muestras tengan más del 5% de residuos."
# =============================
# GRÁFICA DE PROBABILIDADES
# =============================
# 1. Definir rango y curva base
x <- seq(0, 15, length.out = 1000)
y <- dexp(x, rate = lambda)
# 2. Inicializar el gráfico
plot(x, y, type="l", col="orange", lwd=3, xlim=c(0, 15), ylim=c(0, max(y)*1.1),
main="Gráfica N°3: Cálculo de Probabilidad",
ylab="Densidad de probabilidad", xlab="Residuos verdes (%)", xaxt="n")
# 3. Sombreado 1: Área > 5% (Muestreo) - Primero el área grande
x_cant <- seq(5, 15, length.out = 100)
y_cant <- dexp(x_cant, rate = lambda)
polygon(c(x_cant, rev(x_cant)), c(y_cant, rep(0, length(y_cant))),
col=rgb(0.9, 0.2, 0.2, 0.3), border="red4")
# 4. Sombreado 2: Área 5% a 10% (Probabilidad) - Segundo el área pequeña (encima)
x_prob <- seq(5, 10, length.out = 100)
y_prob <- dexp(x_prob, rate = lambda)
polygon(c(x_prob, rev(x_prob)), c(y_prob, rep(0, length(y_prob))),
col=rgb(0.2, 0.6, 0.8, 0.5), border="steelblue4")
# 5. Elementos visuales (Ejes, líneas y leyenda)
abline(v = 5, col = "black", lty = 2, lwd = 2) # Línea del 5%
abline(v = 10, col = "steelblue4", lty = 3, lwd = 2) # Línea del 10%
axis(1, at=seq(0, 15, by=2)) # Marcas del eje X
legend("topright",
legend=c("Modelo Exponencial", "Prob. (5% a 10%)", "Área > 5% (Muestras)"),
col=c("orange", "steelblue4", "red4"),
fill=c(NA, rgb(0.2, 0.6, 0.8, 0.5), rgb(0.9, 0.2, 0.2, 0.3)),
border=c(NA, "steelblue4", "red4"),
lty=c(1, NA, NA), lwd=c(3, NA, NA),
bg="white", box.col="grey40")
# ==============================
# #INTERVALO DE CONFIANZA
# ==============================
library(gt)
library(dplyr)
# Parámetros de tu variable real (Residuos Verdes - CYP)
media <- mean(CYP)
sigma <- sd(CYP)
n <- length(CYP)
# Cálculo del error estándar
error <- 2 * (sigma / sqrt(n))
# Límites del intervalo de confianza
limite_inferior <- round(media - error, 2)
limite_superior <- round(media + error, 2)
# Crear el texto del intervalo
texto_intervalo <- paste0("P [", limite_inferior, " < \u00b5 < ", limite_superior, "] = 95%")
# Construcción de la tabla formal con gt
tabla_intervalo <- data.frame(Intervalo = texto_intervalo)
tabla_intervalo %>%
gt() %>%
tab_header(
title = md("*Tabla Nro. 2*"),
subtitle = md("**Intervalo de confianza del porcentaje de residuos verdes
en el estudio de la calidad de agau en Europa (1991-2017)**")
) %>%
tab_source_note(
source_note = md("Autor: Grupo 3")
) %>%
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 Nro. 2 |
| Intervalo de confianza del porcentaje de residuos verdes en el estudio de la calidad de agau en Europa (1991-2017) |
| Intervalo |
|---|
| P [1.25 < µ < 1.35] = 95% |
| Autor: Grupo 3 |
La variable de porcentaje de residuos verdes (%) se explica con un modelo exponencial con parámetro λ = 0.7678, y podemos afirmar con un 95% de confianza que la media aritmética poblacional de esta variable se encuentra entre 1.25% y 1.35%, con una desviaciòn estandar de 3.66%.