📊
Semana 7 · Mi página web en Estadística
Curso de Estadística y Probabilidad — 2026
Clases N° 28-29 · Laboratorios 7 y 8 — Análisis de datos en R

👤 Danzel Archibold 🏫 UTB 💻 R & RStudio

En estos laboratorios exploramos el conjunto de datos DATOS2026 (cargado desde el archivo Excel 00. DATOS202460ULTIMOS25.xlsx) mediante tablas de frecuencia, gráficos de barras, diagramas circulares, diagramas de caja y polígonos de frecuencia (Laboratorio 7), y luego estudiamos la relación entre variables mediante correlación y regresión lineal (Laboratorio 8).

1 LABORATORIO 7. Análisis de datos en R

1.1 (i) Datos

library(kableExtra)
library(readxl)
DATOS2026 <- read_excel("00. DATOS202460ULTIMOS25.xlsx")
kable(DATOS2026,
      caption = "DATOS2026 - Danzel Archibold") |>
  kable_styling(bootstrap_options = c("striped", "hover"),
                full_width = FALSE,
                position = "center") |>
  row_spec(0, bold = TRUE, color = "white", background = "#4a6fa5")
DATOS2026 - Danzel Archibold
CURSO ASISTENCIA2 ASISTENCIA1 PARCIAL 1 PARCIAL 2 NRC PROGRAMA EDAD PESO ESTATURA SEXO ESTADO_CIVIL ESTRATO URBANO TRANSPORTE GR_SANGUINEO
PROBABILIDAD 100 90 3.6 4.3 2314 F_NEGOCIOS 20 55 160 Femenino SOLTERO (A) II Cartagena Transcaribe O+
ESTADISTICAI 70 75 0.9 2.5 1136 DERECHO 18 80 185 Masculino SOLTERO (A) III Cartegena El bus que me deja mas cerca A+
PROBABILIDAD 85 95 3.9 3.8 2314 F_NEGOCIOS 19 60 158 Femenino SOLTERO (A) III Cartagena Transcaribe O+
PROBABILIDAD 5 5 2.9 0.5 2314 MECANICA 18 72 181 Masculino SOLTERO (A) V Bolivar Particular O+
ESTADISTICAI 20 70 3.7 0.55 1009 PSICOLOGÍA 19 45 163 Femenino SOLTERO (A) II Cartagena Mototaxi O+
ESTADISTICAI 100 100 0.9 2.95 2313 PSICOLOGÍA 20 64 169 Femenino SOLTERO (A) I Cartagena de Indias Transcaribe O+
PROBABILIDAD 50 75 3.7 1.7 1010 C_DATOS 18 50 157 Masculino SOLTERO (A) IV Cartagena Transcaribe A+
PROBABILIDAD 100 95 3 3.3 2314 F_NEGOCIOS 19 50 155 Femenino SOLTERO (A) III Cartagena de Indias Mototaxi A+
ESTADISTICAI 100 100 3.8 3.3 1009 PSICOLOGÍA 18 65 161 Femenino SOLTERO (A) III Bolívar Mototaxi O+
PROBABILIDAD 95 85 3 2.9 2314 SISTEMAS 22 60 161 Masculino SOLTERO (A) I pontezuela El bus que me deja mas cerca A+
ESTADISTICAI 100 100 2 3.3 1136 DERECHO 18 69 174 Masculino SOLTERO (A) I Cartagena Transcaribe O+
PROBABILIDAD 100 85 4.6 3.65 1137 BIOMEDICA 19 54 164 Femenino SOLTERO (A) II Cartagena de Indias Transcaribe O+
PROBABILIDAD 80 95 3.4 3.25 2314 INDUSTRIAL 17 60 153 Femenino SOLTERO (A) II Cartagena Transcaribe O+
PROBABILIDAD 90 90 4 3.8 1010 C_DATOS 17 71 170 Masculino SOLTERO (A) I Cartagena Transcaribe O+
PROBABILIDAD 100 90 3.6 4 2314 SISTEMAS 19 52 174 Masculino SOLTERO (A) IV Cartagena Transcaribe O+
ESTADISTICAI 70 85 1.4 2.6 1136 DERECHO 20 78 170 Masculino SOLTERO (A) IV CARTAGENA Taxi O+
PROBABILIDAD 90 95 4.2 4.15 2314 SISTEMAS 20 67 160 Masculino SOLTERO (A) III Cartagena Transcaribe B+
PROBABILIDAD 80 75 2.3 2.35 2314 ECONOMIA 19 65 172 Masculino SOLTERO (A) NA cartagena Mototaxi O+
PROBABILIDAD 85 95 4.4 4.6 2314 SISTEMAS 19 49 158 Femenino SOLTERO (A) I Cartagena Transcaribe O+
PROBABILIDAD 90 100 2.2 2.65 1010 F_NEGOCIOS 21 69 180 Masculino SOLTERO (A) V Cartagena Taxi O+
PROBABILIDAD 100 100 3.5 3.85 1010 MECATRONICA 18 77 175 Masculino SOLTERO (A) II Cartagena Transcaribe O+
PROBABILIDAD 100 95 2 4.35 2314 SISTEMAS 19 75 173 Masculino SOLTERO (A) I Cartagena Transcaribe O-
PROBABILIDAD 100 95 1.6 2.9 2314 SISTEMAS 19 59 166 Masculino SOLTERO (A) II Turbaco El bus que me deja mas cerca O+
PROBABILIDAD 100 95 3.9 4.25 2314 SISTEMAS 19 102 179 Masculino SOLTERO (A) II Turbaco El bus que me deja mas cerca O+
PROBABILIDAD 100 100 4.4 4.65 1010 MECANICA 18 70 178 Masculino SOLTERO (A) III cartagena Mototaxi O+
ESTADISTICAI 85 75 2.5 3.1 2313 PSICOLOGÍA 19 82 175 Masculino SOLTERO (A) II Bolivar Transcaribe A+
PROBABILIDAD 90 90 3 3.75 2314 SISTEMAS 20 88 175 Masculino SOLTERO (A) III Cartagena Transcaribe A+
ESTADISTICAI 100 100 3.6 3.65 2313 PSICOLOGÍA 17 67 169 Masculino SOLTERO (A) II Bolívar Mototaxi A+
PROBABILIDAD 90 65 3.2 1.8 1010 F_NEGOCIOS 22 73 180 Masculino SOLTERO (A) CON HIJOS IV Cartagena Mototaxi B+
PROBABILIDAD 100 85 4.2 4.1 1010 SISTEMAS 18 65 170 Masculino SOLTERO (A) I Bolivar Transcaribe B+
PROBABILIDAD 100 90 1.9 3.3 2314 F_NEGOCIOS 19 48 166 Femenino SOLTERO (A) III Turbaco Particular O+
ESTADISTICAI 80 60 2 2.9 1136 DERECHO 18 55 160 Femenino SOLTERO (A) IV Parque Heredia Taxi O+
PROBABILIDAD 100 95 4.8 3.7 1010 MECATRONICA 18 70 175 Masculino SOLTERO (A) I Zaragocilla El bus que me deja mas cerca A+
ESTADISTICAI 100 85 2.6 3 1136 PSICOLOGÍA 17 50 165 Masculino SOLTERO (A) III cartagena Transcaribe O+
PROBABILIDAD 100 80 2.7 3.75 2314 NAVAL 17 80 192 Masculino SOLTERO (A) II cartagena de indias , bolivar Particular O+
ESTADISTICAI 70 75 2.5 3.05 1136 DERECHO 18 62 164 Femenino SOLTERO (A) II Cartagena Transcaribe O+
ESTADISTICAI 100 65 1.8 2.25 1009 C_SOCIAL 21 62 167 Femenino SOLTERO (A) III Cartagena Transcaribe B+
ESTADISTICAI 90 100 3.3 2.95 1136 DERECHO 18 53 154 Femenino SOLTERO (A) III Cartagena de indias Mototaxi A+
PROBABILIDAD 90 90 1.8 3.7 2314 QUIMICA 18 55 167 Femenino SOLTERO (A) I El Carmen de Bolívar Mototaxi A+
PROBABILIDAD 90 75 3.5 3.75 1010 F_NEGOCIOS 18 67 173 Femenino SOLTERO (A) IV Cartagena Transcaribe B+
ESTADISTICAI 100 80 1 3.1 2313 PSICOLOGÍA 18 42 155 Femenino SOLTERO (A) I Barranco de loba Transcaribe A+
PROBABILIDAD 100 85 3.1 3.65 1010 F_NEGOCIOS 19 48 166 Femenino SOLTERO (A) II Cartagena Transcaribe O+
PROBABILIDAD 90 95 3.3 3.35 1010 F_NEGOCIOS 18 56 160 Femenino SOLTERO (A) V Cartagena Particular B+
PROBABILIDAD 70 75 2.8 3 1010 C_DATOS 17 70 163 Femenino SOLTERO (A) II Cartagena Mototaxi O+
ESTADISTICAI 80 85 2.9 3.1 1009 PSICOLOGÍA 18 65 174 Masculino CASADO (A) IV Bolivar Transcaribe O+
PROBABILIDAD 55 80 2.3 0.55 2314 F_NEGOCIOS 19 76 168 Femenino SOLTERO (A) I Pontezuela El bus que me deja mas cerca O+
PROBABILIDAD 90 100 3 3.3 1010 F_NEGOCIOS 18 50 158 Femenino SOLTERO (A) III Cartagena Taxi A+
PROBABILIDAD 90 100 2.6 2.85 1137 ELECTRICA 21 50 155 Femenino SOLTERO (A) II Turbaco/Bolivar El bus que me deja mas cerca A+
PROBABILIDAD 100 100 2.8 2.45 1137 BIOMEDICA 18 62 168 Femenino SOLTERO (A) III Bolívar Taxi O+
PROBABILIDAD 100 100 4 3.15 1010 INDUSTRIAL 19 58 164 Femenino SOLTERO (A) V Cartagena (barrio: pie de la popa) Transcaribe O+
ESTADISTICAI 90 85 1.5 3.45 1009 C_SOCIAL 18 50 178 Masculino SOLTERO (A) III Bolívar Transcaribe O+
ESTADISTICAI 90 90 2.4 3.3 1009 PSICOLOGÍA 21 65 164 Femenino SOLTERO (A) II Boquilla Transcaribe O+
ESTADISTICAI 100 100 2.9 3.1 1009 C_SOCIAL 18 57 164 Femenino SOLTERO (A) III San José de los campanos Particular O+
PROBABILIDAD 100 90 1.3 3.15 2314 INDUSTRIAL 19 53 175 Femenino SOLTERO (A) II bolivar Mototaxi O+
ESTADISTICAI 70 75 2.7 2.2 1136 DERECHO 17 78 180 Masculino SOLTERO (A) III Cartagena Transcaribe O+
PROBABILIDAD 100 100 4.2 3.85 1010 MECANICA 18 80 187 Masculino SOLTERO (A) II Cartagena Mototaxi O-
PROBABILIDAD 100 95 4.9 4.1 2314 SISTEMAS 19 64 172 Masculino SOLTERO (A) III Cartagena Transcaribe B+
PROBABILIDAD 100 100 4 4.4 1010 INDUSTRIAL 18 60 177 Femenino SOLTERO (A) II Turbaco Particular O+
ESTADISTICAI 100 80 1.6 3.3 1009 C_SOCIAL 19 72 169 Femenino SOLTERO (A) II Turbaco Particular A+
ESTADISTICAI 80 85 2.8 2.55 1136 DERECHO 18 60 159 Femenino SOLTERO (A) II Cartagena Transcaribe A+
PROBABILIDAD 75 75 3.3 2.5 2314 CIVIL 18 55 165 Masculino SOLTERO (A) II Cartagena Transcaribe O+
ESTADISTICAI 60 90 1.9 0.6 1009 C_SOCIAL 20 90 186 Masculino SOLTERO (A) IV Bolibar Cartagena Transcaribe O+
PROBABILIDAD 100 65 2.6 3.15 1137 MECANICA 18 63 170 Masculino SOLTERO (A) I Cartagena Transcaribe A+
PROBABILIDAD 90 45 4 3.4 1010 F_NEGOCIOS 18 61 163 Femenino SOLTERO (A) V Cartagena Particular A+
PROBABILIDAD 85 95 2.3 2.8 2314 F_NEGOCIOS 18 70 172 Femenino SOLTERO (A) II Arjona El bus que me deja mas cerca O+
ESTADISTICAI 90 90 2 3.1 1136 DERECHO 19 48 167 Femenino SOLTERO (A) IV Cartagena Particular O+
PROBABILIDAD 100 90 3.1 3.25 1010 F_NEGOCIOS 19 57 154 Femenino SOLTERO (A) II Bolivar Transcaribe O+
PROBABILIDAD 100 95 1.5 2.95 1137 CONTADURIA 18 60 170 Femenino SOLTERO (A) II Turbaco El bus que me deja mas cerca O+
PROBABILIDAD 90 100 1.3 3.5 1010 ELECTRICA 22 70 163 Femenino SOLTERO (A) I Turbaco Mototaxi O+
PROBABILIDAD 90 90 2.3 2.1 2314 F_NEGOCIOS 18 59 176 Femenino SOLTERO (A) IV Bolivar Transcaribe B+
PROBABILIDAD 85 95 2 3.1 2314 F_NEGOCIOS 18 60 171 Femenino SOLTERO (A) II Cartagena Transcaribe O+
ESTADISTICAI 65 75 1.7 2.95 1136 DERECHO 20 55 164 Femenino SOLTERO (A) III Cartagena Mototaxi A+
ESTADISTICAI 100 100 2.3 3.2 2313 PSICOLOGÍA 19 67 171 Femenino SOLTERO (A) I El rodeo Mototaxi A+
ESTADISTICAI 100 100 3.8 3.1 1136 DERECHO 18 60 165 Femenino SOLTERO (A) I Villa de la cruz El bus que me deja mas cerca A+
Paso 4

