library(readxl)
DATOS2026 <- read_excel("00. DATOS202460ULTIMOS25.xlsx")
DATOS2026
📊
<div class="hero-title">Mi curso de Estadística y Probabilidad - 2026</div>
<div class="hero-subtitle">Semana 7 · Clase N° 28 · Laboratorio 7 - Análisis de datos en R</div>

1 MI CURSO DE ESTADÍSTICA Y PROBABILIDAD - 2026

2 SEMANA 7. Mi página Web en Estadística

3 Clase N° 28. LABORATORIO 7 - ANÁLISIS DE DATOS EN R

3.1 (i) Datos

library(kableExtra)
library(readxl)

kable(DATOS2026, caption = paste("DATOS2026 -", autor)) |>
  kable_styling(bootstrap_options = c("striped", "hover"),
                full_width = FALSE,
                position = "center") |>
  row_spec(0, bold = TRUE, color = "white", background = "#3E7C6B")
DATOS2026 - Diego Alejandro Tous Aponte
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+

3.2 (2i) Usando la aplicación para hacer la tabla

table_sexo <- table(DATOS2026$SEXO)
table_sexo

 Femenino Masculino 
       42        32 

3.3 (3i) Gráfico de torta para SEXO

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

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

3.4 (4i) Construimos el diagrama de barras y el diagrama de Pastel para esta variable cualitativa

barp <- barplot(table_sexo,
                col = paleta2,
                border = "white",
                main = paste("Gráfico de Barras -", autor),
                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)

3.5 (5i) Usando la aplicación para hacer la tabla porcentual redondeando al entero más cercano

table_sexo2 <- round(table(DATOS2026$SEXO) / sum(table_sexo) * 100)
table_sexo2

 Femenino Masculino 
       57        43 

3.6 (6i) Construimos el diagrama de barras % y de pastel para esta variable cualitativa

barp2 <- barplot(table_sexo2,
                 col = paleta2,
                 border = "white",
                 main = paste("Gráfico de Barras -", autor),
                 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)

3.7 (7i) Las tablas de frecuencias y las representaciones gráficas son dos maneras equivalentes de presentar la información

pie(table_sexo2,
    col = paleta2,
    labels = paste0(names(table_sexo2), "\n", table_sexo2, "%"),
    border = "white",
    lwd = 3,
    clockwise = TRUE,
    init.angle = 90,
    main = paste("Estudio de Pastel.\nDistribución por sexos -", autor))

3.8 (8i) Usando la aplicación para hacer la tabla con dos variables SEXO y CURSO

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

3.9 (9i) Usando la aplicación para hacer el gráfico con dos variables SEXO y CURSO

barp3 <- barplot(table_3, beside = TRUE,
                 col = paleta2, border = "white",
                 main = paste("Gráfico de barras CURSO vs SEXO -", autor),
                 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)

3.10 (10i) Usando la aplicación para hacer la tabla con dos variables SEXO y CURSO pero usando las frecuencias relativas aproximadas

table_4 <- round(table(DATOS2026$SEXO, DATOS2026$CURSO) / sum(table_3) * 100)
table_4
           
            ESTADISTICAI PROBABILIDAD
  Femenino            22           35
  Masculino           14           30

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

barp4 <- barplot(table_4, beside = TRUE,
                 col = paleta2, border = "white",
                 main = paste("Gráfico de barras CURSO vs SEXO en porcentajes -", autor),
                 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)

3.12 (12i) Usando la aplicación para hacer la tabla con dos variables ESTRATO y CURSO

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

3.13 (13i) Usando la aplicación para hacer el gráfico con dos variables ESTRATO y CURSO

