En los modelos de regresión lineal, se asume que existe una relación lineal entre la variable dependiente (respuesta) y las variables independientes (predictoras). Sin embargo, en muchos contextos aplicados esta relación no es estrictamente lineal. Cuando la relación entre las variables no puede representarse adecuadamente mediante una línea recta, hablamos de no linealidad.
Esto puede manifestarse de varias formas:
Reconocer la no linealidad es fundamental para evitar conclusiones erróneas y mejorar la capacidad predictiva del modelo.
Cuando la relación entre las variables no es estrictamente lineal, puede abordarse mediante transformaciones de variables. Algunas funciones transformadas comúnmente utilizadas para modelar relaciones no lineales incluyen:
En R, estas transformaciones se pueden aplicar directamente dentro de
la fórmula del modelo utilizando la función lm() , lo que
permite comparar modelos con distintas transformaciones y evaluar cuál
representa mejor la relación entre las variables, mejorar el ajuste y
las inferencias.
Para decidir si una transformación proporciona una representación más adecuada de la relación entre las variables (mejor ajuste), se pueden comparar distintos modelos a través de:
ggplot(GRUPO1_MODIF, aes(x = PESO, y = DIAM_ECUAT)) +
geom_point() +
labs(title = "Relación entre PESO y DIÁMETRO ECUATORIAL") +
theme_minimal()##
## Call:
## lm(formula = DIAM_ECUAT ~ PESO, data = GRUPO1_MODIF)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.7437 -0.8547 -0.1411 0.8869 3.8395
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 43.031948 1.057914 40.68 <2e-16 ***
## PESO 0.177922 0.007277 24.45 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.572 on 57 degrees of freedom
## Multiple R-squared: 0.9129, Adjusted R-squared: 0.9114
## F-statistic: 597.7 on 1 and 57 DF, p-value: < 2.2e-16
# Visualización
ggplot(MODELO_lineal, aes(x = PESO, y = DIAM_ECUAT)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE, color = "blue") +
labs(title = "Modelo lineal",
x= "Peso",
y= "Diámetro ecuatorial") +
theme_minimal()Ecuación del modelo:
\[DIAM.ECUATORIAL = 43.03 + 0.178⋅PESO\]
Interpretación:
lm) y su utilidad## [1] "coefficients" "residuals" "effects" "rank"
## [5] "fitted.values" "assign" "qr" "df.residual"
## [9] "xlevels" "call" "terms" "model"
# Principales componentes
MODELO_lineal$coefficients
MODELO_lineal$residuals
MODELO_lineal$rank
MODELO_lineal$fitted.values
MODELO_lineal$call
MODELO_lineal$modelTabla con los principales componentes del modelo
| Componente | Descripción |
|---|---|
coefficients |
Coeficientes estimados del modelo (intercepto y pendiente). |
residuals |
Diferencias entre valores observados y predichos (errores del modelo). |
rank |
Rango del modelo: número de coeficientes linealmente independientes. |
fitted.values |
Valores ajustados o predichos por el modelo. |
call |
Llamada original a la función lm() que generó el
modelo. |
model |
Data frame con las variables utilizadas en el modelo. |
Veamos un ejemplo:
## (Intercept) PESO
## 43.0319477 0.1779222
# Modelado
MODELO_cuad <- lm(DIAM_ECUAT ~ PESO + I(PESO^2), data = GRUPO1_MODIF)
summary(MODELO_cuad)##
## Call:
## lm(formula = DIAM_ECUAT ~ PESO + I(PESO^2), data = GRUPO1_MODIF)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.0492 -0.8633 -0.2359 0.7899 3.8182
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 34.2986068 3.2595820 10.522 6.99e-15 ***
## PESO 0.2998005 0.0438421 6.838 6.40e-09 ***
## I(PESO^2) -0.0004093 0.0001454 -2.815 0.00673 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.484 on 56 degrees of freedom
## Multiple R-squared: 0.9237, Adjusted R-squared: 0.921
## F-statistic: 339.1 on 2 and 56 DF, p-value: < 2.2e-16
# Visualización
ggplot(GRUPO1_MODIF, aes(x = PESO, y = DIAM_ECUAT)) +
geom_point() +
stat_smooth(method = "lm", formula = y ~ x + I(x^2), se = FALSE, color = "red") +
labs(title = "Modelo cuadrático",
x = "Peso",
y = "Diámetro ecuatorial") +
theme_minimal()En el gráfico se observa que a medida que el peso del fruto aumenta, también lo hace el diámetro ecuatorial. Sin embargo, el efecto del peso no es constante: el crecimiento del diámetro se desacelera con pesos mayores. Esto se debe al efecto del término cuadrático negativo.
Ecuación del modelo:
\[ DIAM\_ECUAT = 34.30 + 0.2998 \cdot PESO - 0.0004093 \cdot PESO^2 \]
Donde:
Interpretación:
ggplot(GRUPO1_MODIF, aes(PESO, DIAM_ECUAT)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE, color = "blue", size = 0.8 ) +
geom_smooth(method = "lm", formula = y ~ x + I(x^2), se = FALSE, color = "red", size = 0.8) +
labs(title = "Modelo lineal vs Modelo Cuadrático",
x = "Peso",
y = "Diámetro ecuatorial") +
theme_minimal()##
## Call:
## lm(formula = log(DIAM_ECUAT) ~ PESO, data = GRUPO1_MODIF)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.05177 -0.01383 0.00091 0.01466 0.05938
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.8497280 0.0170515 225.77 <2e-16 ***
## PESO 0.0026137 0.0001173 22.28 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.02533 on 57 degrees of freedom
## Multiple R-squared: 0.897, Adjusted R-squared: 0.8952
## F-statistic: 496.5 on 1 and 57 DF, p-value: < 2.2e-16
Donde:
Modelo ajustado:
\[log(DIAM.ECUATORIAL) = 3.849 + 0.00261⋅PESO\] Como el modelo predice \(\log(\text{DIAM_ECUAT})\), podemos aplicar la función exponencial para volver a la escala original:
\[ \text{DIAM_ECUAT} = e^{3.849 + 0.00261 \cdot \text{PESO}} \]
Interpretación:
Vamos a calcular el valor esperado del diámetro ecuatorial (mm) para un peso de 150 gramos, usando los tres modelos obtenidos:
# Peso a predecir
peso <- 150
# Modelo Lineal
DIAMETRO_MODELO_lineal <- 43.03 + 0.178 * peso
DIAMETRO_MODELO_lineal## [1] 69.73
# Modelo Cuadrático
DIAMETRO_MODELO_cuadratico <- 34.30 + 0.2998 * peso - 0.0004093 * peso^2
DIAMETRO_MODELO_cuadratico## [1] 70.06075
# Modelo Logarítmico (escala original)
DIAMETRO_MODELO_log_Y <- exp(3.849 + 0.00261 * peso)
DIAMETRO_MODELO_log_Y## [1] 69.44256
| Modelo | Fórmula | Predicción |
|---|---|---|
| Lineal | DIAM_ECUAT = 43.03 + 0.178 * PESO | 69.73 |
| Cuadrático | DIAM_ECUAT = 34.30 + 0.2998 * PESO - 0.0004093 * PESO2 | 70.06 |
| Log_Y | DIAM_ECUAT = e 3.849 + 0.00261 * PESO | 69.44 |
## df AIC
## MODELO_lineal 3 224.7415
## MODELO_cuad 4 218.9345
## MODELO_log_y 3 -262.3410
| Modelo | R² Ajustado | AIC | BIC |
|---|---|---|---|
| Lineal | 0.9114 | 224.74 | 230.97 |
| Cuadrático | 0.9210 | 218.93 | 227.24 |
| Log_Y | 0.8952 | –262.34 | –256.10 |
La elección del modelo depende del objetivo del análisis:
Si se busca máxima capacidad explicativa en la misma escala de las variables originales, el modelo cuadrático es una buena opción.
Si se prioriza un modelo más eficiente estadísticamente y con menor complejidad, conviene optar por el modelo con transformación logarítmica.
En contextos aplicados donde se requiere interpretar los resultados directamente en unidades originales, podría preferirse el modelo cuadrático pese a su ligera complejidad adicional.