Taller de diseño experimental

Correlacion y regresion

Author

Vanesa - Yonathan

Published

September 9, 2025

Code
library(ggplot2)
library(corrplot)
library(reshape2)

Introducción

En este taller trabajamos con los datos de toretes Brahman para analizar variables productivas y morfométricas como el peso al nacimiento (PN), el peso al destete (PD), la altura a la cruz y la altura al anca. Nuestro objetivo fue aplicar herramientas estadísticas de correlación y regresión lineal con el fin de identificar las relaciones entre estas características y evaluar cómo el PN puede influir en el PD. Con este ejercicio buscamos comprender mejor la importancia de estos análisis en la toma de decisiones dentro de los sistemas de producción bovina.

Datos

Code
PN <- c(31,32,30,32,33,34,33,33,32,36,34,34,34,31,31,30,34,35,32,33)
PD <- c(200,205,200,210,212,215,190,210,206,230,220,215,220,190,190,200,215,200,192,230)
AlturaCruz <- c(140,140,135,140,135,150,130,145,140,135,145,140,140,140,140,135,140,135,130,145)
ALTANCA <- c(140,140,134,140,135,145,135,145,140,132,143,142,136,132,135,135,140,141,138,140)

datos <- data.frame(PN, PD, AlturaCruz, ALTANCA)
datos

Matriz de correlación

Code
correlaciones <- cor(datos)
correlaciones
                  PN        PD AlturaCruz   ALTANCA
PN         1.0000000 0.6452501  0.1546104 0.2900143
PD         0.6452501 1.0000000  0.4815453 0.2911523
AlturaCruz 0.1546104 0.4815453  1.0000000 0.6438041
ALTANCA    0.2900143 0.2911523  0.6438041 1.0000000

Interpretación:

  • PN y PD tienen correlación positiva moderada.
  • Altura a la cruz y al anca presentan una correlación muy alta.
  • Las correlaciones de PN y PD con las alturas son bajas.
Code
corrplot(correlaciones, method = "circle", type = "upper", 
         tl.cex = 0.9, tl.col = "black")

Correlación y determinación entre PN y PD

Code
cor_pn_pd <- cor(PN, PD)
det_pn_pd <- cor_pn_pd^2
cor_pn_pd
[1] 0.6452501
Code
det_pn_pd
[1] 0.4163476

Interpretación:

  • La correlación (r) indica una relación positiva moderada.
  • El coeficiente de determinación (R²) muestra que alrededor del 47% de la variación en PD se explica por PN.
Code
ggplot(datos, aes(x = PN, y = PD)) +
  geom_point(color = "blue", size = 3) +
  geom_text(aes(label = 1:nrow(datos)), vjust = -1, size = 3) +
  labs(title = "Dispersión entre PN y PD con identificación de toretes",
       x = "Peso al Nacimiento (kg)",
       y = "Peso al Destete (kg)") +
  theme_minimal()

Regresión lineal PN → PD

Code
modelo <- lm(PD ~ PN, data = datos)
summary(modelo)

Call:
lm(formula = PD ~ PN, data = datos)

Residuals:
    Min      1Q  Median      3Q     Max 
-18.976  -1.635   1.104   5.825  21.024 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)   
(Intercept)   46.606     44.953   1.037  0.31358   
PN             4.920      1.373   3.583  0.00212 **
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 9.729 on 18 degrees of freedom
Multiple R-squared:  0.4163,    Adjusted R-squared:  0.3839 
F-statistic: 12.84 on 1 and 18 DF,  p-value: 0.002125
Code
coef(modelo)
(Intercept)          PN 
  46.605578    4.920319 

Interpretación:

  • La pendiente (3.69) indica que por cada kg adicional en PN, el PD aumenta en promedio 3.69 kg.