barp5 <- barplot(table_5, beside = TRUE,
                 col = paleta5[1:nrow(table_5)], border = "white",
                 main = paste("Gráfico de barras CURSO vs ESTRATO -", autor),
                 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(barp5, table_5, labels = table_5, pos = 3, cex = 0.9, font = 2)

3.14 (14i) Usando la aplicación para hacer la tabla con dos variables ESTRATO y SEXO

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

3.15 (15i) Usando la aplicación para hacer el gráfico con dos variables ESTRATO y SEXO

barp6 <- barplot(table_6, beside = TRUE,
                 col = paleta5[1:nrow(table_6)], border = "white",
                 main = paste("Gráfico de barras SEXO vs ESTRATO -", autor),
                 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(barp6, table_6, labels = table_6, pos = 3, cex = 0.9, font = 2)

3.16 (16i) Tabla de Frecuencias Usando el paquete summarytools: observamos ya una tabla más 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)
freq(DATOS2026$EDAD)
Frequencies  
DATOS2026$EDAD  
Type: Numeric  

              Freq   % Valid   % Valid Cum.   % Total   % Total 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

3.17 (17i) Tabla de Frecuencias Usando el paquete summarytools: observamos ya una tabla más completa

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

3.18 (18i) Una primera vista del diagrama de caja para la variable Edad

boxplot(DATOS2026$EDAD, horizontal = TRUE, col = paleta2[2], border = "#2c3e50",
        main = paste("Diagrama de caja - EDAD -", autor), xlab = "EDAD", boxwex = 0.6)

3.19 (19i) Identificamos dónde queda la mediana

boxplot(DATOS2026$EDAD, notch = TRUE, horizontal = TRUE,
        col = paleta2[2], border = "#2c3e50",
        main = paste("Diagrama de caja con muesca - EDAD -", autor),
        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

3.20 (20i) EDAD vs SEXO

boxplot(EDAD ~ SEXO, data = DATOS2026, horizontal = TRUE,
        col = paleta2, border = "#2c3e50",
        main = paste("EDAD vs SEXO -", autor), xlab = "EDAD", ylab = "", las = 1)

3.21 (21i) EDAD vs ESTRATO

n_est <- length(unique(DATOS2026$ESTRATO))
boxplot(EDAD ~ ESTRATO, data = DATOS2026, horizontal = TRUE,
        col = paleta5[1:n_est], border = "#2c3e50",
        main = paste("EDAD vs ESTRATO -", autor), xlab = "EDAD", ylab = "ESTRATO", las = 1)

3.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" = paleta2[1], "Masculino" = paleta2[2])) +
  scale_x_discrete(labels = abbreviate, name = "ESTRATO") +
  scale_y_continuous(name = "EDAD") +
  labs(title = paste("EDAD vs ESTRATO vs SEXO -", autor)) +
  theme_minimal(base_size = 13) +
  theme(plot.title = element_text(face = "bold", color = "#2c3e50", hjust = 0.5),
        legend.position = "top")

3.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 

3.24 (24i) Una primera vista del diagrama de caja para la variable ESTATURA

boxplot(DATOS2026$ESTATURA, horizontal = TRUE, col = paleta2[2], border = "#2c3e50",
        main = paste("Diagrama de caja - ESTATURA -", autor), xlab = "ESTATURA", boxwex = 0.6)

3.25 (25i) Identificamos dónde queda la mediana

boxplot(DATOS2026$ESTATURA, notch = TRUE, horizontal = TRUE,
        col = paleta2[2], border = "#2c3e50",
        main = paste("Diagrama de caja con muesca - ESTATURA -", autor),
        xlab = "ESTATURA", boxwex = 0.6)

3.26 (26i) ESTATURA vs SEXO

boxplot(ESTATURA ~ SEXO, data = DATOS2026, horizontal = TRUE,
        col = paleta2, border = "#2c3e50",
        main = paste("ESTATURA vs SEXO -", autor), xlab = "ESTATURA", ylab = "", las = 1)

3.27 (27i) ESTATURA vs ESTRATO

n_est <- length(unique(DATOS2026$ESTRATO))
boxplot(ESTATURA ~ ESTRATO, data = DATOS2026, horizontal = TRUE,
        col = paleta5[1:n_est], border = "#2c3e50",
        main = paste("ESTATURA vs ESTRATO -", autor), xlab = "ESTATURA", ylab = "ESTRATO", las = 1)

3.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" = paleta2[1], "Masculino" = paleta2[2])) +
  scale_x_discrete(labels = abbreviate, name = "ESTRATO") +
  scale_y_continuous(name = "ESTATURA") +
  labs(title = paste("ESTATURA vs ESTRATO vs SEXO -", autor)) +
  theme_minimal(base_size = 13) +
  theme(plot.title = element_text(face = "bold", color = "#2c3e50", hjust = 0.5),
        legend.position = "top")

3.29 (29i) Histograma y tabla de frecuencias usando Regla de Sturges

3.29.0.0.1 Usando la librería “agricolae”
library(agricolae)
h2 <- graph.freq(DATOS2026$EDAD, col = paleta2[2], border = "white",
                 main = paste("Histograma de EDAD (Regla de Sturges) -", autor),
                 xlab = "EDAD", ylab = "Frecuencia")

3.30 (30i) Tabla de frecuencias agrupadas Regla de Sturges

3.30.0.0.1 Usando la librería “agricolae”
summary(h2)

3.31 (31i) Polígono de frecuencia absolutas

3.31.0.0.0.1 frequency : counts (1) and relative (2)
plot(h2, col = paleta2[2], border = "white", frequency = 1,
     main = paste("Polígono de frecuencias absolutas -", autor),
     xlab = "EDAD", ylab = "Frecuencia")
polygon.freq(h2, col = paleta2[1], frequency = 1, lwd = 2)

3.32 (32i) Polígono de frecuencia relativas

3.32.0.0.0.1 frequency : counts (1) and relative (2)
plot(h2, col = paleta2[2], border = "white", frequency = 2,
     main = paste("Polígono de frecuencias relativas -", autor),
     xlab = "EDAD", ylab = "Frecuencia relativa")
polygon.freq(h2, col = paleta2[1], frequency = 2, lwd = 2)

3.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

3.34 (34i) Ojivas - frecuencias porcentuales

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

4 LABORATORIO 8. VARIABLES RELACIONADAS

4.1 (35i) Algunas tablas bivariadas - Contamos Sexo vs Curso (ambas cualitativas)

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

4.2 (36i) Algunas tablas bivariadas - Diagrama de barras Sexo vs Curso

barp_bv1 <- barplot(table_bv1,
        main = paste("Gráfico de barras CURSO vs SEXO -", autor),
        xlab = "CURSO", ylab = "Frecuencia",
        col = paleta2, border = "white",
        legend.text = rownames(table_bv1),
        beside = TRUE)
text(barp_bv1, table_bv1, labels = table_bv1, pos = 3, cex = 1, font = 2)

4.3 (37i) Algunas tablas bivariadas - Contamos Estrato vs Curso

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

4.4 (38i) Diagrama de barras Curso vs Estrato

barp_bv2 <- barplot(table_bv2,
        main = paste("Gráfico de barras CURSO vs ESTRATO -", autor),
        xlab = "CURSO", ylab = "Frecuencia",
        col = paleta5[1:nrow(table_bv2)], border = "white",
        legend.text = rownames(table_bv2),
        beside = TRUE)
text(barp_bv2, table_bv2, labels = table_bv2, pos = 3, cex = 0.9, font = 2)

4.5 (39i) Una variable cualitativa y otra cuantitativa: EDAD vs SEXO

boxplot(EDAD ~ SEXO, data = DATOS2026, horizontal = TRUE,
        col = paleta2, border = "#2c3e50",
        main = paste("EDAD vs SEXO -", autor), xlab = "EDAD", ylab = "", las = 1)

4.6 (40i) Una variable cualitativa y otra cuantitativa: EDAD vs ESTRATO

n_est <- length(unique(DATOS2026$ESTRATO))
boxplot(EDAD ~ ESTRATO, data = DATOS2026, horizontal = TRUE,
        col = paleta5[1:n_est], border = "#2c3e50",
        main = paste("EDAD vs ESTRATO -", autor), xlab = "EDAD", ylab = "ESTRATO", las = 1)

4.7 (41i) Una variable cualitativa y otra cuantitativa: ESTATURA vs SEXO

boxplot(ESTATURA ~ SEXO, data = DATOS2026, horizontal = TRUE,
        col = paleta2, border = "#2c3e50",
        main = paste("ESTATURA vs SEXO -", autor), xlab = "ESTATURA", ylab = "", las = 1)

4.8 (42i) Dos variables cuantitativas: diagrama de dispersión ESTATURA vs PESO

x <- DATOS2026$ESTATURA
y <- DATOS2026$PESO
plot(x, y, xlab = "ESTATURA", ylab = "PESO", col = paleta2[2], pch = 19,
     main = paste("Diagrama de dispersión ESTATURA vs PESO -", autor))
abline(v = mean(x), lwd = 2, lty = 2, col = paleta2[1])
abline(h = mean(y), lwd = 2, lty = 2, col = paleta2[1])

4.9 (43i) Recta de regresión lineal simple

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

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

Coefficients:
(Intercept)            x  
   -84.1267       0.8756  

4.10 (44i) Recta de regresión lineal simple 2

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

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

Coefficients:
(Intercept)            y  
   137.0763       0.4945  

4.11 (45i) Resumen de la regresión lineal simple

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

4.12 (46i) Diagrama de dispersión y recta de regresión ajustada

plot(x, y, xlab = "ESTATURA", ylab = "PESO", col = paleta2[2], pch = 19,
     main = paste("y_ajus = a + bx = -13.2018 + 0.4552x, r = 0.4352732 -", autor))
abline(v = mean(x), lwd = 2, lty = 2, col = paleta2[1])
abline(h = mean(y), lwd = 2, lty = 2, col = paleta2[1])

a <- -13.20178
b <- 0.4552
abline(a = a, b = b, col = "steelblue", lwd = 2)

4.13 (47i) Problema de aplicación: 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)
)

