Instrucciones Generales

En este documento encontrarás cinco ejercicios prácticos. Lee detenidamente cada consigna, escribe el código R necesario dentro de los bloques (chunk) correspondientes y añade una breve interpretación de los resultados donde se solicite.

Asegúrate de cargar las librerías necesarias al inicio de tu sesión (por ejemplo: ggplot2, caret, rpart, factoextra).

#| label: setup

library(ggplot2)
library(caret)
## Cargando paquete requerido: lattice
library(rpart)
library(rpart.plot)
library(factoextra)
## Welcome to factoextra!
## Want to learn more? See two factoextra-related books at https://www.datanovia.com/library/principal-component-methods

Parte I: Visualización de Datos

La exploración visual es el primer paso crítico antes de aplicar cualquier modelo predictivo. Utilizaremos el conjunto de datos mpg (disponible al cargar ggplot2).

Ejercicio 1: Relación entre variables (Gráfico de Dispersión)

Consigna: Crea un gráfico de dispersión utilizando ggplot2 que muestre la relación entre el tamaño del motor (displ, en el eje X) y el rendimiento en autopista (hwy, en el eje Y). Añade una línea de tendencia suavizada (método “lm” o “loess”) y colorea los puntos según la clase del vehículo (class).

ggplot(
  data = mpg,
  mapping = aes(x = displ, y = hwy)
) +
  geom_point(aes(color = class, shape = class)) +
  geom_smooth(method = "lm") +
  labs(
    title = "Tamaño del motor y rendimiento en autopista",
    subtitle = "Según la clase del vehículo",
    x = "Tamaño del motor",
    y = "Rendimiento en autopista",
    color = "Clase",
    shape = "Clase"
  ) +
  scale_color_brewer(palette = "Dark2")
## `geom_smooth()` using formula = 'y ~ x'
## Warning: The shape palette can deal with a maximum of 6 discrete values because more
## than 6 becomes difficult to discriminate
## ℹ you have requested 7 values. Consider specifying shapes manually if you need
##   that many of them.
## Warning: Removed 62 rows containing missing values or values outside the scale range
## (`geom_point()`).

Interpretación:

Se observa una relación negativa entre el tamaño del motor y el rendimiento en autopista. A medida que aumenta el tamaño del motor, disminuye la cantidad de millas por galón. Además, diferentes clases de vehículos presentan distintos patrones de consumo.


Ejercicio 2: Distribución y comparación (Boxplot)

Consigna: Utilizando el mismo conjunto de datos mpg, crea un diagrama de caja (boxplot) que compare la distribución del rendimiento en ciudad (cty) para cada tipo de tracción (drv: f = delantera, r = trasera, 4 = cuatro ruedas). Añade un título adecuado y renombra los ejes.

ggplot(mpg, aes(x = drv, y = cty, fill = drv)) +
  geom_boxplot() +
  labs(
    title = "Rendimiento en ciudad según el tipo de tracción",
    x = "Tipo de tracción",
    y = "Rendimiento en ciudad (mpg)"
  ) +
  theme_minimal()

#El diagrama de caja compara la distribución del rendimiento en ciudad (cty) según el tipo de tracción (drv): tracción en las cuatro ruedas (4), delantera (f) y trasera (r).

Tracción delantera (f): presenta la mayor mediana de rendimiento, cercana a 19 mpg, lo que indica que, en general, los vehículos con tracción delantera son los más eficientes en consumo de combustible en ciudad. Además, se observan varios valores atípicos superiores (entre aproximadamente 26 y 35 mpg), lo que evidencia la existencia de algunos vehículos con un rendimiento excepcionalmente alto. Tracción en las cuatro ruedas (4): tiene una mediana cercana a 14 mpg, inferior a la de la tracción delantera. La variabilidad es moderada y aparece un valor atípico alrededor de 21 mpg, correspondiente a un vehículo con un rendimiento superior al habitual dentro de este grupo. **Tracción trasera (r): presenta una mediana cercana a 15 mpg, ligeramente superior a la de los vehículos con tracción en las cuatro ruedas, pero considerablemente menor que la de los vehículos con tracción delantera. Su dispersión es moderada y no se observan valores atípicos importantes.

Parte II: Análisis Predictivo (Machine Learning)

Ejercicio 3: Aprendizaje Supervisado - Regresión Lineal Múltiple

Utilizaremos el conjunto de datos swiss, el cual contiene indicadores socioeconómicos estandarizados de provincias suizas (alrededor de 1888).

