🧪 Práctica Guiada 1: Modelos de Regresión

Asignatura: Estadística Aplicada con Python y R

Tema: Predicción de la Resistencia del Concreto con Regresión Lineal Múltiple

Objetivo del Ejercicio

Como ingenieros, constantemente buscamos optimizar mezclas y predecir el rendimiento de los materiales. En este ejercicio, actuarás como un ingeniero de control de calidad para una empresa constructora. Tu objetivo es construir un modelo de regresión lineal múltiple para predecir la resistencia a la compresión del concreto basándose en sus componentes y su tiempo de curado.

Este modelo permitirá a la empresa estimar la calidad del producto final antes de realizar costosas pruebas de laboratorio, optimizando recursos y tiempo.

Paso 1: Configuración del Proyecto (El Flujo “De Cero a Héroe”)

Antes de empezar con el análisis, asegúrate de tener tu entorno de trabajo listo.

  1. Crear Repositorio en GitHub:

    • Ve a tu cuenta de GitHub.
    • Crea un nuevo repositorio público llamado proyecto-regresion-concreto.
    • Importante: Asegúrate de inicializarlo marcando las casillas para añadir un README.md y un .gitignore (selecciona la plantilla R).
  2. Clonar en Posit Cloud:

    • Copia la URL HTTPS de tu nuevo repositorio.
    • En Posit Cloud, crea un New Project from Git Repository y pega la URL.
  3. Configurar Git (si es la primera vez en este proyecto):

    • En la Consola de R, ejecuta los comandos para configurar tu nombre y email, y para guardar tu PAT con gitcreds::gitcreds_set(), tal como se describe en la guía.
install.packages("usethis")

install.packages("gitcreds")

library(usethis)
use_git_config(
  user.name = "justorfc", 
  user.email = "justorfc@gmail.com"
)

library(gitcreds)
gitcreds_set()

# Te pedirá el usuario y la contraseña, cuando te pida la contraseña copia y pega el Token

Paso 2: Creación de los Datos y el Entorno de Trabajo

1. Crear la Carpeta de Datos:

  • En el panel de archivos de Posit Cloud (abajo a la derecha), crea una nueva carpeta (New Folder) llamada data.

2. Crear el Archivo de Datos:

  • Entra en la carpeta data.
  • Crea un nuevo archivo de texto (New File > Text File) llamado datos_concreto.csv.
  • Pega los siguientes datos, que simulan muestras de laboratorio, y guarda el archivo:
Cemento_kg,Agua_kg,Arena_kg,Edad_dias,Resistencia_MPa
250,150,900,7,22.5
250,165,850,28,35.1
300,160,880,7,28.9
300,175,820,28,40.2
350,170,850,7,33.4
350,185,800,28,45.8
400,180,820,7,39.1
400,195,780,28,52.3
450,190,790,7,44.6
450,205,750,28,58.0
280,155,890,14,33.7
320,165,860,14,38.5
380,175,830,14,44.9
420,185,800,14,50.1

3. Crear el Documento R Markdown:

  • Vuelve al directorio principal del proyecto.
  • Crea un nuevo archivo R Markdown (New File > R Markdown...).
  • Dale el título “Análisis de Regresión del Concreto” y como autor tu nombre. Deja el formato de salida por defecto (HTML).
  • Guarda el archivo como analisis_regresion.Rmd. Borra todo el contenido de ejemplo que aparece después de la cabecera (YAML header).

Paso 3: Análisis de Regresión en R Markdown

Ahora, dentro de tu archivo analisis_regresion.Rmd, empezarás a escribir el código y texto para el análisis.

3.1 Carga de Librerías y Datos

Crea un chunk de código de R (atajo: Ctrl+Alt+I) y carga las librerías necesarias y los datos.

# Cargar las librerías para manipulación de datos y visualización
library(tidyverse) 
library(GGally) # Para gráficos exploratorios avanzados
# Cargar el dataset desde la carpeta 'data'
datos <- read_csv("data/datos_concreto.csv")
## Rows: 14 Columns: 5
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## dbl (5): Cemento_kg, Agua_kg, Arena_kg, Edad_dias, Resistencia_MPa
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# Ver las primeras filas para asegurar que se cargó correctamente
head(datos)

3.2 Análisis Exploratorio de Datos (EDA) 📊

Antes de modelar, debemos entender nuestros datos. ¿Cómo se relacionan las variables?

En esta sección, exploramos las relaciones entre los componentes del concreto y la resistencia final.

# Resumen estadístico de todas las variables
summary(datos)
##    Cemento_kg     Agua_kg         Arena_kg       Edad_dias    Resistencia_MPa
##  Min.   :250   Min.   :150.0   Min.   :750.0   Min.   : 7.0   Min.   :22.50  
##  1st Qu.:300   1st Qu.:165.0   1st Qu.:800.0   1st Qu.: 7.0   1st Qu.:34.05  
##  Median :350   Median :175.0   Median :825.0   Median :14.0   Median :39.65  
##  Mean   :350   Mean   :175.4   Mean   :830.0   Mean   :16.5   Mean   :40.51  
##  3rd Qu.:400   3rd Qu.:185.0   3rd Qu.:857.5   3rd Qu.:28.0   3rd Qu.:45.58  
##  Max.   :450   Max.   :205.0   Max.   :900.0   Max.   :28.0   Max.   :58.00
# Matriz de correlación y gráficos de dispersión
# ggpairs nos da:
# - Histogramas en la diagonal para ver la distribución de cada variable.
# - Gráficos de dispersión en la parte inferior para ver la relación entre pares.
# - Coeficientes de correlación en la parte superior.
ggpairs(datos) +
  labs(title = "Matriz de Correlación y Dispersión de Variables")

