Objetivo

Construir e interpretar un modelo de regresión lineal simple a partir de datos con el propósito de predecir valores a la llegada de nuevas observaciones.

Descripción

Este ejercicio describe como construir un modelo de regresión lineal simple a partir de los datos en donde participan dos variables numéricas.

Se cargan dos conjuntos de datos: el primero de ellos son datos simulados a partir de dos variables, edad y achaques en donde se pretende observar la relación lineal entre la edad y el valor numérico de achaques de una persona; el segundo de ellos utiliza datos existentes en los paquetes base de R llamado women que contiene estaturas y pesos de mujeres americanas.

En ambos ejercicios se interpretan los coeficientes, la significación estadística de manera general y como punto de valoración el valor del coeficiente de determinación o R-squared.

En ambos ejercisios, se indican cuáles son las variables dependiente e independiente.

El ejercicio interpreta los coeficientes \(a\) y \(b\) conforme a la fórmula de regresión lineal simple \(Y = a + bx\).

En el ejercicio se cargan librerías necesarias para la correcta ejecución de los códigos.

Desarrollo

Cargar librerías

La librería ggplot2 sirve para utilizar funciones que permitan generar gráficos de alta calidad.

library(ggplot2)

Edad y achaques

Datos

Se construyen unos datos simulados con las variables de edades y achaques, la edades de un rango de 10 a 82 años y los achaques con una escala simula de valores en un rango de 1 a 10, siendo 1 valor numérico de achaques muy bajo y 10 que tiene muchos achaques medido numéricamente.

  • La variable edades es la variable independiente.

  • La variable achaques es la variable dependiente.

edades <- c(10, 15, 20, 30, 40, 56, 67, 82, 45, 46, 58, 66, 70, 19, 43, 45, 46, 46, 47, 48, 42, 23)
achaques <- c(3, 3, 4, 5, 6, 8, 8, 7, 6, 7, 6, 6, 6, 6, 5, 5, 5, 6, 6, 7, 6, 5) 

edades
##  [1] 10 15 20 30 40 56 67 82 45 46 58 66 70 19 43 45 46 46 47 48 42 23
achaques
##  [1] 3 3 4 5 6 8 8 7 6 7 6 6 6 6 5 5 5 6 6 7 6 5
datos <- data.frame(edades, achaques)
datos
##    edades achaques
## 1      10        3
## 2      15        3
## 3      20        4
## 4      30        5
## 5      40        6
## 6      56        8
## 7      67        8
## 8      82        7
## 9      45        6
## 10     46        7
## 11     58        6
## 12     66        6
## 13     70        6
## 14     19        6
## 15     43        5
## 16     45        5
## 17     46        5
## 18     46        6
## 19     47        6
## 20     48        7
## 21     42        6
## 22     23        5

Dispersión de los datos

ggplot(data = datos, mapping = aes(x = edades, y = achaques)) +
  geom_point(colour = "blue")

Modelo de Regresión lineal simple

Se construye el modelo:

modelo <- lm(data = datos, formula = achaques ~ edades)
sm <- summary(modelo) # El resumen de los estadísticos

sm 
## 
## Call:
## lm(formula = achaques ~ edades, data = datos)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.22947 -0.76946  0.04914  0.44519  1.63959 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  3.44985    0.50193   6.873 1.12e-06 ***
## edades       0.05197    0.01057   4.917 8.32e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.9073 on 20 degrees of freedom
## Multiple R-squared:  0.5473, Adjusted R-squared:  0.5247 
## F-statistic: 24.18 on 1 and 20 DF,  p-value: 8.317e-05

Se espera que la variable edad explique al menos por encima del \(50\)% a la variable achaques o lo que es lo mismo, se espera que la edad impacte en un \(50\)% o superior los achaques de las personas.

Para medir esa representatividad es necesario conocer el valor de Multiple R-squared del modelo que significa precisamente cuánto representa una variable independiente a la variable dependiente en un modelo de regresión lineal simple.

sm$r.squared
## [1] 0.5472897

Se observa que con estos datos y usando el modelo de regresión lineal simple, la variabl edad explica el 54.7289733 , lo cual permite suponer su es adecuado o no el modelo conforme lo que se esperab amayor del \(50\) %.

Se presenta la linea de tendencia y los coeficientes \(a\) y \(b\) de la ecuación \(y=a+bx\).

Linea de tendencia

