Autor: Álvaro Alonso Fernández
Departamento de Ciencias de la Vida
Universidad de Alcalá (España)


Al terminar el tutorial veremos líneas por todos lados


1 Introducción

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.

2 Nuestros datos

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.

3 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.


Hay que pasarse a la verdura…


4 CRÉDITOS

Álvaro Alonso Fernández

Departamento de Ciencias de la Vida

Universidad de Alcalá (España)