Consigna: 1. Ajusta un modelo de regresión lineal múltiple para predecir la fertilidad (Fertility) en función del porcentaje de hombres con educación agrícola (Agriculture), el nivel educativo (Education) y el porcentaje de católicos (Catholic). 2. Muestra el resumen del modelo (summary).

data(swiss)

modelo <- lm(Fertility ~ Agriculture + Education + Catholic,
             data = swiss)

summary(modelo)
## 
## Call:
## lm(formula = Fertility ~ Agriculture + Education + Catholic, 
##     data = swiss)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -15.178  -6.548   1.379   5.822  14.840 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 86.22502    4.73472  18.211  < 2e-16 ***
## Agriculture -0.20304    0.07115  -2.854  0.00662 ** 
## Education   -1.07215    0.15580  -6.881 1.91e-08 ***
## Catholic     0.14520    0.03015   4.817 1.84e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 7.728 on 43 degrees of freedom
## Multiple R-squared:  0.6423, Adjusted R-squared:  0.6173 
## F-statistic: 25.73 on 3 and 43 DF,  p-value: 1.089e-09

Interpretación:

El resumen del modelo permite identificar cuáles variables son estadísticamente significativas mediante sus valores p.

Generalmente:

  • Education presenta un coeficiente negativo, indicando que un mayor nivel educativo se asocia con una menor fertilidad.
  • Catholic suele presentar un coeficiente positivo, indicando que un mayor porcentaje de población católica se asocia con mayor fertilidad.
  • El R² ajustado se obtiene directamente del resultado de summary(modelo) y representa el porcentaje de variabilidad de la fertilidad explicado por el modelo.

Según los resultados del modelo, las tres variables explicativas (Agriculture, Education y Catholic) son estadísticamente significativas, ya que presentan valores p menores a 0,01. El R² ajustado del modelo es 0.6173, lo que significa que aproximadamente el 61,73 % de la variabilidad de la fertilidad es explicada por las variables incluidas en el modelo. **Para evaluar que variable tiene más impacto en la Fertilidad se debería calcular los coeficientes beta, ya que las variables estan en unidades de medición disitintos.


Ejercicio 4: Aprendizaje Supervisado - Árboles de Decisión

Utilizaremos el clásico conjunto de datos iris.

Consigna: 1. Divide el conjunto de datos en entrenamiento (70%) y prueba (30%). (Puedes usar createDataPartition de caret o hacer un muestreo base). 2. Entrena un modelo de árbol de decisión (rpart) utilizando los datos de entrenamiento para predecir la especie (Species) a partir de las demás variables. 3. Dibuja el árbol resultante utilizando rpart.plot.

set.seed(123)

datos <- iris

indice <- createDataPartition(datos$Species,
                              p = 0.70,
                              list = FALSE)

train <- datos[indice, ]
test <- datos[-indice, ]

modelo_arbol <- rpart(
  Species ~ .,
  data = train,
  method = "class"
)

rpart.plot(modelo_arbol)

**El árbol muestra que la longitud y el ancho del pétalo son las variables más importantes para discriminar las especies de iris, logrando una clasificación prácticamente perfecta de setosa y una separación muy precisa entre versicolor y virginica. Esto evidencia que el modelo de árbol de decisión posee una alta capacidad predictiva para este conjunto de datos.


Ejercicio 5: Aprendizaje No Supervisado - K-means Clustering

Utilizaremos el conjunto de datos USArrests, que contiene estadísticas de arrestos por cada 100,000 residentes por asalto, asesinato y violación en cada uno de los 50 estados de EE. UU.

Consigna: 1. Escala los datos utilizando la función scale(), ya que las variables tienen unidades de medida muy diferentes. 2. Aplica el algoritmo K-means para agrupar los estados en 4 clústeres (centers = 4). Fija una semilla (set.seed) para la reproducibilidad. 3. Visualiza los clústeres resultantes utilizando la función fviz_cluster del paquete factoextra.

data(USArrests)

USArrests.scaled <- scale(USArrests)

set.seed(123)

kmeans.modelo <- kmeans(
  USArrests.scaled,
  centers = 4,
  nstart = 25
)

fviz_cluster(
  kmeans.modelo,
  data = USArrests.scaled
)

Interpretación:

El gráfico muestra cuatro grupos de estados con características similares respecto a las tasas de criminalidad.

Por ejemplo, California y Nevada pueden pertenecer al mismo clúster debido a que presentan niveles relativamente altos en varias variables de arrestos. Los estados agrupados dentro del mismo clúster comparten patrones semejantes en los indicadores analizados.

`