1.2 2i Usando la aplicación para hacer la tabla

table_sexo<-table(DATOS2026$SEXO)
tabla_bonita(table_sexo, cols = c("SEXO", "Frecuencia"))
SEXO Frecuencia
Femenino 42
Masculino 32
Paso 5

1.3 3i Gráfico de torta para SEXO

colores <- c("#F7D9C4", "#B8E0D2")
porc <- round(prop.table(table_sexo) * 100, 1)
etiquetas <- paste0(names(table_sexo), "\n", table_sexo, " (", porc, "%)")

pie_1 <- pie(
  table_sexo,
  col = colores,
  labels = etiquetas,
  border = "white",
  lwd = 3,
  radius = 0.95,
  clockwise = TRUE,
  init.angle = 90,
  cex = 1.1,
  main = "Estudio de Pastel.\nDistribución por sexos - Danzel Archibold.",
  col.main = "#2c3e50"
)

Paso 6

1.4 4i Construimos el diagrama de barras y el diagrama de Pastel para esta variable cualitativa

barp <- barplot(table_sexo,
                col = c("#F7D9C4", "#B8E0D2"),
                border = "white",
                main = "Gráfico de Barras - Danzel Archibold",
                sub = "UTB",
                xlab = "SEXO",
                ylab = "Conteo",
                ylim = c(0, max(table_sexo) * 1.2),
                las = 1)

