πΉπΉπΉπΉπΉπΉπΉπΉπΉπΉπΉπΉπΉπΉπΉπΉπΉπΉπΉπΉπΉπΉπΉπΉπΉπΉπΉπΉπΉπΉπΉπΉπΉπΉπΉπΉπΉπΉπΉ
if (!require(readxl)) install.packages("readxl")
if (!require(summarytools)) install.packages("summarytools")
if (!require(ggplot2)) install.packages("ggplot2")
if (!require(agricolae)) install.packages("agricolae")
library(readxl)
library(summarytools)
library(ggplot2)
library(agricolae)ππππππππππππππππππππππππππππππππππππππππ
π―π―π―π―π―π―π―π―π―π―π―π―π―π―π―π―π―π―π―π―π―π―π―π―π―π―π―π―π―π―π―π―π―π―π―π―π―π―π―π―
ππππππππππππππππππππππππππππππππππππππππ
ππππππππππππππππππππππππππππππππππππππππ
# Si no cuentas con el archivo Excel en la carpeta datos/, se generan datos equivalentes
if (file.exists("datos/DATOS2026.xlsx")) {
DATOS2026 <- read_excel("datos/DATOS2026.xlsx")
} else {
set.seed(2026)
n <- 121
DATOS2026 <- data.frame(
SEXO = sample(c("MASCULINO", "FEMENINO"), n, replace = TRUE, prob = c(0.55, 0.45)),
CURSO = sample(c("CURSO A", "CURSO B", "CURSO C"), n, replace = TRUE),
ESTRATO = sample(c("ESTRATO 1", "ESTRATO 2", "ESTRATO 3", "ESTRATO 4", "ESTRATO 5"), n, replace = TRUE),
EDAD = round(rnorm(n, mean = 20, sd = 2)),
ESTATURA = round(rnorm(n, mean = 170, sd = 8)),
PESO = round(rnorm(n, mean = 68, sd = 10))
)
}
head(DATOS2026)ππππππππππππππππππππππππππππππππππππππππ
##
## FEMENINO MASCULINO
## 50 71
ππππππππππππππππππππππππππππππππππππππππ
pie_1 <- pie(table_sexo, col = c("lightblue", "pink"),
main = "Estudio de Pastel.\n DistribuciΓ³n por sexos.", labels = table_sexo)ππππππππππππππππππππππππππππππππππππππππ
barp <- barplot(table_sexo, col = rainbow(5), border = "darkred",
main = "GrΓ‘fico de Barras", sub = "UTB", xlab = "SEXO", ylab = "Conteo",
ylim = c(0, max(table_sexo) + 15))
text(barp, table_sexo / 2, labels = table_sexo)ππππππππππππππππππππππππππππππππππππππππ
##
## FEMENINO MASCULINO
## 41 59
ππππππππππππππππππππππππππππππππππππππππ
barp2 <- barplot(table_sexo2, col = rainbow(5), border = "darkred",
main = "GrΓ‘fico de Barras Porcentual", sub = "UTB", xlab = "SEXO", ylab = "Porcentaje",
ylim = c(0, max(table_sexo2) + 15))
text(barp2, table_sexo2 / 2, labels = paste0(table_sexo2, "%"))ππππππππππππππππππππππππππππππππππππππππ
pie_1 <- pie(table_sexo2, col = c("lightblue", "pink"),
main = "Estudio de Pastel.\n DistribuciΓ³n Porcentual por Sexo.", labels = paste0(table_sexo2, "%"))ππππππππππππππππππππππππππππππππππππππππ
##
## CURSO A CURSO B CURSO C
## FEMENINO 13 23 14
## MASCULINO 29 24 18
ππππππππππππππππππππππππππππππππππππππππ
barp3 <- barplot(table_3,
main = "GrΓ‘fico de barras CURSO vs SEXO",
xlab = "CURSO", ylab = "Frecuencia",
col = c("pink", "blue"),
legend.text = rownames(table_3),
beside = TRUE,
ylim = c(0, max(table_3) + 10))
text(barp3, table_3 + 2, labels = table_3)ππππππππππππππππππππππππππππππππππππππππ
##
## CURSO A CURSO B CURSO C
## FEMENINO 11 19 12
## MASCULINO 24 20 15
ππππππππππππππππππππππππππππππππππππππππ
barp4 <- barplot(table_4,
main = "GrΓ‘fico de barras CURSO vs SEXO en porcentajes",
xlab = "CURSO", ylab = "Porcentaje (%)",
col = c("pink", "blue"),
legend.text = rownames(table_4),
beside = TRUE,
ylim = c(0, max(table_4) + 10))
text(barp4, table_4 + 2, labels = paste0(table_4, "%"))ππππππππππππππππππππππππππππππππππππππππ
##
## CURSO A CURSO B CURSO C
## ESTRATO 1 9 7 11
## ESTRATO 2 10 14 10
## ESTRATO 3 8 7 3
## ESTRATO 4 6 11 6
## ESTRATO 5 9 8 2
ππππππππππππππππππππππππππππππππππππππππ
barp5 <- barplot(table_5,
main = "GrΓ‘fico de barras CURSO vs ESTRATO",
xlab = "CURSO", ylab = "Frecuencia",
col = rainbow(nrow(table_5)),
legend.text = rownames(table_5),
beside = TRUE,
ylim = c(0, max(table_5) + 5))
text(barp5, table_5 + 1, labels = table_5)ππππππππππππππππππππππππππππππππππππππππ
##
## FEMENINO MASCULINO
## ESTRATO 1 11 16
## ESTRATO 2 17 17
## ESTRATO 3 8 10
## ESTRATO 4 5 18
## ESTRATO 5 9 10
ππππππππππππππππππππππππππππππππππππππππ
barp6 <- barplot(table_6,
main = "GrΓ‘fico de barras SEXO vs ESTRATO",
xlab = "SEXO", ylab = "Frecuencia",
col = rainbow(nrow(table_6)),
legend.text = rownames(table_6),
beside = TRUE,
ylim = c(0, max(table_6) + 5))
text(barp6, table_6 + 1, labels = table_6)ππππππππππππππππππππππππππππππππππππππππ
## ### Frequencies
## #### DATOS2026$EDAD
## **Type:** Numeric
##
## | | Freq | % Valid | % Valid Cum. | % Total | % Total Cum. |
## |-----------:|-----:|--------:|-------------:|--------:|-------------:|
## | **15** | 2 | 1.65 | 1.65 | 1.65 | 1.65 |
## | **16** | 4 | 3.31 | 4.96 | 3.31 | 4.96 |
## | **17** | 7 | 5.79 | 10.74 | 5.79 | 10.74 |
## | **18** | 12 | 9.92 | 20.66 | 9.92 | 20.66 |
## | **19** | 22 | 18.18 | 38.84 | 18.18 | 38.84 |
## | **20** | 24 | 19.83 | 58.68 | 19.83 | 58.68 |
## | **21** | 25 | 20.66 | 79.34 | 20.66 | 79.34 |
## | **22** | 11 | 9.09 | 88.43 | 9.09 | 88.43 |
## | **23** | 10 | 8.26 | 96.69 | 8.26 | 96.69 |
## | **24** | 2 | 1.65 | 98.35 | 1.65 | 98.35 |
## | **25** | 2 | 1.65 | 100.00 | 1.65 | 100.00 |
## | **\<NA\>** | 0 | | | 0.00 | 100.00 |
## | **Total** | 121 | 100.00 | 100.00 | 100.00 | 100.00 |
ππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ πππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ π
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 15.00 19.00 20.00 20.02 21.00 25.00
ππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ πππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ π
ππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ πππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ π
x <- DATOS2026$EDAD
boxplot(x, notch = TRUE, horizontal = TRUE, col = rainbow(3), main = "Diagrama de Caja con Muesca (Mediana)")ππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ πππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ π
x <- DATOS2026$EDAD
y <- DATOS2026$SEXO
boxplot(x ~ y, horizontal = TRUE, col = rainbow(3), main = "EDAD vs SEXO")ππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ πππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ π
x <- DATOS2026$EDAD
z <- DATOS2026$ESTRATO
boxplot(x ~ z, horizontal = TRUE, col = rainbow(5), main = "EDAD vs ESTRATO")ππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ πππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ π
ggplot(data = DATOS2026, mapping = aes(y = EDAD, x = ESTRATO, fill = SEXO)) +
geom_boxplot() +
scale_y_continuous(name = "EDAD") +
scale_x_discrete(labels = abbreviate, name = "ESTRATO") +
theme_minimal() +
labs(title = "DistribuciΓ³n de EDAD por ESTRATO y SEXO")ππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ πππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ π
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 151.0 165.0 170.0 169.9 176.0 186.0
ππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ πππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ π
boxplot(DATOS2026$ESTATURA, horizontal = TRUE, col = rainbow(3), main = "Diagrama de Caja - ESTATURA")ππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ πππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ π
x <- DATOS2026$ESTATURA
boxplot(x, notch = TRUE, horizontal = TRUE, col = rainbow(3), main = "Mediana de ESTATURA")ππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ πππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ π
x <- DATOS2026$ESTATURA
y <- DATOS2026$SEXO
boxplot(x ~ y, horizontal = TRUE, col = rainbow(3), main = "ESTATURA vs SEXO")ππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ πππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ π
x <- DATOS2026$ESTATURA
z <- DATOS2026$ESTRATO
boxplot(x ~ z, horizontal = TRUE, col = rainbow(5), main = "ESTATURA vs ESTRATO")ππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ πππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ π
ggplot(data = DATOS2026, mapping = aes(y = ESTATURA, x = ESTRATO, fill = SEXO)) +
geom_boxplot() +
scale_y_continuous(name = "ESTATURA") +
scale_x_discrete(labels = abbreviate, name = "ESTRATO") +
theme_minimal() +
labs(title = "DistribuciΓ³n de ESTATURA por ESTRATO y SEXO")ππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ πππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ π
h2 <- graph.freq(DATOS2026$EDAD, col = colors()[75], main = "Histograma de EDAD (Sturges)", xlab = "EDAD")ππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ πππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ π
ππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ πππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ π
plot(h2, col = colors()[70], frequency = 1, main = "PolΓgono de Frecuencias Absolutas", xlab = "EDAD")
polygon.freq(h2, col = "red", frequency = 1, lwd = 2)ππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ πππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ π
plot(h2, col = colors()[70], frequency = 2, main = "PolΓgono de Frecuencias Relativas", xlab = "EDAD")
polygon.freq(h2, col = "red", frequency = 2, lwd = 2)ππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ πππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ π
fr_por_clase2 <- h2$counts
total_n2 <- sum(h2$counts)
fr_relativos2 <- fr_por_clase2 / total_n2
fr_porcentuales2 <- 100 * fr_relativos2
data.frame(
Acumulada_Absoluta = cumsum(fr_por_clase2),
Acumulada_Relativa = round(cumsum(fr_relativos2), 4),
Acumulada_Porcentual = round(cumsum(fr_porcentuales2), 2)
)ππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ πππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ π
p4 <- cumsum(fr_porcentuales2)
plot(p4, type = "o", col = "red", main = "Ojiva de Frecuencias Porcentuales Acumuladas",
xlab = "Clases", ylab = "Porcentaje Acumulado (%)")ππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ πππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ π
##
## CURSO A CURSO B CURSO C
## FEMENINO 13 23 14
## MASCULINO 29 24 18
ππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ πππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ π
barp_bv1 <- barplot(table_bv1,
main = "GrΓ‘fico de barras CURSO vs SEXO",
xlab = "CURSO", ylab = "Frecuencia",
col = c("pink", "blue"),
legend.text = rownames(table_bv1),
beside = TRUE,
ylim = c(0, max(table_bv1) + 10))
text(barp_bv1, table_bv1 + 2, labels = table_bv1)ππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ πππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ π
##
## CURSO A CURSO B CURSO C
## ESTRATO 1 9 7 11
## ESTRATO 2 10 14 10
## ESTRATO 3 8 7 3
## ESTRATO 4 6 11 6
## ESTRATO 5 9 8 2
ππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ πππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ π
barp_bv2 <- barplot(table_bv2,
main = "GrΓ‘fico de barras CURSO vs ESTRATO",
xlab = "CURSO", ylab = "Frecuencia",
col = rainbow(nrow(table_bv2)),
legend.text = rownames(table_bv2),
beside = TRUE,
ylim = c(0, max(table_bv2) + 5))
text(barp_bv2, table_bv2 + 1, labels = table_bv2)ππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ πππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ π
x <- DATOS2026$EDAD
y <- DATOS2026$SEXO
boxplot(x ~ y, horizontal = TRUE, col = rainbow(3), main = "EDAD vs SEXO")ππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ πππ§ͺππ»β¨π§ ππ¬βοΈοΈππ»ππ§ͺππ»β¨π§ π
x <- DATOS2026$EDAD
z <- DATOS2026$ESTRATO
boxplot(x ~ z, horizontal = TRUE, xlab = "EDAD", ylab = "ESTRATOS", col = rainbow(5), main = "EDAD vs ESTRATO")ππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ πππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ π
x <- DATOS2026$ESTATURA
z <- DATOS2026$SEXO
boxplot(x ~ z, horizontal = TRUE, xlab = "ESTATURA", ylab = "SEXO", col = rainbow(3), main = "ESTATURA vs SEXO")ππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ πππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ π
x <- DATOS2026$ESTATURA
y <- DATOS2026$PESO
plot(x, y, xlab = "ESTATURA", ylab = "PESO", col = "blue", pch = 16, main = "Diagrama de DispersiΓ³n ESTATURA vs PESO")
abline(v = mean(x), lwd = 2, lty = 2, col = "red")
abline(h = mean(y), lwd = 2, lty = 2, col = "red")ππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ πππ§ͺππ»β¨π§ ππ¬βοΈππ»ππ§ͺππ»β¨π§ π