Como ejemplo de cómo proceder con esta tarea analizaremos el conjunto de datos iris
que viene incluida en R:
data(iris)
La base de datos iris
contiene las mediciones en centímetros de las variables longitud (Length
) y ancho (Width
) de los pétalos (Petal
) y sépalos (Sepal
) de 50 flores de cada una de las 3 especies (Species
) del género Iris: Iris setosa, Iris versicolor e Iris virginica. Para obtener más información acerca de la base de datos iris
tipea ?iris
en la línea de comando de R.
summary(iris)
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
## 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
## Median :5.800 Median :3.000 Median :4.350 Median :1.300
## Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
## 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
## Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
## Species
## setosa :50
## versicolor:50
## virginica :50
##
##
##
?iris
Analizaremos la relación existente entre la longitud del pétalo (Petal.Length
) y la longitud del sépalo (Sepal.Length
) para todas las especies de Iris. El análisis incluirá 4 etapas:
Primero generaremos un gráfico de dispersión mostrando la relación entre la longitud del pétalo y la longitud del sépalo. Nombramos los ejes con descripciones apropiadas.
plot(Petal.Length ~ Sepal.Length, data = iris, xlab = "Longitud del sépalo", ylab = "Longitud del pétalo")
En este contexto asumimos que x
(i.e., Petal.Length
) es la variable predictora e y
(i.e., Sepal.Length
) es la variable desenlace. Cabe señalar que esta no es estrictamente una relación de causalidad, y que las denominaciones de variable predictora y variable desenlace son meramente descriptivas.
A continuación dibujaremos una línea de regresión calculada a partir de la suma de cuadrados mínimos usando la función abline
aplicada a un objetivo de clase lm
. Este objeto de clase lm
consiste en una lista de 12 elementos que describen el modelo lineal.
# Calcular los parámetros del modelo lineal
ab_fit <- lm(Petal.Length ~ Sepal.Length, data = iris)
# Plotear la línea de regresión estimada sobre el gráfico de dispersión
plot(Petal.Length ~ Sepal.Length, data = iris, xlab = "Longitud del sépalo", ylab = "Longitud del pétalo")
abline(ab_fit, col = "skyblue", lwd = 3)
Imprimimos el resumen de los estadísticos del modelo lineal:
# Imprimir los estadísticos del modelo lineal
summary(ab_fit)
##
## Call:
## lm(formula = Petal.Length ~ Sepal.Length, data = iris)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.47747 -0.59072 -0.00668 0.60484 2.49512
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -7.10144 0.50666 -14.02 <2e-16 ***
## Sepal.Length 1.85843 0.08586 21.65 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.8678 on 148 degrees of freedom
## Multiple R-squared: 0.76, Adjusted R-squared: 0.7583
## F-statistic: 468.6 on 1 and 148 DF, p-value: < 2.2e-16
Vemos que podemos construir la ecuación linea de la longitud del pétalo usando los estimados de los coeficientes \(\beta\) del intercepto y la longitud del śepalo:
\[\text{Petal.Length } = -7.10144 + 1.85843(\text{Sepal.Length})\]
El valor de \(R^2 = 0.76\) indica que el 76% de la variabilidad en la longitud del pétalo puede ser explicada por la variabilidad en la longitud del sépalo. Vemos que la asociación entre la longitud del pétalo y la longitud del sépalo es estadísticamente significantiva, con valor \(P < 2e-16\).
La validez del modelo de regresión lineal depende del cumplimiento de 3 condiciones sin las cuales los estadísticos estimados y la ecuación lineal no son confiables. Verificamos el cumplimiento de estas condiciones a continuacion:
1) Asociación lineal entre las variables
Para esto verificamos visualmente que una línea recta representa la mejor interpretación de la relación entre las variables usando el gráfico de dispersión anteriormente. Asimismo, un gráfico de dispersión de los residuales sobre la variable predictora nos ayudaría a determinar si la relación es lineal.
plot(ab_fit$residuals ~ iris$Petal.Length, xlab = "Longitud del pétalo", ylab = "Residuales")
abline(h = 0, col = "red", lwd = 2, lty = 2)
Una relación lineal será evidencia por una distribución simétrica de los residuales alrededor de la línea roja.
2) Normalidad de los residuales
Para verificar si los residuales siguen una distribución normal se puede utilizar un histograma:
hist(ab_fit$residuals, xlab = "Residuales", ylab = "Frecuencia", main = "")
Un gráfico Q-Q también sería muy útil para determinar si los residuales siguen una distribución normal:
qqnorm(ab_fit$residuals, xlab = "Cuantiles teóricos", ylab = "Cuantiles muestrales")
qqline(ab_fit$residuals, lwd = 2, lty = 2, col = "red")
3) Variabilidad constante
Para verificar si los residuales cumplen con esta condición se puede utilizar el mismo gráfico de dispersión de los residuales sobre la variable predictora utilizado previamente:
plot(ab_fit$residuals ~ iris$Petal.Length, xlab = "Longitud del pétalo", ylab = "Residuales")
abline(h = 0, col = "red", lwd = 2, lty = 2)
La variación de los residuales debería ser homogénea alrededor de la línea roja.
mtcars
que viene incluida en R. Revisa la descripción de la base de datos con ?mtcars
y estudia la estructura de las variables con str()
y summary()
.hp
como variable predictora y la variable mpg
como variable desenlance para construir un modelo de regresión lineal que permita predecir el consumo del automóvil basándose en la potencia del motor. Para esto, redacta un informe que contenga (al menos) 5 secciones: