El análisis de regresión lineal simple es una técnica estadística que se utiliza para modelar la relación entre una variable dependiente y una variable independiente. En este documento se presenta un ejemplo de cómo realizar un análisis de regresión lineal simple en R.
La ecuación de regresión lineal simple es:
\[Y = \alpha + \beta X + \epsilon\]
Donde:
\(Y\) es la variable dependiente.
\(X\) es la variable independiente.
\(\alpha\) es la intersección de la recta de regresión con el eje Y.
\(\beta\) es la pendiente de la recta de regresión.
\(\epsilon\) es el error aleatorio o residual.
Estimar la ecuación de regresión mediante estimadores de \(\alpha\) (a) y \(\beta\) (b) a partir de una muestra y generar intervalos de confianza para los mismos.
Estimar que tanto está la variable dependiente controlada por la variable independiente, en otras palabras que tanto la variación en y se explica por la variación en x.
Usar la ecuación de regresión para predecir valores de y a partir de valores de x.
Linealidad: La relación entre las variables es lineal.
Homocedasticidad: La varianza de los residuales es constante para los valores de x. Esto es equivalente a la homogeneidad de varianza en los grupos del ANOVA.
Normalidad: Los residuales siguen una distribución normal.
Independencia: Los residuales son independientes entre sí.
Para estimar los parámetros de la regresión, se utiliza el método de mínimos cuadrados. El objetivo es encontrar los valores de \(\alpha\) y \(\beta\) que minimizan la suma de los cuadrados de los residuos:
\[\sum_{i=1}^{n} (Y_i - \hat{Y}_i)^2\]
Donde:
Para calcular los coeficientes de regresión manualmente, se utilizan las siguientes fórmulas:
\[\beta = \frac{\sum{(X_i - \bar{X})(Y_i - \bar{Y})}}{\sum{(X_i - \bar{X})^2}}\]
\[\alpha = \bar{Y} - \beta \bar{X}\]
Donde:
Vamos a usar los datos de la longitud (cm) del ala derecha de gorriones de diferentes edades (días). En este caso, podemos asumir que la variable dependiente es la longitud del ala y la independiente, la edad de las aves.
edad <- c(3.0,4.0,5.0,6.0,8.0,9.0,10.0,11.0,12.0,14.0,15.0,16.0,17.0)
l.ala <- c(1.4,1.5,2.2,2.4,3.1,3.2,3.2,3.9,4.1,4.7,4.5,5.2,5.0)
sparrow <- data.frame(edad,l.ala)
#tabla de datos
knitr::kable(sparrow, col.names = c("Edad (días)", "Longitud del ala (cm)"), caption = 'Tabla 1. Longitud del ala derecha de gorriones de diferente edad')
Edad (días) | Longitud del ala (cm) |
---|---|
3 | 1.4 |
4 | 1.5 |
5 | 2.2 |
6 | 2.4 |
8 | 3.1 |
9 | 3.2 |
10 | 3.2 |
11 | 3.9 |
12 | 4.1 |
14 | 4.7 |
15 | 4.5 |
16 | 5.2 |
17 | 5.0 |
Gráfica de dispersión
# Gráfica de dispersión
library(ggplot2)
ggplot(sparrow, aes(x = edad, y = l.ala)) +
geom_point() +
labs(x = "Edad (días)", y = "Longitud del ala (cm)")
Figura 1. Gráfica de dispersión de la longitud del ala derecha de gorriones en función de la edad.
Cálculo de los coeficientes de regresión con R
Para calcular los coeficientes de regresión con R, se utiliza la
función lm()
.
# Ajuste del modelo de regresión lineal
modelo <- lm(l.ala ~ edad, data = sparrow)
# Coeficientes de regresión
coeficientes <- coef(modelo)
summary(modelo)
##
## Call:
## lm(formula = l.ala ~ edad, data = sparrow)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.30699 -0.21538 0.06553 0.16324 0.22507
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.71309 0.14790 4.821 0.000535 ***
## edad 0.27023 0.01349 20.027 5.27e-10 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2184 on 11 degrees of freedom
## Multiple R-squared: 0.9733, Adjusted R-squared: 0.9709
## F-statistic: 401.1 on 1 and 11 DF, p-value: 5.267e-10
Los coeficientes de regresión son \(\alpha = 0.7130945\) y \(\beta = 0.270229\).
Gráfica de la recta de regresión con la ecuación y el intervalo de confianza
# Gráfica de la recta de regresión con ecuación
eq <- substitute(
italic(y) == a + b %.% italic(x),
list(
a = round(as.numeric(coeficientes[1]), 3),
b = round(as.numeric(coeficientes[2]), 3)
)
)
# plot
ggplot(sparrow, aes(x = edad, y = l.ala)) +
geom_point() +
geom_smooth(method = "lm", se = TRUE, color = "red") +
annotate("text", x = 5.5, y = 5, label = as.character(as.expression(eq)), parse = TRUE) +
labs(x = "Edad (días)", y = "Longitud del ala (cm)")
## `geom_smooth()` using formula = 'y ~ x'
Figura 2. Gráfica de dispersión de la longitud del ala derecha de gorriones en función de la edad con la recta de regresión, intervalo de confianza (95%) y la ecuación de la recta.
Intervalo de confianza para la pendiente (\(\beta\))
# Intervalo de confianza para la pendiente
confint(modelo, "edad", level = 0.95)
## 2.5 % 97.5 %
## edad 0.2405308 0.2999272
Prueba de hipótesis para la pendiente
Para realizar una prueba de hipótesis para la pendiente, se plantean las siguientes hipótesis:
# Prueba de hipótesis para la pendiente
summary(modelo)$coefficients
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.7130945 0.14790445 4.821319 5.347485e-04
## edad 0.2702290 0.01349312 20.027169 5.267053e-10
El valor p para la pendiente es 5.2670535^{-10}.
Prueba del supuesto de heterocedasticidad
Para probar el supuesto de homocedasticidad, se puede realizar un análisis de los residuales.
# Análisis de los residuales
residuos <- residuals(modelo)
plot(modelo, which = 1)
# Prueba de Breusch-Pagan
library(lmtest)
bptest(modelo)
##
## studentized Breusch-Pagan test
##
## data: modelo
## BP = 1.6349, df = 1, p-value = 0.201
Aunque el gráfico de residuos vs. valores ajustados muestra cierta dispersión, la prueba de Breusch-Pagan no rechaza la hipótesis nula de homocedasticidad.
Predicción de la longitud del ala para una edad dada con intervalo de confianza
Para predecir la longitud del ala para una edad dada, se utiliza la
función predict()
.
# Predicción de la longitud del ala para una edad dada
nueva_edad <- 7
prediccion <- predict(modelo, newdata = data.frame(edad = nueva_edad), interval = "confidence", level = 0.95)
prediccion
## fit lwr upr
## 1 2.604698 2.444344 2.765051