ggplot(data = datos, aes(x = edades, y = achaques)) +
  geom_point(colour = "blue") +
  geom_line(aes(x=edades, y = modelo$fitted.values), color = 'red')

Coeficientes \(a\) y \(b\) de la ecuación

a <- modelo$coefficients[1]
b <- modelo$coefficients[2]
a
## (Intercept) 
##    3.449852
b
##     edades 
## 0.05197433

Los coeficientes representan como debiera ser una predicción de un nuevo valor de \(x_i\), es decir \(Y = a + b \cdot x_i\), también perite graficar la linea de tendencia.

Si \(x_i\) que es la edad vale \(20\), ¿cuánto sería la predicción?: \(a + b \times (20)\)

\(Y = 3.449852 + 0.05197433 \times 20 = 4.489339\)

Y = a + b * 20
Y
## (Intercept) 
##    4.489339

Existe una función predict() en todos los modelo de regresión que permite precisamente predecir valores de \(Y\) a nuevos valor de \(x\), recordando que \(Y\) es el valor a predecir o variable dependiente (achaques) y \(x\) es la variable independiente (edad).

Predicciones para nuevas edades

Se crea un nuevo conjunto de datos y se prueba el modelo para observar las predicciones:

nuevas.edades <- c(20, 55, 60, 20)
nuevas.edades
## [1] 20 55 60 20

Las predicciones de achaques para esas edades son:

predict(object = modelo, newdata = data.frame(edades = nuevas.edades))
##        1        2        3        4 
## 4.489339 6.308440 6.568312 4.489339

Interpretación

Estadísticamente hablando, para este caso con estos datos simulados, si se puediera formular una hipótesis nula \(H0\) de que no hay una representatividad de un \(50\)% la variable edad con respecto a los achaques de una persona y la hipótesis alternativa \(H1\) de que si hay representatividad por encima del \(50\)%, entonces se rechaza la hipótesis nula y se acepta la hipótesis alternativa considerando el estadístico de Multiple R-squared del modelo.

Ejercicio de estatura y peso de women

Los datos

  • Se trata de un conjunto de datos de medidas del cuerpo humano de mujeres americanas, la estatura dada en pulgadas y el peso dado en libras.

  • La variable estaturas es la variable independiente.

  • La variable pesos es la variable dependiente.

datos <- women
names(datos) <- c('estaturas', 'pesos')
datos
##    estaturas pesos
## 1         58   115
## 2         59   117
## 3         60   120
## 4         61   123
## 5         62   126
## 6         63   129
## 7         64   132
## 8         65   135
## 9         66   139
## 10        67   142
## 11        68   146
## 12        69   150
## 13        70   154
## 14        71   159
## 15        72   164

La dispersión de los datos

ggplot(data = datos, aes(x = estaturas, y = pesos)) +
  geom_point(colour = "blue") 

Se observa una importante relación de tipo lineal

El modelo

modelo <- lm(data = datos, formula = pesos ~ estaturas)

sm <- summary(modelo)

sm
## 
## Call:
## lm(formula = pesos ~ estaturas, data = datos)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -1.7333 -1.1333 -0.3833  0.7417  3.1167 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -87.51667    5.93694  -14.74 1.71e-09 ***
## estaturas     3.45000    0.09114   37.85 1.09e-14 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.525 on 13 degrees of freedom
## Multiple R-squared:  0.991,  Adjusted R-squared:  0.9903 
## F-statistic:  1433 on 1 and 13 DF,  p-value: 1.091e-14

Se observa que la variable independiente estaturas representa 99.1% sobre la variable dependiente pesos; esto se deduce del valor estadístico de Multiple R-squared: 0.991.

Linea de tendencia

ggplot(data = datos, aes(x = estaturas, y = pesos)) +
  geom_point(colour = "blue") +
  geom_line(aes(x=estaturas, y = modelo$fitted.values), color = 'red')

Predicciones

¿Cuáles serían predicciones de pesos de mujeres americanas para estaturas de 55, 60 y 65 pulgadas?

nuevas_estaturas <- c(55,60,65)
predict(object = modelo, newdata = data.frame(estaturas = nuevas_estaturas))
##        1        2        3 
## 102.2333 119.4833 136.7333

Interpretación

Conforme a la gráfica de dispersión y linea de tendencia se observa una estrecha relación lineal entre estaturas y pesos, además, la estatura de una mujer americana representa o describe alrededor del 91% el valor del peso de la misma.