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.
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\).
\(a\) Significa la intersección con el eje \(y\)
\(b\) Es la pendiente de la linea de tendencia
En el ejercicio se cargan librerías necesarias para la correcta ejecución de los códigos.
La librería ggplot2 sirve para utilizar funciones que permitan generar gráficos de alta calidad.
library(ggplot2)
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
ggplot(data = datos, mapping = aes(x = edades, y = achaques)) +
geom_point(colour = "blue")
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\).
ggplot(data = datos, aes(x = edades, y = achaques)) +
geom_point(colour = "blue") +
geom_line(aes(x=edades, y = modelo$fitted.values), color = 'red')
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).
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
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.
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
ggplot(data = datos, aes(x = estaturas, y = pesos)) +
geom_point(colour = "blue")
Se observa una importante relación de tipo lineal
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.
ggplot(data = datos, aes(x = estaturas, y = pesos)) +
geom_point(colour = "blue") +
geom_line(aes(x=estaturas, y = modelo$fitted.values), color = 'red')
¿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
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.