Interpretación Preliminar: Observa la última fila de gráficos.

¿Qué variables parecen tener una relación lineal fuerte y positiva con Resistencia_MPa?

La correlación entre Cemento_kg y Resistencia_MPa, y entre Edad_dias y Resistencia_MPa parece ser alta.

La relación con Agua_kg parece ser más débil o incluso negativa.


### **3.3 Construcción del Modelo de Regresión Lineal Múltiple 🏗️**

Ahora, construiremos el modelo usando la función `lm()` (linear model).

Vamos a crear un modelo donde la resistencia es la variable dependiente (Y) y los demás componentes son las variables independientes (X).

La fórmula es: $Resistencia = \beta_0 + \beta_1 \cdot Cemento + \beta_2 \cdot Agua + \beta_3 \cdot Arena + \beta_4 \cdot Edad$


``` r
# Construir el modelo de regresión lineal
modelo <- lm(Resistencia_MPa ~ Cemento_kg + Agua_kg + Arena_kg + Edad_dias, data = datos)

# Mostrar el resumen completo del modelo
summary(modelo)
```

```
## 
## Call:
## lm(formula = Resistencia_MPa ~ Cemento_kg + Agua_kg + Arena_kg + 
##     Edad_dias, data = datos)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.80793 -0.47950 -0.08593  0.22506  1.36346 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 29.18617   69.49910   0.420  0.68437    
## Cemento_kg   0.25908    0.01888  13.724 2.44e-07 ***
## Agua_kg     -0.66549    0.16948  -3.927  0.00348 ** 
## Arena_kg     0.02265    0.05276   0.429  0.67779    
## Edad_dias    1.12367    0.07628  14.730 1.32e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.7904 on 9 degrees of freedom
## Multiple R-squared:  0.9953, Adjusted R-squared:  0.9932 
## F-statistic: 474.8 on 4 and 9 DF,  p-value: 1.861e-10
```

3.4 Interpretación de los Resultados del Modelo

Esta es la parte más importante. ¿Qué nos dicen todos esos números?

1. Coeficientes (Coefficients):

  • Intercept (\beta_0): Es el valor teórico de la resistencia si todos los predictores fueran cero. En este contexto, no tiene una interpretación práctica.

  • Cemento_kg (\beta_1): Por cada kg adicional de cemento, manteniendo el resto constante, la resistencia aumenta en [valor del coeficiente] MPa. El p-valor (Pr(>|t|)) es muy bajo, lo que indica que esta variable es muy significativa.

  • Agua_kg (\beta_2): Por cada kg adicional de agua, la resistencia cambia en [valor del coeficiente]. Observa si el efecto es positivo o negativo. Evalúa su p-valor para ver si es significativo.

  • Arena_kg (\beta_3): Analiza su efecto y significancia de la misma manera.

  • Edad_dias (\beta_4): Por cada día adicional de curado, la resistencia aumenta significativamente. Es, junto con el cemento, una de las variables más influyentes.

2. Medidas de Ajuste del Modelo:

  • Adjusted R-squared (R^2 ajustado): Este valor es [valor de R^2 ajustado]. Esto significa que nuestro modelo explica aproximadamente el [porcentaje]% de la variabilidad en la resistencia del concreto. Un valor por encima del 80-90% se considera muy bueno.

  • F-statistic (Prueba F): El p-valor general del modelo (p-value de la última línea) es extremadamente pequeño. Esto nos permite rechazar la hipótesis nula de que todos los coeficientes son cero. En otras palabras, nuestro modelo es estadísticamente significativo y útil para la predicción.

3.5 Diagnóstico del Modelo (Opcional, pero recomendado)

Un buen análisis verifica si se cumplen los supuestos del modelo de regresión.

# Generar los gráficos de diagnóstico
par(mfrow = c(2, 2))
plot(modelo)

par(mfrow = c(1, 1))

Qué buscar: 1. Residuals vs. Fitted: Los puntos deben dispersarse aleatoriamente alrededor de la línea horizontal en 0, sin patrones evidentes (como una curva o un embudo). Esto verifica la linealidad. 2. Normal Q-Q: Los puntos deben seguir de cerca la línea diagonal. Esto verifica que los residuos siguen una distribución normal.

Paso 4: Comunicación y Sincronización

1. Generar el Reporte:

  • Haz clic en el botón Knit en la parte superior de tu script R Markdown.
  • Esto generará un archivo HTML con todo tu código, texto y gráficos, ¡un reporte profesional listo para compartir!

2. Sincronizar con GitHub ✅:

  • ¡Es hora de guardar tu trabajo en la nube!
  • Ve a la pestaña Git en Posit Cloud.
  • Verás todos tus archivos nuevos y modificados (.Rmd, .html, la carpeta data, etc.).
  • Stage: Marca todas las casillas.
  • Commit: Escribe un mensaje descriptivo, como Finaliza análisis de regresión para resistencia del concreto.
  • Push: Haz clic en el botón Push para enviar todo a tu repositorio de GitHub.

¡Felicitaciones! Has completado un proyecto de análisis de datos de principio a fin, combinando buenas prácticas de estadística, programación en R y control de versiones con Git.