0. librerias
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
3. Frecuencia
3.1. Rango
# Valores mC-nimo y mC!ximo
minimo <- min(COP)
maximo <- max(COP)
3.2. Regla de Sturges
# Regla de Sturges
k <- 1 + (3.3 * log10(length(COP)))
k <- floor(k)
# Rango y amplitud
R <- maximo - minimo
A <- R / k
3.3. Limites de clase
# Límites de clase
Li <- round(seq(from = minimo, to = maximo - A, by = A), 4)
Ls <- round(seq(from = minimo + A, to = maximo, by = A), 4)
# Marca de clase
MC <- round((Li + Ls) / 2, 2)
3.4. Creacion de columnas
# Frecuencia absoluta
ni <- numeric(length(Li))
for (i in 1:length(Li)) {
ni[i] <- sum(COP >= Li[i] & COP < Ls[i])
}
# Incluir el valor máximo en el último intervalo
ni[length(Li)] <- sum(COP >= Li[length(Li)] & COP <= maximo)
# Frecuencia relativa
hi <- round((ni / sum(ni)) * 100, 2)
# Crear tabla
TDF_COP <- data.frame(
Li, Ls, MC, ni, hi
)
# ================================
# ELIMINAR INTERVALOS CON ni = 0
# ================================
TDF_COP <- TDF_COP[TDF_COP$ni > 0, ]
# Recalcular acumuladas
TDF_COP$Niasc <- cumsum(TDF_COP$ni)
TDF_COP$Nidsc <- rev(cumsum(rev(TDF_COP$ni)))
TDF_COP$Hiasc <- round(cumsum(TDF_COP$hi))
TDF_COP$Hidsc <- round(rev(cumsum(rev(TDF_COP$hi))))
4. Tabla de distribucion de frecuencia
4.1 Tabla con Sturges
TDF_COP_Completo <- rbind(
TDF_COP,
data.frame(
Li = "Total",
Ls = " ",
MC = " ",
ni = sum(TDF_COP$ni),
hi = 100,
Niasc = " ",
Nidsc = " ",
Hiasc = " ",
Hidsc = " "
)
)
# ================================
# TABLA GT
# ================================
library(gt)
library(dplyr)
tabla_COP <- TDF_COP_Completo %>%
gt() %>%
tab_header(
title = md("Tabla Nº1"),
subtitle = md("**Tabla de distribución de frecuencias
del Porcentaje de composición de otros residuos
en 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_COP
| Tabla Nº1 |
| Tabla de distribución de frecuencias
del Porcentaje de composición de otros residuos
en la calidad de agua en Europa (1991-2017 |
| Li |
Ls |
MC |
ni |
hi |
Niasc |
Nidsc |
Hiasc |
Hidsc |
| 0 |
2.9367 |
1.47 |
171 |
0.86 |
171 |
19893 |
1 |
100 |
| 8.81 |
11.7467 |
10.28 |
218 |
1.10 |
389 |
19722 |
2 |
99 |
| 11.7467 |
14.6833 |
13.21 |
3523 |
17.71 |
3912 |
19504 |
20 |
98 |
| 14.6833 |
17.62 |
16.15 |
709 |
3.56 |
4621 |
15981 |
23 |
80 |
| 17.62 |
20.5567 |
19.09 |
958 |
4.82 |
5579 |
15272 |
28 |
77 |
| 20.5567 |
23.4933 |
22.02 |
3 |
0.02 |
5582 |
14314 |
28 |
72 |
| 23.4933 |
26.43 |
24.96 |
9787 |
49.20 |
15369 |
14311 |
77 |
72 |
| 26.43 |
29.3667 |
27.9 |
4030 |
20.26 |
19399 |
4524 |
98 |
23 |
| 32.3033 |
35.24 |
33.77 |
5 |
0.03 |
19404 |
494 |
98 |
2 |
| 38.1767 |
41.1133 |
39.64 |
261 |
1.31 |
19665 |
489 |
99 |
2 |
| 41.1133 |
44.05 |
42.58 |
228 |
1.15 |
19893 |
228 |
100 |
1 |
| Total |
|
|
19893 |
100.00 |
|
|
|
|
| Autor: Grupo 3 |
4.2. Tabla simplificada
histoP <- hist(
COP,
breaks = 8,
main = "Gráfica Nº1: Distribución del Porcentaje
de composición de otros residuos
en la calidad de agua en Europa (1991-2017)",
xlab = "composición de otros residuos",
ylab = "Cantidad",
col = "blue"
)

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)
TDF_Histo_COP <- data.frame(
LimInf,
LimSup,
Mc,
ni,
hi
)
# Eliminar intervalos vacíos
TDF_Histo_COP <- TDF_Histo_COP[TDF_Histo_COP$ni > 0, ]
# Recalcular acumuladas
TDF_Histo_COP$Ni_asc <- cumsum(TDF_Histo_COP$ni)
TDF_Histo_COP$Ni_dsc <- rev(cumsum(rev(TDF_Histo_COP$ni)))
TDF_Histo_COP$Hi_asc <- round(cumsum(TDF_Histo_COP$hi), 2)
TDF_Histo_COP$Hi_dsc <- round(rev(cumsum(rev(TDF_Histo_COP$hi))), 2)
# Fila total
TDF_Histo_COP_Completo <- rbind(
TDF_Histo_COP,
data.frame(
LimInf = "Total",
LimSup = " ",
Mc = " ",
ni = sum(TDF_Histo_COP$ni),
hi = 100,
Ni_asc = " ",
Ni_dsc = " ",
Hi_asc = " ",
Hi_dsc = " "
)
)
# Tabla GT
tabla_Histo_COP <- TDF_Histo_COP_Completo %>%
gt() %>%
tab_header(
title = md("Tabla Nº2"),
subtitle = md("*Tabla simplificada de la distribución del
Porcentaje de composición de otros residuos
en 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_COP
| Tabla Nº2 |
| Tabla simplificada de la distribución del
Porcentaje de composición de otros residuos
en 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 |
171 |
0.86 |
171 |
19893 |
0.86 |
100 |
| 5 |
10 |
7.5 |
82 |
0.41 |
253 |
19722 |
1.27 |
99.14 |
| 10 |
15 |
12.5 |
4138 |
20.80 |
4391 |
19640 |
22.07 |
98.73 |
| 15 |
20 |
17.5 |
1184 |
5.95 |
5575 |
15502 |
28.02 |
77.93 |
| 20 |
25 |
22.5 |
89 |
0.45 |
5664 |
14318 |
28.47 |
71.98 |
| 25 |
30 |
27.5 |
13735 |
69.04 |
19399 |
14229 |
97.51 |
71.53 |
| 30 |
35 |
32.5 |
5 |
0.03 |
19404 |
494 |
97.54 |
2.49 |
| 40 |
45 |
42.5 |
489 |
2.46 |
19893 |
489 |
100 |
2.46 |
| Total |
|
|
19893 |
100.00 |
|
|
|
|
| Autor: Grupo 3 |
5. Gráficas
5.1 Histograma (ni)
hist(COP, breaks = 8,
main = "Gráfica N°2: Distribución del Porcentaje
de composición de otros residuos
en la calidad de agua en Europa (1991-2017)",
xlab = "Porcentaje de composición de otros residuos",
ylab = "Cantidad",
ylim = c(0, max(ni)),
col = "lightgreen")

5.2 Histograma general (ni)
hist(COP, breaks = 8,
main = "Gráfica N°3: Distribución del Porcentaje
de composición de otros residuos
en la calidad de agua en Europa (1991-2017)",
xlab = "Porcentaje de composición de otros residuos",
ylab = "Cantidad",
ylim = c(0, 20000),
col = "lightgreen")

5.3 Histograma porcentual (hi)
# 1. Guardamos las etiquetas y las convertimos a números
mis_etiquetas <- round(as.numeric(TDF_Histo_COP_Completo$Mc), 2)
# 2. Recortamos para que coincidan (8 y 8)
etiquetas_recortadas <- mis_etiquetas[1:length(TDF_Histo_COP$hi)]
# 3. Calculamos el límite del eje Y
max_y <- max(TDF_Histo_COP$hi, na.rm = TRUE) * 1.1
# 4. Graficamos con las barras juntas
barplot(
TDF_Histo_COP$hi,
names.arg = etiquetas_recortadas,
space = 0, # <-- AQUÍ: Quita el espacio entre barras
col = "royalblue",
main = "Gráfica N°4: Distribución del Porcentaje
de composición de otros residuos
en la calidad de agua en Europa (1991-2017)",
xlab = "Composición de otros residuos",
ylab = "Porcentaje",
ylim = c(0, max_y),
las = 1
)

5.4 Histograma Porcentual General (hi)
# 1. Aseguramos que las marcas de clase sean numéricas y se redondeen a 2 decimales
etiquetas_m_clase <- round(as.numeric(TDF_Histo_COP$Mc), 2)
# 2. Dibujamos el gráfico con las barras juntas y el eje Y hasta 110 (100 * 1.1)
barplot(
TDF_Histo_COP$hi,
names.arg = etiquetas_m_clase,
space = 0, # <-- Barras juntas
border = "white", # <-- Borde para que no se mezclen los bloques
col = "royalblue",
main = "Gráfica N°5: Distribución porcentual
de la composición de otros residuos
en la calidad de agua en Europa (1991-2017)",
xlab = "composición de otros residuos",
ylab = "Porcentaje",
ylim = c(0, 110), # <-- Eje Y fijo sobre 100 (100 * 1.1)
las = 1
)

5.5 Polígono de frecuencias (hi)
# 1. Aseguramos que las marcas de clase sean numéricas para el eje X
marcas_clase <- round(as.numeric(TDF_Histo_COP$Mc), 2)
# 2. Creamos el gráfico de base (barras juntas basados en 'hi' y sobre 100)
# Guardamos el gráfico en una variable 'barras' para conocer las coordenadas exactas del centro de cada barra
barras <- barplot(
TDF_Histo_COP$hi,
names.arg = marcas_clase,
space = 0, # Barras juntas
border = "lightgray", # Borde sutil para notar las divisiones
col = "lightgreen",
main = "Gráfica N°6: Polígono de frecuencias del Porcentaje
de la composición de otros
residuos en la calidad de agua en Europa (1991-2017)",
xlab = "composición de otros residuos",
ylab = "Porcentaje (%)", # Basado en tu 'hi'
ylim = c(0, 110), # Eje Y sobre 100 fijo
las = 1
)
# 3. Agregamos el Polígono de Frecuencias encima
# Usamos las coordenadas de 'barras' para el eje X y 'hi' para el eje Y
lines(
x = barras, # Centros exactos de las barras
y = TDF_Histo_COP$hi, # Tus frecuencias relativas
type = "o", # "o" dibuja tanto las líneas como los puntos
pch = 16, # Punto relleno
lwd = 2, # Grosor de la línea
col = "black" # Color del polígono
)

5.6 Polígono de frecuencias (ni)
# 1. Creamos el histograma y lo guardamos en una variable
histo_base <- hist(
COP,
breaks = 8,
main = "Gráfica N°7: Polígono de frecuencias de la
Distribución general en la composición
de otros residuos
en la calidad de agua en Europa (1991-2017)",
xlab = "Porcentaje de composición de otros residuos",
ylab = "Cantidad",
ylim = c(0, 20000), # Tu límite fijo de 20,000
col = "lightgreen",
border = "black"
)
# 2. Agregamos el polígono de frecuencias encima usando los datos del histograma
lines(
x = histo_base$mids, # R extrae automáticamente el centro de cada barra
y = histo_base$counts, # R extrae automáticamente la altura (frecuencia)
type = "o", # "o" para dibujar líneas y puntos a la vez
pch = 16, # Puntos rellenos
lwd = 2, # Grosor de la línea
col = "black" # Color del polígono
)

5.7 Boxplot
boxplot(
COP,
horizontal = TRUE,
col = "pink",
main = "Gráfica Nº8 Distribución de la composición de otros
residuos (1991-2017)",
xlab = "composición de otros residuos"
)
points(
mean(COP),
1,
pch = 19,
col = "red"
)
legend(
"topright",
legend = "Media",
pch = 19,
col = "red"
)

5.8 Ojiva ascendente y descendente (Ni)
plot(
TDF_Histo_COP$LimInf,
TDF_Histo_COP$Ni_dsc,
main = "Gráfica Nº9: Ojiva ascendente y descendente
de la composición de otros residuos
en la calidad de agua en Europa (1991-2017)",
xlab = "composición de otros residuos",
ylab = "Cantidad",
col = "red",
type = "o",
lwd = 2
)
lines(
TDF_Histo_COP$LimSup,
TDF_Histo_COP$Ni_asc,
col = "green",
type = "o",
lwd = 2
)
legend(
"right",
legend = c(
"Ojiva descendente",
"Ojiva ascendente"
),
col = c("red", "green"),
pch = c(16, 16),
lty = 1,
bty = "n"
)

5.9 Ojiva ascendente y descendente (Hi)
plot(
TDF_Histo_COP$LimSup,
TDF_Histo_COP$Hi_asc,
type = "o",
col = "blue",
pch = 16,
lwd = 2,
main = "Gráfica Nº10 Ojivas ascendente y descendente
de la composición de otros residuos
en la calidad de agua en Europa (1991-2017)",
xlab = "composición de otros residuos (%)",
ylab = "Porcentaje acumulado (%)",
ylim = c(0, 100)
)
# Ojiva Descendente
lines(
TDF_Histo_COP$LimInf,
TDF_Histo_COP$Hi_dsc,
type = "o",
col = "red",
pch = 17,
lwd = 2
)
grid()
legend(
"right",
legend = c(
"Ojiva Ascendente (%)",
"Ojiva Descendente (%)"
),
col = c("blue", "red"),
pch = c(16, 17),
lty = 1,
bty = "n"
)

6. Indicadores
library(e1071)
library(gt)
library(dplyr)
# 1. Limpieza de la variable
COP <- na.omit(datos$composition_food_organic_waste_percent)
COP <- as.numeric(COP)
# 2. Cálculos estadísticos
atipicos <- boxplot.stats(COP)$out
n_atipicos <- length(atipicos)
media <- round(mean(COP), 2)
mediana <- round(median(COP), 2)
fila_modal <- which.max(TDF_Histo_COP$ni)
moda <- paste0("[", round(TDF_Histo_COP$LimInf[fila_modal], 2), " ; ", round(TDF_Histo_COP$LimSup[fila_modal], 2), "]")
varianza <- var(COP)
desv_est <- sd(COP)
cv <- round((desv_est / media) * 100, 2)
asimetria <- skewness(COP, type = 2)
curtosis <- kurtosis(COP, type = 2)
# 3. Estructura de la tabla para gt
tabla_indicadores <- data.frame(
Variable = "Porcentaje Residuos Organicos (COP)",
Rango = paste0("[", round(min(COP), 2), " ; ", round(max(COP), 2), "]"),
X = media,
Me = mediana,
Mo = moda,
V = round(varianza, 2),
Sd = round(desv_est, 2),
Cv = cv,
As = round(asimetria, 2),
K = round(curtosis, 2),
Valores_Atipicos = n_atipicos
)
# 4. Renderizar y mostrar en el documento final
tabla_indicadores %>%
gt() %>%
tab_header(
title = md("**Tabla NB:3**"),
subtitle = md("*Indicadores estadisticos de la variable Porcentaje de composicion Residuos varios*")
) %>%
tab_source_note(
source_note = md("**Autor:** Grupo 3")
)
| Tabla NB:3 |
| Indicadores estadisticos de la variable Porcentaje de composicion Residuos varios |
| Variable |
Rango |
X |
Me |
Mo |
V |
Sd |
Cv |
As |
K |
Valores_Atipicos |
| Porcentaje Residuos Organicos (COP) |
[12.78 ; 62.3] |
32.17 |
32 |
[25 ; 30] |
128.29 |
11.33 |
35.21 |
0.44 |
-0.06 |
9434 |
| Autor: Grupo 3 |