4. Tabla de distribución de frecuencia
4.1 Tabla general con Sturges
TDF_CFP_Completo <- rbind(
TDF_CFP,
data.frame(
Li = "Total",
Ls = " ",
MC = " ",
ni = sum(TDF_CFP$ni),
hi = 100,
Niasc = " ",
Nidsc = " ",
Hiasc = " ",
Hidsc = " "
)
)
# ================================
# TABLA GT
# ================================
tabla_CFP <- TDF_CFP_Completo %>%
gt() %>%
tab_header(
title = md("*Tabla Nº1*"),
subtitle = md("**Distribución de frecuencias del Porcentaje de Residuos Orgánicos 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_CFP
| Tabla Nº1 |
| Distribución de frecuencias del Porcentaje de Residuos Orgánicos en el estudio de la calidad de agua en Europa (1991-2017) |
| Li |
Ls |
MC |
ni |
hi |
Niasc |
Nidsc |
Hiasc |
Hidsc |
| 12.78 |
16.0813 |
14.43 |
370 |
1.86 |
370 |
19893 |
2 |
100 |
| 16.0813 |
19.3827 |
17.73 |
4001 |
20.11 |
4371 |
19523 |
22 |
98 |
| 19.3827 |
22.684 |
21.03 |
0 |
0.00 |
4371 |
15522 |
22 |
78 |
| 22.684 |
25.9853 |
24.33 |
493 |
2.48 |
4864 |
15522 |
24 |
78 |
| 25.9853 |
29.2867 |
27.64 |
22 |
0.11 |
4886 |
15029 |
25 |
76 |
| 29.2867 |
32.588 |
30.94 |
10332 |
51.94 |
15218 |
15007 |
76 |
75 |
| 32.588 |
35.8893 |
34.24 |
460 |
2.31 |
15678 |
4675 |
79 |
24 |
| 35.8893 |
39.1907 |
37.54 |
168 |
0.84 |
15846 |
4215 |
80 |
21 |
| 39.1907 |
42.492 |
40.84 |
228 |
1.15 |
16074 |
4047 |
81 |
20 |
| 42.492 |
45.7933 |
44.14 |
0 |
0.00 |
16074 |
3819 |
81 |
19 |
| 45.7933 |
49.0947 |
47.44 |
3223 |
16.20 |
19297 |
3819 |
97 |
19 |
| 49.0947 |
52.396 |
50.75 |
0 |
0.00 |
19297 |
596 |
97 |
3 |
| 52.396 |
55.6973 |
54.05 |
0 |
0.00 |
19297 |
596 |
97 |
3 |
| 55.6973 |
58.9987 |
57.35 |
117 |
0.59 |
19414 |
596 |
98 |
3 |
| 58.9987 |
62.3 |
60.65 |
479 |
2.41 |
19893 |
479 |
100 |
2 |
| Total |
|
|
19893 |
100.00 |
|
|
|
|
| Autor: Grupo 3 |
4.2 Tabla Simplificada
# =============================================
# TABLA SIMPLIFICADA (BASADA EN EL HISTOGRAMA)
# =============================================
limites_exactos <- seq(minimo, maximo, length.out = 11)
histoP <- hist(
CFP,
breaks = limites_exactos,
plot = FALSE
)
# 2. Extraer datos del histograma para la tabla
Limites <- histoP$breaks
LimInf <- round(Limites[1:(length(Limites) - 1)], 2)
LimSup <- round(Limites[2:length(Limites)], 2)
Mc <- round(histoP$mids, 2)
ni <- histoP$counts
hi <- round((ni / sum(ni)) * 100, 2)
# 3. Crear el DataFrame base (Tendrá exactamente 10 filas)
TDF_Histo_CFP <- data.frame(
LimInf,
LimSup,
Mc,
ni,
hi
)
# 4. Calcular frecuencias acumuladas continuas
TDF_Histo_CFP$Ni_asc <- cumsum(TDF_Histo_CFP$ni)
TDF_Histo_CFP$Ni_dsc <- rev(cumsum(rev(TDF_Histo_CFP$ni)))
TDF_Histo_CFP$Hi_asc <- round(cumsum(TDF_Histo_CFP$hi), 2)
TDF_Histo_CFP$Hi_dsc <- round(rev(cumsum(rev(TDF_Histo_CFP$hi))), 2)
TDF_Histo_CFP$Hi_asc[nrow(TDF_Histo_CFP)] <- 100.00
TDF_Histo_CFP$Hi_dsc[1] <- 100.00
# 5. Crear fila de totales
TDF_Histo_CFP_Completo <- rbind(
TDF_Histo_CFP,
data.frame(
LimInf = "Total",
LimSup = " ",
Mc = " ",
ni = sum(TDF_Histo_CFP$ni),
hi = 100,
Ni_asc = " ",
Ni_dsc = " ",
Hi_asc = " ",
Hi_dsc = " "
)
)
# 6. Generar y mostrar la Tabla con 'gt'
tabla_Histo_CFP <- TDF_Histo_CFP_Completo %>%
gt() %>%
tab_header(
title = md("*Tabla Nº2*"),
subtitle = md("**Distribución simplificada de frecuencias de Porcentaje de Residuos Orgánicos 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
)
# Imprimir la tabla
tabla_Histo_CFP
| Tabla Nº2 |
| Distribución simplificada de frecuencias de Porcentaje de Residuos Orgánicos 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 |
| 12.78 |
17.73 |
15.26 |
4371 |
21.97 |
4371 |
19893 |
21.97 |
100 |
| 17.73 |
22.68 |
20.21 |
0 |
0.00 |
4371 |
15522 |
21.97 |
78.03 |
| 22.68 |
27.64 |
25.16 |
493 |
2.48 |
4864 |
15522 |
24.45 |
78.03 |
| 27.64 |
32.59 |
30.11 |
10354 |
52.05 |
15218 |
15029 |
76.5 |
75.55 |
| 32.59 |
37.54 |
35.06 |
499 |
2.51 |
15717 |
4675 |
79.01 |
23.5 |
| 37.54 |
42.49 |
40.02 |
357 |
1.79 |
16074 |
4176 |
80.8 |
20.99 |
| 42.49 |
47.44 |
44.97 |
82 |
0.41 |
16156 |
3819 |
81.21 |
19.2 |
| 47.44 |
52.4 |
49.92 |
3141 |
15.79 |
19297 |
3737 |
97 |
18.79 |
| 52.4 |
57.35 |
54.87 |
117 |
0.59 |
19414 |
596 |
97.59 |
3 |
| 57.35 |
62.3 |
59.82 |
479 |
2.41 |
19893 |
479 |
100 |
2.41 |
| Total |
|
|
19893 |
100.00 |
|
|
|
|
| Autor: Grupo 3 |
5. Gráficas
5.1 Histograma (ni)
# =========================================
# Histograma generado por RStudio
# =========================================
todos_limites_cfp <- c(TDF_Histo_CFP$LimInf[1], TDF_Histo_CFP$LimSup)
hist(
CFP,
breaks = todos_limites_cfp,
main = "Gráfica Nº1: Distribución de frecuencias del Porcentaje de Residuos \nOrgánicos en el estudio de la calidad de agua en Europa (1991-2017)",
xlab = "Porcentaje de residuos orgánicos (%)",
ylab = "Cantidad",
col = "darkslateblue",
border = "black",
xaxt = "n"
)
axis(
side = 1,
at = todos_limites_cfp,
labels = round(todos_limites_cfp, 1),
las = 1,
cex.axis = 0.8
)
grid()

5.2 Histograma General (ni)
# ===========================================================
# Histograma con relación a la totalidad de los datos
# ===========================================================
bp <- barplot(
TDF_Histo_CFP$ni,
col = "slateblue",
border = "black",
main = "Gráfica Nº2: Distribución de frecuencias del Porcentaje de Residuos \nOrgánicos en el estudio de la calidad de agua en Europa (1991-2017)",
xlab = "Porcentaje de residuos orgánicos (%)",
ylab = "Cantidad",
space = 0,
xaxt = "n",
ylim = c(0, 20000)
)
limites_etiquetas_cfp <- c(TDF_Histo_CFP$LimInf, tail(TDF_Histo_CFP$LimSup, 1))
axis(
side = 1,
at = 0:length(TDF_Histo_CFP$ni),
labels = round(limites_etiquetas_cfp, 1),
las = 1,
cex.axis = 0.8
)
grid()

5.3 Histograma Porcentual (hi)
# ======================================
# Histograma porcentual que genera RStudio
# ======================================
bp <- barplot(
TDF_Histo_CFP$hi,
col = "darkslateblue",
border = "black",
main = "Gráfica Nº3: Distribución porcentual de frecuencias del Porcentaje de \nResiduos Orgánicos en el estudio de la calidad de agua en
Europa (1991-2017)",
xlab = "Porcentaje de residuos orgánicos (%)",
ylab = "Porcentaje (%)",
space = 0,
xaxt = "n",
ylim = c(0, max(TDF_Histo_CFP$hi) * 1.15)
)
limites_etiquetas_cfp <- c(TDF_Histo_CFP$LimInf, tail(TDF_Histo_CFP$LimSup, 1))
axis(
side = 1,
at = 0:length(TDF_Histo_CFP$hi),
labels = round(limites_etiquetas_cfp, 1),
las = 1,
cex.axis = 0.8
)
grid()

5.4 Histograma Porcentual General (hi)
# ===========================================================
# Histograma porcentual con relación a la totalidad
# ===========================================================
hi_global_cfp <- round((TDF_Histo_CFP$ni / length(CFP)) * 100, 2)
bp <- barplot(
hi_global_cfp,
space = 0,
col = "slateblue",
border = "black",
main = "Gráfica Nº4: Distribución porcentual de frecuencias del Porcentaje de \nResiduos Orgánicos en el estudio de la calidad de agua en
Europa (1991-2017)",
xlab = "Porcentaje de residuos orgánicos (%)",
ylab = "Porcentaje (%)",
xaxt = "n",
ylim = c(0, 100)
)
limites_etiquetas_cfp <- c(TDF_Histo_CFP$LimInf, tail(TDF_Histo_CFP$LimSup, 1))
axis(
side = 1,
at = 0:length(TDF_Histo_CFP$ni),
labels = round(limites_etiquetas_cfp, 1),
las = 1,
cex.axis = 0.8
)
grid()

5.5 Polígono de frecuencias (hi)
bp <- barplot(
TDF_Histo_CFP$hi,
col = "slateblue",
border = "black",
main = "Gráfica Nº5: Polígono de frecuencia de la distribución porcentual del
Porcentaje de Residuos Orgánicos en el estudio de la
calidad de agua en Europa (1991-2017)",
xlab = "Porcentaje de residuos orgánicos (%)",
ylab = "Porcentaje (%)",
space = 0,
xaxt = "n",
ylim = c(0, max(TDF_Histo_CFP$hi) * 1.2)
)
limites_etiquetas_cfp <- c(TDF_Histo_CFP$LimInf, tail(TDF_Histo_CFP$LimSup, 1))
# 3. Dibujamos el eje X
axis(
side = 1,
at = 0:length(TDF_Histo_CFP$hi),
labels = round(limites_etiquetas_cfp, 1),
las = 1,
cex.axis = 0.8
)
# 4. Polígono superpuesto
lines(
bp,
TDF_Histo_CFP$hi,
type = "o",
pch = 16,
lwd = 2,
col = "black"
)
# 5. Etiquetas de texto
text(
bp,
TDF_Histo_CFP$hi,
labels = round(TDF_Histo_CFP$hi, 2),
pos = 3,
cex = 0.8,
col = "black"
)
grid()
legend(
"topright",
legend = c("Frecuencia relativa (%)"),
col = "black",
lwd = 2,
pch = 16,
bty = "n"
)

5.6 Boxplot
# =============================
# BOXPLOT CON VALORES ATÍPICOS
# =============================
boxplot(
CFP,
horizontal = TRUE,
col = "slateblue",
main = "Gráfica Nº6: Diagrama de caja del Porcentaje de Residuos Orgánicos \nen el estudio de la calidad de agua en Europa (1991-2017)",
xlab = "Porcentaje de residuos orgánicos (%)"
)
points(
mean(CFP),
1,
text = "",
pch = 19,
col = "red"
)
## Warning in plot.xy(xy.coords(x, y), type = type, ...): "text" es un parámetro
## gráfico inválido
legend(
"topright",
legend = "Media",
pch = 19,
col = "red"
)

5.7 Ojiva ascendente y descendente (Ni)
# =========================
# OJIVAS Ni
# =========================
par(mar = c(10, 4, 7, 2))
# 1. Definir todos los límites de clase
todos_limites_cfp <- c(TDF_Histo_CFP$LimInf[1], TDF_Histo_CFP$LimSup)
# Ojiva Ascendente
x_asc_cfp <- c(TDF_Histo_CFP$LimInf[1], TDF_Histo_CFP$LimSup)
y_asc_cfp <- c(0, TDF_Histo_CFP$Ni_asc)
# Ojiva Descendente
x_dsc_cfp <- c(TDF_Histo_CFP$LimInf, tail(TDF_Histo_CFP$LimSup, 1))
y_dsc_cfp <- c(TDF_Histo_CFP$Ni_dsc, 0)
plot(
x_dsc_cfp,
y_dsc_cfp,
main = "Gráfica Nº7: Ojiva ascendente y descendente del Porcentaje de
Residuos Orgánicos en el estudio de la calidad
de agua en Europa (1991-2017)",
xlab = "Porcentaje de residuos orgánicos (%)",
ylab = "Frecuencia acumulada",
col = "slateblue",
type = "o",
lwd = 2,
xaxt = "n",
ylim = c(0, max(TDF_Histo_CFP$Ni_asc) * 1.05)
)
# 4. Dibujar la ojiva ascendente
lines(
x_asc_cfp,
y_asc_cfp,
col = "black",
type = "o",
lwd = 2
)
# 5. Dibujar el eje X
axis(
side = 1,
at = todos_limites_cfp,
labels = round(todos_limites_cfp, 1),
las = 1,
cex.axis = 0.8
)
grid()
# 6. Leyenda
legend(
"right",
legend = c(
"Ojiva descendente",
"Ojiva ascendente"
),
col = c("slateblue", "black"),
pch = c(16, 16),
lty = 1,
bty = "n"
)

5.8 Ojiva ascendente y descendente (Hi)
# =========================
# OJIVAS PORCENTUALES
# =========================
par(mar = c(10, 4, 7, 2))
# 1. Definir todos los límites de clase
todos_limites_cfp <- c(TDF_Histo_CFP$LimInf[1], TDF_Histo_CFP$LimSup)
# Ojiva Ascendente
x_asc_p_cfp <- c(TDF_Histo_CFP$LimInf[1], TDF_Histo_CFP$LimSup)
y_asc_p_cfp <- c(0, TDF_Histo_CFP$Hi_asc)
# Ojiva Descendente
x_dsc_p_cfp <- c(TDF_Histo_CFP$LimInf, tail(TDF_Histo_CFP$LimSup, 1))
y_dsc_p_cfp <- c(TDF_Histo_CFP$Hi_dsc, 0)
plot(
x_asc_p_cfp,
y_asc_p_cfp,
type = "o",
col = "black",
pch = 16,
lwd = 2,
main = "Gráfica Nº8: Ojiva ascendente y descendente porcentual del Porcentaje
de Residuos Orgánicos en el estudio de la
calidad de agua en Europa (1991-2017)",
xlab = "Porcentaje de residuos orgánicos (%)",
ylab = "Porcentaje acumulado (%)",
ylim = c(0, 100),
xaxt = "n"
)
# 4. Ojiva Descendente
lines(
x_dsc_p_cfp,
y_dsc_p_cfp,
type = "o",
col = "darkslateblue",
pch = 17,
lwd = 2
)
# 5. Dibujar el eje X
axis(
side = 1,
at = todos_limites_cfp,
labels = round(todos_limites_cfp, 1),
las = 1,
cex.axis = 0.8
)
grid()
# 6. Leyenda
legend(
"right",
legend = c(
"Ojiva Ascendente (%)",
"Ojiva Descendente (%)"
),
col = c("black", "darkslateblue"),
pch = c(16, 17),
lty = 1,
bty = "n"
)

6 Indicadores Estadísticos
6.1 Indicadores de Tendencia Central
# =========================
# INDICADORES ESTADISTICOS
# =========================
# 1. Limpieza previa de la variable CFP
CFP <- na.omit(datos$composition_food_organic_waste_percent)
CFP <- as.numeric(CFP)
# 2. Criterio del boxplot para atípicos y su rango con la cantidad al lado
atipicos_cfp <- boxplot.stats(CFP)$out
n_atipicos_cfp <- length(atipicos_cfp)
if (n_atipicos_cfp > 0) {
rango_atipicos_cfp <- paste0("[", round(min(atipicos_cfp), 2), " ; ", round(max(atipicos_cfp), 2), "] (Valores: ", n_atipicos_cfp, ")")
} else {
rango_atipicos_cfp <- "No existen"
}
media <- round(mean(CFP), 2)
mediana <- round(median(CFP), 2)
# =========================
# MODA (INTERVALO MODAL)
# =========================
# Moda basada en Intervalo Modal
fila_modal <- which.max(TDF_Histo_CFP$ni)
moda_intervalar <- paste0(
"[", round(TDF_Histo_CFP$LimInf[fila_modal], 2),
" ; ", round(TDF_Histo_CFP$LimSup[fila_modal], 2), "]"
)
6.2 Dispersión
varianza <- var(CFP)
desv_est <- sd(CFP)
cv <- round((desv_est / media) * 100, 2)
6.3 Asimetría
library(e1071)
asimetria <- skewness(CFP, type = 2)
curtosis <- kurtosis(CFP)
6.4 Tabla de Indicadores
# =========================
# TABLA RESUMEN FINAL
# =========================
tabla_indicadores <- data.frame(
Variable = "Residuos Orgánicos (%)",
Rango = paste0("[", round(min(CFP), 2), " ; ", round(max(CFP), 2), "]"),
X = media,
Me = mediana,
Mo = moda_intervalar,
V = round(varianza, 2),
Sd = round(desv_est, 2),
Cv = cv,
As = round(asimetria, 2),
K = round(curtosis, 2),
Valores_Atipicos = rango_atipicos_cfp
)
tabla_indicadores_gt <- tabla_indicadores %>%
gt() %>%
tab_header(
title = md("*Tabla Nº3*"),
subtitle = md("**Indicadores estadísticos de la variable Porcentaje de Residuos Orgánicos en el estudio de la calidad de agua en Europa (1991-2017)**")
) %>%
cols_label(
Valores_Atipicos = "Rango Atípicos"
) %>%
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_indicadores_gt
| Tabla Nº3 |
| Indicadores estadísticos de la variable Porcentaje de Residuos Orgánicos en el estudio de la calidad de agua en Europa (1991-2017) |
| Variable |
Rango |
X |
Me |
Mo |
V |
Sd |
Cv |
As |
K |
Rango Atípicos |
| Residuos Orgánicos (%) |
[12.78 ; 62.3] |
32.17 |
32 |
[27.64 ; 32.59] |
128.29 |
11.33 |
35.21 |
0.44 |
-0.06 |
[12.78 ; 62.3] (Valores: 9434) |
| Autor: Grupo 3 |