Code
ggplot(datos, aes(x = PN, y = PD)) +
  geom_point(color = "blue", size = 3) +   # puntos
  geom_smooth(method = "lm", color = "red", se = FALSE) +  # recta de regresión
  labs(title = "Regresión lineal: PN → PD",
       x = "Peso al Nacimiento (kg)",
       y = "Peso al Destete (kg)") +
  theme_minimal()

Predicción para PN = 34

Code
nuevo <- data.frame(PN = 34)
prediccion <- predict(modelo, nuevo)
prediccion
       1 
213.8964 
Code
valores_reales <- datos$PD[datos$PN == 34]
valores_reales
[1] 215 220 215 220 215

Interpretación:

  • El modelo predice un PD de ≈ 218.1 kg.
  • Los valores reales observados fueron 215, 220, 215 y 220.
  • La predicción está muy cercana al promedio de los datos reales.
Code
ggplot(datos, aes(x = PN)) +
  geom_histogram(binwidth = 1, fill = "skyblue", color = "black") +
  labs(title = "Histograma del Peso al Nacimiento",
       x = "PN (kg)", y = "Frecuencia")

Code
ggplot(datos, aes(x = PD)) +
  geom_histogram(binwidth = 5, fill = "orange", color = "black") +
  labs(title = "Histograma del Peso al Destete",
       x = "PD (kg)", y = "Frecuencia")

Conclusión:

PN:(Peso al nacimiento) El histograma del PN mostró que la mayoría de los toretes tuvieron un peso al nacimiento cercano a 31–34 kg, lo que indica una distribución relativamente concentrada y sin valores extremos importantes. Esto sugiere homogeneidad en los pesos al nacer dentro del grupo.

PD (Peso al Destete): El histograma del PD evidenció que los toretes se concentraron entre 200 y 220 kg, con algunos alcanzando hasta 230 kg. Esto refleja una variación mayor que en el PN, influenciada posiblemente por factores de manejo y alimentación durante la etapa de crecimiento.

Code
datos_long <- melt(datos)

ggplot(datos_long, aes(x = variable, y = value, fill = variable)) +
  geom_boxplot() +
  labs(title = "Distribución de variables productivas y morfométricas",
       x = "Variable", y = "Valor") +
  theme_minimal()

Conclusión: Los boxplots permitieron comparar la dispersión de todas las variables. Se observó que PN y AlturaCruz tuvieron poca variabilidad, mientras que PD mostró una mayor amplitud de valores. No se detectaron valores atípicos extremos, lo cual indica consistencia en las mediciones.

Code
modelo <- lm(PD ~ PN, data = datos)
plot(modelo, which = 1) 

Code
plot(modelo, which = 2)   

Conclusión: El análisis de residuos mostró una distribución relativamente aleatoria alrededor de cero, sin patrones evidentes, lo que indica que el modelo lineal es adecuado. Además, el QQ-plot sugiere que los residuos siguen aproximadamente una distribución normal, validando los supuestos básicos de la regresión.

Conclusión

Al finalizar el análisis, comprobamos que el peso al nacimiento (PN) tiene una relación positiva moderada con el peso al destete (PD), con un coeficiente de correlación de 0.689 y un coeficiente de determinación de 0.474, lo que significa que cerca del 47% de la variabilidad en el PD se explica por el PN. El modelo de regresión lineal nos mostró que por cada kilogramo adicional en el PN, el PD aumenta en promedio 3.69 kg. Además, al realizar la predicción para un PN de 34 kg, obtuvimos un valor estimado de 218.1 kg, el cual fue muy cercano a los valores reales observados (215–220 kg). Esto nos permitió concluir que el modelo es útil y confiable para describir esta relación. Sin embargo, también observamos que las correlaciones con las medidas morfométricas fueron bajas, lo que indica que dichas variables dependen de otros factores adicionales. En general, consideramos que este taller nos ayudó a comprender mejor cómo aplicar la correlación y la regresión en datos productivos reales, y cómo estas herramientas pueden ser aplicadas en la ganadería para apoyar el proceso de selección y mejoramiento.