Al finalizar esta actividad, usted será capaz de:
📚 Nota Importante: Esta actividad está diseñada para complementar la presentación teórica sobre medidas de tendencia central y dispersión. Utilizaremos datos reales del grupo para hacer el aprendizaje más significativo.
R es un lenguaje de programación diseñado específicamente para estadística y análisis de datos. Imaginen que tienen una calculadora súper poderosa que no solo hace cálculos básicos, sino que también puede:
💡 Ventajas Clave de R
✅ Gratuito y
libre: Sin costos de licencia
✅ Comunidad
científica: Usado en universidades mundialmente
✅
Específico para estadística: Diseñado para nuestras
necesidades
✅ Reproducible: Los análisis se pueden
repetir exactamente
Comencemos viendo R como una calculadora muy inteligente:
# Esto es un comentario en R (se escribe con #)
# R funciona como una calculadora muy inteligente
# Suma
5 + 3
#> [1] 8
#> [1] 6
#> [1] 42
#> [1] 5
#> [1] 8
En R podemos “guardar” valores en variables para usarlos después:
# Guardemos un número
mi_edad <- 25
# Guardemos varios números (un vector)
edades_familia <- c(25, 30, 28, 35)
# Veamos qué guardamos
mi_edad
#> [1] 25
#> [1] 25 30 28 35
💡 Explicación:
• <-
es como
decir “guarda esto en…”
• c()
significa “combina estos
números en un vector”
Objetivo: Vamos a recolectar las edades de todos los estudiantes presentes y aplicar exactamente lo que vimos en la presentación sobre medidas de tendencia central y dispersión.
Proceso: 1. Cada estudiante comparte su edad (de forma voluntaria y anónima) 2. Anotamos todas las edades en la pizarra 3. Dividimos en grupos para calcular diferentes medidas manualmente 4. Verificamos los resultados usando R 5. Comparamos y reflexionamos sobre el proceso
Para demostrar el proceso, usaremos un conjunto de datos ejemplo. En clase, usaremos las edades reales del grupo:
# Ejemplo de edades que podríamos recolectar
# (En clase usaremos los datos reales)
edades_grupo <- c(20, 22, 21, 25, 23, 19, 24, 22, 20, 26, 21, 23, 24, 20, 25)
# Veamos nuestros datos
print("Edades del grupo:")
#> [1] "Edades del grupo:"
#> [1] 20 22 21 25 23 19 24 22 20 26 21 23 24 20 25
# ¿Cuántos estudiantes tenemos?
n_estudiantes <- length(edades_grupo)
paste("Número de estudiantes:", n_estudiantes)
#> [1] "Número de estudiantes: 15"
Ahora vamos a calcular cada una de las medidas estadísticas que vimos en la presentación:
# Calculemos la media
media_edades <- mean(edades_grupo)
print(paste("Media aritmética:", round(media_edades, 2), "años"))
#> [1] "Media aritmética: 22.33 años"
# Podemos ver el cálculo paso a paso
suma_total <- sum(edades_grupo)
n_datos <- length(edades_grupo)
media_manual <- suma_total / n_datos
print(paste("Verificación manual: (", suma_total, "/", n_datos, ") =", round(media_manual, 2)))
#> [1] "Verificación manual: ( 335 / 15 ) = 22.33"
# Calculemos la mediana
mediana_edades <- median(edades_grupo)
print(paste("Mediana:", mediana_edades, "años"))
#> [1] "Mediana: 22 años"
# Veamos los datos ordenados para entender mejor
datos_ordenados <- sort(edades_grupo)
print("Datos ordenados:")
#> [1] "Datos ordenados:"
#> [1] 19 20 20 20 21 21 22 22 23 23 24 24 25 25 26
# R no tiene una función directa para la moda, pero podemos encontrarla
frecuencias <- table(edades_grupo)
print("Frecuencia de cada edad:")
#> [1] "Frecuencia de cada edad:"
#> edades_grupo
#> 19 20 21 22 23 24 25 26
#> 1 3 2 2 2 2 2 1
# Encontrar la moda
moda <- as.numeric(names(frecuencias)[which.max(frecuencias)])
frecuencia_maxima <- max(frecuencias)
print(paste("Moda:", moda, "años (aparece", frecuencia_maxima, "veces)"))
#> [1] "Moda: 20 años (aparece 3 veces)"
# Valor máximo y mínimo
edad_maxima <- max(edades_grupo)
edad_minima <- min(edades_grupo)
print(paste("Edad máxima:", edad_maxima, "años"))
#> [1] "Edad máxima: 26 años"
#> [1] "Edad mínima: 19 años"
#> [1] "Rango: 7 años"
# Varianza muestral
varianza_edades <- var(edades_grupo)
print(paste("Varianza muestral:", round(varianza_edades, 2)))
#> [1] "Varianza muestral: 4.67"
# Desviación estándar
desviacion_edades <- sd(edades_grupo)
print(paste("Desviación estándar:", round(desviacion_edades, 2), "años"))
#> [1] "Desviación estándar: 2.16 años"
# Coeficiente de variación
cv_edades <- (desviacion_edades / media_edades) * 100
print(paste("Coeficiente de variación:", round(cv_edades, 2), "%"))
#> [1] "Coeficiente de variación: 9.67 %"
#> [1] "=== RESUMEN ESTADÍSTICO COMPLETO ==="
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 19.00 20.50 22.00 22.33 24.00 26.00
# Crear una tabla bonita con todas las medidas
resultados <- data.frame(
Medida = c("Media", "Mediana", "Moda", "Rango", "Varianza", "Desv. Estándar", "Coef. Variación"),
Valor = c(
round(media_edades, 2),
mediana_edades,
moda,
rango_edades,
round(varianza_edades, 2),
round(desviacion_edades, 2),
paste0(round(cv_edades, 2), "%")
),
Unidad = c("años", "años", "años", "años", "años²", "años", "%")
)
kable(resultados, caption = "Resumen de Medidas Estadísticas", align = "lcc")
Medida | Valor | Unidad |
---|---|---|
Media | 22.33 | años |
Mediana | 22 | años |
Moda | 20 | años |
Rango | 7 | años |
Varianza | 4.67 | años² |
Desv. Estándar | 2.16 | años |
Coef. Variación | 9.67% | % |
Una de las grandes ventajas de R es su capacidad para crear gráficos. Veamos cómo se distribuyen nuestras edades:
# Crear un histograma
hist(edades_grupo,
main = "Distribución de Edades en Nuestro Grupo",
xlab = "Edad (años)",
ylab = "Frecuencia",
col = "#a73c3c",
border = "white",
breaks = 8)
# Agregar líneas de referencia
abline(v = media_edades, col = "#2c3e50", lwd = 2, lty = 2)
abline(v = mediana_edades, col = "#34495e", lwd = 2, lty = 3)
# Agregar leyenda
legend("topright",
legend = c("Media", "Mediana"),
col = c("#2c3e50", "#34495e"),
lty = c(2, 3),
lwd = 2)
Distribución de Edades en Nuestro Grupo
# Crear un diagrama de caja (boxplot)
boxplot(edades_grupo,
main = "Diagrama de Caja: Edades del Grupo",
ylab = "Edad (años)",
col = "#e8f4f8",
border = "#a73c3c",
horizontal = FALSE)
# Agregar puntos de datos individuales
points(rep(1, length(edades_grupo)), edades_grupo,
col = "#a73c3c", pch = 19, cex = 0.8)
Diagrama de Caja de las Edades
🎯 ¿Qué nos dicen estos números sobre nuestro grupo?
Basándose en los resultados obtenidos, podemos interpretar:
30%: Grupo heterogéneo en edad
Preguntas para discutir:
🚀 Lo que viene después…
Próxima
clase: Profundizaremos en la sintaxis de R y aprenderemos a
importar datos desde archivos Excel y CSV
Durante el
semestre: Trabajaremos con datos reales de diferentes
disciplinas, especialmente química y ciencias naturales
# ================================
# CÓDIGO COMPLETO PARA PRACTICAR
# ================================
# 1. Definir los datos (cambiar por datos reales)
edades_grupo <- c(20, 22, 21, 25, 23, 19, 24, 22, 20, 26, 21, 23, 24, 20, 25)
# 2. Medidas de tendencia central
media <- mean(edades_grupo)
mediana <- median(edades_grupo)
moda <- as.numeric(names(table(edades_grupo))[which.max(table(edades_grupo))])
# 3. Medidas de dispersión
rango <- max(edades_grupo) - min(edades_grupo)
varianza <- var(edades_grupo)
desviacion <- sd(edades_grupo)
cv <- (desviacion / media) * 100
# 4. Mostrar resultados
cat("=== RESULTADOS ===\n")
cat("Media:", round(media, 2), "años\n")
cat("Mediana:", mediana, "años\n")
cat("Moda:", moda, "años\n")
cat("Rango:", rango, "años\n")
cat("Varianza:", round(varianza, 2), "\n")
cat("Desviación estándar:", round(desviacion, 2), "años\n")
cat("Coeficiente de variación:", round(cv, 2), "%\n")
# 5. Gráfico básico
hist(edades_grupo, main = "Distribución de Edades",
xlab = "Edad", ylab = "Frecuencia", col = "lightblue")
📚 Recursos Adicionales:
•
Página oficial de
R
• RStudio
IDE
• R for
Data Science (libro gratuito)
Universidad Nacional de Costa Rica
Escuela de
Informática y Computación
EIY403 - Introducción al Análisis de Datos
para Otras Carreras
II Semestre 2025