4.14 (48i) Diagrama de dispersión (problema de aplicación)

plot(taller_rl$x, taller_rl$y, xlab = "PESO", ylab = "ESTATURA", col = paleta2[2], pch = 19,
     main = paste("Diagrama de dispersión PESO vs ESTATURA -", autor))
abline(v = mean(taller_rl$x), lwd = 2, lty = 2, col = paleta2[1])
abline(h = mean(taller_rl$y), lwd = 2, lty = 2, col = paleta2[1])

4.15 (49i) 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.

4.16 (50i) Recta de regresión lineal simple (problema de aplicación)

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  

4.17 (51i) Resumen de la regresión lineal simple

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

4.18 (52i) Diagrama de dispersión con recta de regresión ajustada

plot(taller_rl$x, taller_rl$y, xlab = "PESO", ylab = "ESTATURA", col = paleta2[2], pch = 19,
     main = paste("Recta de regresión PESO vs ESTATURA -", autor))
abline(v = mean(taller_rl$x), lwd = 2, lty = 2, col = paleta2[1])
abline(h = mean(taller_rl$y), lwd = 2, lty = 2, col = paleta2[1])

a <- 143.9296
b <- 0.3565
abline(a = a, b = b, col = "steelblue", lwd = 2)

4.19 (53i) Lectura de datos: Edad, Peso y Grasas

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

4.20 (54i) Matriz de diagramas de dispersión

pairs(grasas, col = paleta2[2], pch = 19,
      main = paste("Matriz de dispersión -", autor))

4.21 (55i) Matriz de correlación

cor(grasas)
            peso      edad    grasas
peso   1.0000000 0.2400133 0.2652935
edad   0.2400133 1.0000000 0.8373534
grasas 0.2652935 0.8373534 1.0000000

4.22 (56i) 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

4.23 (57i) Representación gráfica de la recta de mínimos cuadrados

plot(grasas$edad, grasas$grasas, xlab = "Edad", ylab = "Grasas",
     col = paleta2[2], pch = 19,
     main = paste("Recta de mínimos cuadrados - Edad vs Grasas -", autor))
abline(regresion, col = paleta2[1], lwd = 2)

4.24 (58i) Predicción con la recta de mínimos cuadrados

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