text(barp, table_sexo, labels = table_sexo,
     pos = 3, cex = 1.2, font = 2)

Paso 7

1.5 5i Usando la aplicación para hacer la tabla porcentual redondeando al entero mas cercano

table_sexo2<-round(table(DATOS2026$SEXO)/74*100)
tabla_bonita(table_sexo2, cols = c("SEXO", "Porcentaje (%)"))
SEXO Porcentaje (%)
Femenino 57
Masculino 43
Paso 8

1.6 6i Construimos el diagrama de barras % y da pastel para esta variable cualitativa

barp2 <- barplot(table_sexo2,
                 col = c("#F7D9C4", "#B8E0D2"),
                 border = "white",
                 main = "Gráfico de Barras - Danzel Archibold",
                 sub = "UTB",
                 xlab = "SEXO",
                 ylab = "Porcentaje",
                 ylim = c(0, max(table_sexo2) * 1.2),
                 las = 1)

text(barp2, table_sexo2, labels = paste0(table_sexo2, "%"),
     pos = 3, cex = 1.2, font = 2)

Paso 9

1.7 7i Las tablas de frecuencias y las representaciones gráficas son dos maneras equivalentes de presentar la información. Las dos exponen ordenadamente la información recogida en una muestra

pie_1 <- pie(table_sexo2,
             col = c("#F7D9C4", "#B8E0D2"),
             labels = paste0(names(table_sexo2), "\n", table_sexo2, "%"),
             border = "white",
             lwd = 3,
             clockwise = TRUE,
             init.angle = 90,
             main = "Estudio de Pastel.\nDistribución por sexos - Danzel Archibold.")

Paso 10

1.8 8i Usando la aplicación para hacer la tabla con dos varibles SEXO y CURSO

table_3<-table(DATOS2026$SEXO, DATOS2026$CURSO)
tabla_bonita(table_3)
ESTADISTICAI PROBABILIDAD
Femenino 16 26
Masculino 10 22
Paso 11

1.9 9i Usando la aplicación para hacer el gráfico con dos varibles SEXO y CURSO

barp3 <- barplot(table_3, beside = TRUE,
                 col = c("#F7D9C4", "#B8E0D2"), border = "white",
                 main = "Gráfico de barras CURSO vs SEXO - Danzel Archibold",
                 xlab = "CURSO", ylab = "Frecuencia",
                 ylim = c(0, max(table_3) * 1.25), las = 1,
                 legend.text = rownames(table_3),
                 args.legend = list(x = "topright", bty = "n", border = "white"))
text(barp3, table_3, labels = table_3, pos = 3, cex = 1.1, font = 2)

Paso 12

1.10 10i Usando la aplicación para hacer la tabla con dos varibles SEXO y CURSO pero usando las frecuencias relativas aproximadas

table_4<-round(table(DATOS2026$SEXO, DATOS2026$CURSO)/74*100)
tabla_bonita(table_4)
ESTADISTICAI PROBABILIDAD
Femenino 22 35
Masculino 14 30
Paso 13

1.11 11i Usando la aplicación para hacer el gráfico con dos varibles SEXO y CURSO pero usando las frecuencias relativas aproximadas

barp4 <- barplot(table_4, beside = TRUE,
                 col = c("#F7D9C4", "#B8E0D2"), border = "white",
                 main = "Gráfico de barras CURSO vs SEXO en porcentajes - Danzel Archibold",
                 xlab = "CURSO", ylab = "Porcentaje",
                 ylim = c(0, max(table_4) * 1.25), las = 1,
                 legend.text = rownames(table_4),
                 args.legend = list(x = "topright", bty = "n", border = "white"))
text(barp4, table_4, labels = paste0(table_4, "%"), pos = 3, cex = 1.1, font = 2)

Paso 14

1.12 12i Usando la aplicación para hacer la tabla con dos varibles SEXO y CURSO

table_5<-table(DATOS2026$ESTRATO, DATOS2026$CURSO)
tabla_bonita(table_5)
ESTADISTICAI PROBABILIDAD
I 5 10
II 7 18
III 9 9
IV 5 5
V 0 5
Paso 15

1.13 13i Usando la aplicación para hacer el gráfico con dos varibles SEXO y CURSO

barp3 <- barplot(table_5, beside = TRUE,
                 col = colorRampPalette(c("#F7D9C4", "#B8E0D2"))(nrow(table_5)), border = "white",
                 main = "Gráfico de barras CURSO vs ESTRATO - Danzel Archibold",
                 xlab = "CURSO", ylab = "Frecuencia",
                 ylim = c(0, max(table_5) * 1.25), las = 1,
                 legend.text = rownames(table_5),
                 args.legend = list(x = "topright", bty = "n", title = "ESTRATO"))
text(barp3, table_5, labels = table_5, pos = 3, cex = 0.9, font = 2)

Paso 16

1.14 14i Usando la aplicación para hacer la tabla con dos varibles SEXO y CURSO

table_6<-table(DATOS2026$ESTRATO, DATOS2026$SEXO)
tabla_bonita(table_6)
Femenino Masculino
I 8 7
II 17 8
III 10 8
IV 4 6
V 3 2
Paso 17

1.15 15i Usando la aplicación para hacer el gráfico con dos varibles SEXO y CURSO

barp3 <- barplot(table_6, beside = TRUE,
                 col = colorRampPalette(c("#F7D9C4", "#B8E0D2"))(nrow(table_6)), border = "white",
                 main = "Gráfico de barras SEXO vs ESTRATO - Danzel Archibold",
                 xlab = "SEXO", ylab = "Frecuencia",
                 ylim = c(0, max(table_6) * 1.25), las = 1,
                 legend.text = rownames(table_6),
                 args.legend = list(x = "topright", bty = "n", title = "ESTRATO"))
