Autor: Álvaro Alonso Fernández
Departamento de Ciencias de la Vida
Universidad de Alcalá (España)
Queremos ver si existe o no relación entre dos variables cuantitativas. Una de ellas es la causante del cambio en la otra. Es decir estudiaremos una relación causa-efecto (por ejemplo una dieta más calórica incrementa el peso corporal). En este caso haremos una regresión lineal. Veamos como se hace.
Queremos analizar si el tipo de dieta incrementa o no el peso de un grupo de animales. Lo primero es ver como son nuestros datos, vamos a utilizar ggplot2:
#Fijamos el directorio de trabajo
setwd(dir = "F:/R/MARKDOWN/regresion")
#leemos el fichero de datos
datosmedidas<-read.csv("regresion.csv", sep=";")
str(datosmedidas)
## 'data.frame': 30 obs. of 2 variables:
## $ dieta: num 2 5.2 6 9.8 8 7 4 8 9.2 6 ...
## $ peso : int 10 14 18 30 22 21 15 19 19 20 ...
head(datosmedidas)
## dieta peso
## 1 2.0 10
## 2 5.2 14
## 3 6.0 18
## 4 9.8 30
## 5 8.0 22
## 6 7.0 21
Veamos la figura solamente con nuestras observaciones:
library(ggplot2)
gr1<-ggplot(datosmedidas, aes(dieta, peso)) +
geom_point()
gr1
Ahora con un modelo líneal con sus límites de confianza al 95%:
gr2<-gr1+
geom_smooth(method = "lm", formula = y ~ x, se = TRUE)
gr2
Parece que hay una cierta relación entre la dieta y el peso, pero toca comprobar si ese modelo de regresión lineal es realmente significativo y que porcentaje explica del cambio en el peso de los animales. Para ello hagamos una regresión lineal.
Lo primero es hacer el modelo para relacionar x con y, es decir la dieta (en x) con el peso (en y):
modelolineal<-lm(datosmedidas$peso ~ datosmedidas$dieta)
modelolineal
##
## Call:
## lm(formula = datosmedidas$peso ~ datosmedidas$dieta)
##
## Coefficients:
## (Intercept) datosmedidas$dieta
## 0.03641 2.24206
En este caso peso=0.03641+2.24206*dieta Con esta fórmula podemos relacionar nuestras dos variables. El primero es el intercepto, es decir el punto donde la recta corta el eje y, y el segundo es la pendiente. Nuestra relación es positiva, es decir una dieta más calórica produce un mayor peso.
¿Se cumple el requisito de la normalidad de los residuos del modelo? para ello:
shapiro.test(modelolineal$residuals)
##
## Shapiro-Wilk normality test
##
## data: modelolineal$residuals
## W = 0.95954, p-value = 0.3014
Nuestros datos son normales. Bien¡¡, por esta vez se cumple la normalidad (el p valor es mayor de 0.05) y el resultado de nuestro análisis es mucho más fiable.
¿Qué porcentaje de la varianza observada en el peso es explicada por la dieta?
summary(modelolineal)
##
## Call:
## lm(formula = datosmedidas$peso ~ datosmedidas$dieta)
##
## Residuals:
## Min 1Q Median 3Q Max
## -7.2467 -3.0101 -0.9729 3.4715 7.9914
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.03641 1.81073 0.020 0.984
## datosmedidas$dieta 2.24206 0.29287 7.655 2.44e-08 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 4.087 on 28 degrees of freedom
## Multiple R-squared: 0.6767, Adjusted R-squared: 0.6652
## F-statistic: 58.61 on 1 and 28 DF, p-value: 2.438e-08
EL p menor de 0.05 de datosmedidas$dieta nos indica la influencia significativa de esta variable en el peso. Además, el R-squaredde 0.67 nos indica que la dieta explica el 67 % de la varianza en el peso, lo cual nos reafirma las sospechas del principio.
Espero que sea de utilidad.
Departamento de Ciencias de la Vida
Universidad de Alcalá (España)