text(barp3, table_6, labels = table_6, pos = 3, cex = 0.9, font = 2)

Paso 18

1.16 16i Tabla de Frecuencias Usando el paquete summarytools: observamos ya una tabla mas completa

library(summarytools)
Warning in fun(libname, pkgname): couldn't connect to display ":0"
system might not have X11 capabilities; in case of errors when using dfSummary(), set st_options(use.x11 = FALSE)
tabla_8 <- freq(DATOS2026$EDAD)
print(tabla_8, method = "render", headings = FALSE, bootstrap.css = FALSE)
Valid Total
EDAD Freq % % Cum. % % Cum.
17 7 9.46 9.46 9.46 9.46
18 32 43.24 52.70 43.24 52.70
19 21 28.38 81.08 28.38 81.08
20 7 9.46 90.54 9.46 90.54
21 4 5.41 95.95 5.41 95.95
22 3 4.05 100.00 4.05 100.00
<NA> 0 0.00 100.00
Total 74 100.00 100.00 100.00 100.00

Generated by summarytools 1.1.5 (R version 4.6.1)
2026-10-01

Paso 19

1.17 17i Tabla de Frecuencias Usando el paquete summarytools: observamos ya una tabla mas completa

library(summarytools)
summary(DATOS2026$EDAD)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   17.0    18.0    18.0    18.7    19.0    22.0 
Paso 20

1.18 18i Una primera vista del diagrama de caja para la variable Edad

boxplot(DATOS2026$EDAD, horizontal = TRUE, col = "#B8E0D2", border = "#2c3e50",
        main = "Diagrama de caja - EDAD - Danzel Archibold", xlab = "EDAD", boxwex = 0.6)

Paso 21

1.19 19i Identificamos donde queda la mediana

boxplot(DATOS2026$EDAD, notch = TRUE, horizontal = TRUE,
        col = "#B8E0D2", border = "#2c3e50",
        main = "Diagrama de caja con muesca - EDAD - Danzel Archibold",
        xlab = "EDAD", boxwex = 0.6)
Warning in (function (z, notch = FALSE, width = NULL, varwidth = FALSE, : some
notches went outside hinges ('box'): maybe set notch=FALSE

Paso 22

1.20 20i EDAD vs SEXO

boxplot(EDAD ~ SEXO, data = DATOS2026, horizontal = TRUE,
        col = c("#F7D9C4", "#B8E0D2"), border = "#2c3e50",
        main = "EDAD vs SEXO - Danzel Archibold", xlab = "EDAD", ylab = "", las = 1)

Paso 23

1.21 21i EDAD vs ESTRATO

n_est <- length(unique(DATOS2026$ESTRATO))
boxplot(EDAD ~ ESTRATO, data = DATOS2026, horizontal = TRUE,
        col = colorRampPalette(c("#F7D9C4", "#B8E0D2"))(n_est), border = "#2c3e50",
        main = "EDAD vs ESTRATO - Danzel Archibold", xlab = "EDAD", ylab = "ESTRATO", las = 1)

Paso 24

1.22 22i EDAD vs ESTRATO vs SEXO

library(ggplot2)
ggplot(DATOS2026, aes(x = ESTRATO, y = EDAD, fill = SEXO)) +
  geom_boxplot(color = "#2c3e50", alpha = 0.9) +
  scale_fill_manual(values = c("Femenino" = "#F7D9C4", "Masculino" = "#B8E0D2")) +
  scale_x_discrete(labels = abbreviate, name = "ESTRATO") +
  scale_y_continuous(name = "EDAD") +
  labs(title = "EDAD vs ESTRATO vs SEXO - Danzel Archibold") +
  theme_minimal(base_size = 13) +
  theme(plot.title = element_text(face = "bold", color = "#2c3e50", hjust = 0.5),
        legend.position = "top")

Paso 25

1.23 23i Estudiemos la variable ESTATURA y obtengamos sus seis medidas representativas

summary(DATOS2026$ESTATURA)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  153.0   163.0   168.0   168.4   174.0   192.0 
Paso 26

1.24 24i Una primera vista del diagrama de caja para la variable ESTATURA

boxplot(DATOS2026$ESTATURA, horizontal = TRUE, col = "#B8E0D2", border = "#2c3e50",
        main = "Diagrama de caja - ESTATURA - Danzel Archibold", xlab = "ESTATURA", boxwex = 0.6)

Paso 27

1.25 25i Identificamos donde queda la mediana

boxplot(DATOS2026$ESTATURA, notch = TRUE, horizontal = TRUE,
        col = "#B8E0D2", border = "#2c3e50",
        main = "Diagrama de caja con muesca - ESTATURA - Danzel Archibold",
        xlab = "ESTATURA", boxwex = 0.6)

Paso 28

1.26 26i EDAD vs SEXO

boxplot(ESTATURA ~ SEXO, data = DATOS2026, horizontal = TRUE,
        col = c("#F7D9C4", "#B8E0D2"), border = "#2c3e50",
        main = "ESTATURA vs SEXO - Danzel Archibold", xlab = "ESTATURA", ylab = "", las = 1)

Paso 29

1.27 27i EDAD vs ESTRATO

n_est <- length(unique(DATOS2026$ESTRATO))
boxplot(ESTATURA ~ ESTRATO, data = DATOS2026, horizontal = TRUE,
        col = colorRampPalette(c("#F7D9C4", "#B8E0D2"))(n_est), border = "#2c3e50",
        main = "ESTATURA vs ESTRATO - Danzel Archibold", xlab = "ESTATURA", ylab = "ESTRATO", las = 1)

Paso 30

1.28 28i ESTATURA vs ESTRATO vs SEXO

library(ggplot2)
ggplot(DATOS2026, aes(x = ESTRATO, y = ESTATURA, fill = SEXO)) +
  geom_boxplot(color = "#2c3e50", alpha = 0.9) +
  scale_fill_manual(values = c("Femenino" = "#F7D9C4", "Masculino" = "#B8E0D2")) +
  scale_x_discrete(labels = abbreviate, name = "ESTRATO") +
  scale_y_continuous(name = "ESTATURA") +
  labs(title = "ESTATURA vs ESTRATO vs SEXO - Danzel Archibold") +
  theme_minimal(base_size = 13) +
  theme(plot.title = element_text(face = "bold", color = "#2c3e50", hjust = 0.5),
        legend.position = "top")

Paso 31

1.29 29i Histograma y tabla de frecuencias usando Regla de Sturges

1.29.0.0.1 Usando la libreria “agricolae”
library(agricolae)
h2 <- graph.freq(DATOS2026$EDAD, col = "#B8E0D2", border = "white",
                 main = "Histograma de EDAD (Regla de Sturges) - Danzel Archibold",
                 xlab = "EDAD", ylab = "Frecuencia")

Paso 32

1.30 30i Tabla de fecuencias agrupadas Regla de Sturges

1.30.0.0.1 Usando la libreria “agricolae”
summary(h2)
Paso 33

1.31 31i Polígono de frecuencia absolutas

1.31.0.0.0.1 frequency : counts (1) and relative (2)
plot(h2, col = "#B8E0D2", border = "white", frequency = 1,
     main = "Polígono de frecuencias absolutas - Danzel Archibold",
     xlab = "EDAD", ylab = "Frecuencia")
polygon.freq(h2, col = "#C0392B", frequency = 1, lwd = 2)

Paso 34

1.32 32i Polígono de frecuencia relativas

1.32.0.0.0.1 frequency : counts (1) and relative (2)
plot(h2, col = "#B8E0D2", border = "white", frequency = 2,
     main = "Polígono de frecuencias relativas - Danzel Archibold",
     xlab = "EDAD", ylab = "Frecuencia relativa")
polygon.freq(h2, col = "#C0392B", frequency = 2, lwd = 2)

Paso 35

1.33 33i Ojivas - usando R

fr_por_clase2<-h2$counts
fr_por_clase2
[1]  7 32 21  0  7  4  0  3
total_n2<-sum(h2$counts)
total_n2
[1] 74
fr_relativos2<-fr_por_clase2/total_n2
fr_porcentuales2<-100*fr_relativos2
fr_porcentuales2
[1]  9.459459 43.243243 28.378378  0.000000  9.459459  5.405405  0.000000
[8]  4.054054
cumsum(fr_por_clase2)
[1]  7 39 60 60 67 71 71 74
cumsum(fr_relativos2)
[1] 0.09459459 0.52702703 0.81081081 0.81081081 0.90540541 0.95945946 0.95945946
[8] 1.00000000
cumsum(fr_porcentuales2)
[1]   9.459459  52.702703  81.081081  81.081081  90.540541  95.945946  95.945946
[8] 100.000000
Paso 36

1.34 34i Ojivas - frecuencias porcentuales

p4 <- cumsum(fr_porcentuales2)
plot(h2$breaks, c(0, p4), type = "b", pch = 19,
     col = "#C0392B", lwd = 2, las = 1, ylim = c(0, 100),
     main = "Ojiva de frecuencias porcentuales acumuladas - Danzel Archibold",
     xlab = "EDAD", ylab = "Porcentaje acumulado (%)")
grid(col = "gray85", lty = "dotted")

Paso 37

2 LABORATORIO 8. Variables relacionadas

En este laboratorio estudiamos la relación entre variables: tablas y gráficos bivariados, diagramas de dispersión, correlación y regresión lineal simple, cerrando con un problema de aplicación y un conjunto de datos externo (EdadPesoGrasas.txt).

2.1 35i Algunas tablas bivariadas - Contamos Sexo vs Curso, ambas cualitativas

table_bv1 <- table(DATOS2026$SEXO, DATOS2026$CURSO)
tabla_bonita(table_bv1)
ESTADISTICAI PROBABILIDAD
Femenino 16 26
Masculino 10 22
Paso 38

2.2 36i Algunas tablas bivariadas - Diagrama de barras Sexo vs Curso

barp_bv1 <- barplot(table_bv1, beside = TRUE,
                    col = c("#F7D9C4", "#B8E0D2"), border = "white",
                    main = "Gráfico de barras CURSO vs SEXO - Danzel Archibold",
                    xlab = "CURSO", ylab = "Frecuencia",
                    ylim = c(0, max(table_bv1) * 1.25), las = 1,
                    legend.text = rownames(table_bv1),
                    args.legend = list(x = "topright", bty = "n", border = "white"))
text(barp_bv1, table_bv1, labels = table_bv1, pos = 3, cex = 1.1, font = 2)

Paso 39

2.3 37i Algunas tablas bivariadas - Estrato vs Curso

table_bv2 <- table(DATOS2026$ESTRATO, DATOS2026$CURSO)
tabla_bonita(table_bv2)
ESTADISTICAI PROBABILIDAD
I 5 10
II 7 18
III 9 9
IV 5 5
V 0 5
barp_bv2 <- barplot(table_bv2, beside = TRUE,
                    col = colorRampPalette(c("#F7D9C4", "#B8E0D2"))(nrow(table_bv2)), border = "white",
                    main = "Gráfico de barras CURSO vs ESTRATO - Danzel Archibold",
                    xlab = "CURSO", ylab = "Frecuencia",
                    ylim = c(0, max(table_bv2) * 1.25), las = 1,
                    legend.text = rownames(table_bv2),
                    args.legend = list(x = "topright", bty = "n", title = "ESTRATO"))
text(barp_bv2, table_bv2, labels = table_bv2, pos = 3, cex = 0.9, font = 2)

Paso 40

2.4 38i Una variable cualitativa y otra cuantitativa: boxplot EDAD vs SEXO

boxplot(EDAD ~ SEXO, data = DATOS2026, horizontal = TRUE,
        col = c("#F7D9C4", "#B8E0D2"), border = "#2c3e50",
        main = "EDAD vs SEXO - Danzel Archibold", xlab = "EDAD", ylab = "", las = 1)

Paso 41

2.5 39i Una variable cualitativa y otra cuantitativa: boxplot EDAD vs ESTRATO

n_est <- length(unique(DATOS2026$ESTRATO))
boxplot(EDAD ~ ESTRATO, data = DATOS2026, horizontal = TRUE,
        col = colorRampPalette(c("#F7D9C4", "#B8E0D2"))(n_est), border = "#2c3e50",
        main = "EDAD vs ESTRATO - Danzel Archibold", xlab = "EDAD", ylab = "ESTRATO", las = 1)

Paso 42

2.6 40i Una variable cualitativa y otra cuantitativa: boxplot ESTATURA vs SEXO

boxplot(ESTATURA ~ SEXO, data = DATOS2026, horizontal = TRUE,
        col = c("#F7D9C4", "#B8E0D2"), border = "#2c3e50",
        main = "ESTATURA vs SEXO - Danzel Archibold", xlab = "ESTATURA", ylab = "", las = 1)

Paso 43

2.7 41i Dos variables cuantitativas: diagrama de dispersión ESTATURA vs PESO

x <- DATOS2026$ESTATURA
y <- DATOS2026$PESO
plot(x, y, xlab = "ESTATURA", ylab = "PESO", col = "#47627A", pch = 19,
     main = "ESTATURA vs PESO - Danzel Archibold")
mean(x)
[1] 168.3919
mean(y)
[1] 63.32432
# líneas punteadas en los valores medios
abline(v = mean(x), lwd = 2, lty = 2, col = "#64748b")
abline(h = mean(y), lwd = 2, lty = 2, col = "#64748b")

Paso 44

2.8 42i Recta de regresión lineal simple (PESO en función de ESTATURA)

regresion1 <- lm(y ~ x, data = DATOS2026)
regresion1

Call:
lm(formula = y ~ x, data = DATOS2026)

Coefficients:
(Intercept)            x  
   -84.1267       0.8756  
Paso 45

2.9 43i Recta de regresión lineal simple (ESTATURA en función de PESO)

regresion2 <- lm(x ~ y, data = DATOS2026)
regresion2

Call:
lm(formula = x ~ y, data = DATOS2026)

Coefficients:
(Intercept)            y  
   137.0763       0.4945  
Paso 46

2.10 45i Recta de regresión lineal simple

2.10.0.1 Haciendo uso de RStudio con la función summary

summary(regresion2)

Call:
lm(formula = x ~ y, data = DATOS2026)

Residuals:
     Min       1Q   Median       3Q      Max 
-13.7479  -4.6462  -0.2041   4.1066  16.1973 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 137.07631    4.28941  31.957  < 2e-16 ***
y             0.49453    0.06669   7.416 1.88e-10 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 6.47 on 72 degrees of freedom
Multiple R-squared:  0.433, Adjusted R-squared:  0.4252 
F-statistic: 54.99 on 1 and 72 DF,  p-value: 1.881e-10
Paso 47

2.11 46i Diagrama de dispersión y recta de regresión

x <- DATOS2026$ESTATURA
y <- DATOS2026$PESO

plot(x, y, xlab = "ESTATURA", ylab = "PESO", col = "#47627A", pch = 19,
     main = "y_ajus = -13.2018 + 0.4552x, r = 0.4352732 - Danzel Archibold")
abline(v = mean(x), lwd = 2, lty = 2, col = "#64748b")
abline(h = mean(y), lwd = 2, lty = 2, col = "#64748b")

# modelo de regresión lineal e intercepto/pendiente ajustados
regresion1 <- lm(y ~ x, data = DATOS2026)
a <- -13.20178  # Intercepto
b <- 0.4552     # Pendiente

abline(a = a, b = b, col = "#9B6B78", lwd = 2)

Paso 48

2.12 Problema de aplicación

En la siguiente base de datos se encuentran consignados los pesos y estaturas de 50 estudiantes seleccionados al azar de un grupo de Estudiantes de Estadística I de la UTB. Complete el siguiente formulario de preguntas.

2.12.1 a Datos

taller_rl <- data.frame(
  x = c(88, 77, 68, 80, 68, 55, 89, 61, 72, 72, 79, 75, 68, 65, 70, 52, 78, 55, 96, 75, 44, 57, 60, 50, 93),
  y = c(175, 183, 158, 165, 175, 160, 160, 156, 174, 171, 160, 184, 163, 176, 167, 172, 168, 167, 181, 175, 153, 154, 169, 168, 187)
)
Paso 49

2.12.2 b Diagrama de dispersión

plot(taller_rl$x, taller_rl$y, xlab = "PESO", ylab = "ESTATURA", col = "#47627A", pch = 19)
mean(taller_rl$x)
[1] 69.88
mean(taller_rl$y)
[1] 168.84
abline(v = mean(taller_rl$x), lwd = 2, lty = 2, col = "#64748b")
abline(h = mean(taller_rl$y), lwd = 2, lty = 2, col = "#64748b")

Paso 50

2.12.3 51i Coeficiente de correlación de Pearson

cor(taller_rl$x, taller_rl$y)
[1] 0.5133798

Se concluye que existe una cierta relación lineal entre la estatura y el peso.

Paso 51

2.12.4 d Recta de regresión lineal simple

regresion3 <- lm(taller_rl$y ~ taller_rl$x, data = taller_rl)
regresion3

Call:
lm(formula = taller_rl$y ~ taller_rl$x, data = taller_rl)

Coefficients:
(Intercept)  taller_rl$x  
   143.9296       0.3565  

2.12.5 e Recta de regresión lineal simple

2.12.5.1 Haciendo uso de RStudio con la función summary

summary(regresion3)

Call:
lm(formula = taller_rl$y ~ taller_rl$x, data = taller_rl)

Residuals:
    Min      1Q  Median      3Q     Max 
-15.656  -6.614   1.404   6.247  13.335 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 143.9296     8.8404  16.281 4.06e-14 ***
taller_rl$x   0.3565     0.1242   2.869  0.00867 ** 
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 8.315 on 23 degrees of freedom
Multiple R-squared:  0.2636,    Adjusted R-squared:  0.2315 
F-statistic: 8.231 on 1 and 23 DF,  p-value: 0.008673
plot(taller_rl$x, taller_rl$y, xlab = "PESO", ylab = "ESTATURA", col = "#47627A", pch = 19)
abline(v = mean(taller_rl$x), lwd = 2, lty = 2, col = "#64748b")
abline(h = mean(taller_rl$y), lwd = 2, lty = 2, col = "#64748b")

# intercepto y pendiente ajustados
a <- 143.9296  # Intercepto
b <- 0.3565    # Pendiente

abline(a = a, b = b, col = "#9B6B78", lwd = 2)

Paso 52

2.13 52i Datos del fichero EdadPesoGrasas.txt

Los datos corresponden a tres variables medidas en 25 individuos: edad, peso y cantidad de grasas en sangre.

grasas <- read.table('http://verso.mat.uam.es/~joser.berrendero/datos/EdadPesoGrasas.txt', header = TRUE)
names(grasas)
[1] "peso"   "edad"   "grasas"
Paso 53

2.14 53i Matriz de diagramas de dispersión

pairs(grasas)

Paso 54

2.15 54i Matriz de correlación

tabla_bonita(round(cor(grasas), 3))
peso edad grasas
peso 1.000 0.240 0.265
edad 0.240 1.000 0.837
grasas 0.265 0.837 1.000
Paso 55

2.16 55i Cálculo de la recta de mínimos cuadrados

regresion <- lm(grasas ~ edad, data = grasas)
summary(regresion)

Call:
lm(formula = grasas ~ edad, data = grasas)

Residuals:
    Min      1Q  Median      3Q     Max 
-63.478 -26.816  -3.854  28.315  90.881 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 102.5751    29.6376   3.461  0.00212 ** 
edad          5.3207     0.7243   7.346 1.79e-07 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 43.46 on 23 degrees of freedom
Multiple R-squared:  0.7012,    Adjusted R-squared:  0.6882 
F-statistic: 53.96 on 1 and 23 DF,  p-value: 1.794e-07
Paso 56

2.17 56i Representación gráfica de la recta de mínimos cuadrados

plot(grasas$edad, grasas$grasas, xlab = "Edad", ylab = "Grasas",
     col = "#47627A", pch = 19)
abline(regresion, col = "#9B6B78", lwd = 2)

Paso 57

2.18 57i Predicción con la recta de mínimos cuadrados

Usamos la recta de mínimos cuadrados para predecir la cantidad de grasas para individuos de edades 30, 31, 32, …, 50.

nuevas.edades <- data.frame(edad = seq(30, 50))
predict(regresion, nuevas.edades)
       1        2        3        4        5        6        7        8 
262.1954 267.5161 272.8368 278.1575 283.4781 288.7988 294.1195 299.4402 
       9       10       11       12       13       14       15       16 
304.7608 310.0815 315.4022 320.7229 326.0435 331.3642 336.6849 342.0056 
      17       18       19       20       21 
347.3263 352.6469 357.9676 363.2883 368.6090 

↑