La regresión lineal se usa para predecir el valor de una variable de resultado [Y] sobre la base de una o más variables predictoras de entrada [X]. El objetivo es establecer una relación lineal a través de una fórmula matemática entre la (s) variable (s) del predictor y la variable de respuesta, de modo que podamos usar esta fórmula para estimar el valor de la respuesta Y , cuando solo los predictores ( X s ) Los valores son conocidos.
El objetivo de la regresión lineal es modelar una variable continua [Y] como una función matemática de una o más variables [X] , de modo que se pueda usar este modelo de regresión para predecir la [Y] cuando solo se conoce la [X]. Esta ecuación matemática se puede generalizar de la siguiente manera:
donde, βo es la intersección y β1 es la pendiente. En conjunto, se denominan coeficientes de regresión. ϵ es el término de error, la parte de Y que el modelo de regresión no puede explicar.
El objetivo es que el estudiante pueda replicar el código del algoritmo que se le entrega, analice la salida del modelo e identifique las variables más significativas y si el modelo es adecuado para predecir. Uva vez realizada la validación, si el modelo es adecuado para predecir, se pide realizar la predicción de 3 nuevos casos.
En este ejerccio se utilizará el set de datos trees, el cual está disponible en la librería dplyr y que contiene datos sobre la circunferencia (en pulgadas), la altura (en pies) y el volumen (en pies cúbicos) del tronco de árboles de la especia de cerezos. El objetivo de este ejercicio es construir un modelo de regresión lineal para predecir el volumen en función de las variables dadas.
# Cargamos la librería
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
# Cargamos los datos
head(trees)
## Girth Height Volume
## 1 8.3 70 10.3
## 2 8.6 65 10.3
## 3 8.8 63 10.2
## 4 10.5 72 16.4
## 5 10.7 81 18.8
## 6 10.8 83 19.7
# vemos la información general del dataset
str(trees)
## 'data.frame': 31 obs. of 3 variables:
## $ Girth : num 8.3 8.6 8.8 10.5 10.7 10.8 11 11 11.1 11.2 ...
## $ Height: num 70 65 63 72 81 83 66 75 80 75 ...
## $ Volume: num 10.3 10.3 10.2 16.4 18.8 19.7 15.6 18.2 22.6 19.9 ...
# Vemos los estadísticos principales
summary(trees)
## Girth Height Volume
## Min. : 8.30 Min. :63 Min. :10.20
## 1st Qu.:11.05 1st Qu.:72 1st Qu.:19.40
## Median :12.90 Median :76 Median :24.20
## Mean :13.25 Mean :76 Mean :30.17
## 3rd Qu.:15.25 3rd Qu.:80 3rd Qu.:37.30
## Max. :20.60 Max. :87 Max. :77.00
# Diagrama de dispersión y valores de correlación
library(psych)
pairs.panels(trees,gap=0)
#revisión con histogramas de la distribución de los datos
par(mfrow=c(1,3))
hist(trees$Girth, col="green", breaks=15)
hist(trees$Height, col="blue", breaks=15)
hist(trees$Volume, col="blue", breaks=15)
#revisión con histogramas de la distribución de los datos
par(mfrow=c(1,3))
boxplot(trees$Girth, col="green", main = "Circunferencia")
boxplot(trees$Height, col="blue", main = "Altura")
boxplot(trees$Volume, col="orange", main = "Volumen")
Del análisis gráfico anterior, se puede ver que las variables tienen una distribución normal, la varible volumen tiene datos atípicos.
#matriz de correlación
round(cor(x = trees[c(1,2,3)], method = "pearson"),2)
## Girth Height Volume
## Girth 1.00 0.52 0.97
## Height 0.52 1.00 0.60
## Volume 0.97 0.60 1.00
Análisis:
Con base en los resultados que hemos obtenido hasta el momento, se puede concluir que:
# Modelo de regresión lineal
Mod_3 = lm (Volume ~ Girth+Height, data = trees)
print(Mod_3)
##
## Call:
## lm(formula = Volume ~ Girth + Height, data = trees)
##
## Coefficients:
## (Intercept) Girth Height
## -57.9877 4.7082 0.3393
# Veamos los estadísticos del modelo
summary(Mod_3)
##
## Call:
## lm(formula = Volume ~ Girth + Height, data = trees)
##
## Residuals:
## Min 1Q Median 3Q Max
## -6.4065 -2.6493 -0.2876 2.2003 8.4847
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -57.9877 8.6382 -6.713 2.75e-07 ***
## Girth 4.7082 0.2643 17.816 < 2e-16 ***
## Height 0.3393 0.1302 2.607 0.0145 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.882 on 28 degrees of freedom
## Multiple R-squared: 0.948, Adjusted R-squared: 0.9442
## F-statistic: 255 on 2 and 28 DF, p-value: < 2.2e-16
**Análisis:
De acuerdo con los resultados obtenidos del modelo, se pide que realice la predicción para los siguientes casos:
# Definamos las variables
bo = -57.9877
b1 = 0.3393
b2 = 4.7082
#caso 1
altura = 73.4
diametro = 20
nuevo_tree_caso_1 =paste("El volumen el árbol del caso 1 es de:",round( bo + (b1*altura) + (b2*diametro),2))
nuevo_tree_caso_1
## [1] "El volumen el árbol del caso 1 es de: 61.08"
#caso 2
altura = 65.9
diametro = 18.1
nuevo_tree_caso_2 = paste("El volumen el árbol del caso 2 es de:",round( bo + (b1*altura) + (b2*diametro),2))
nuevo_tree_caso_2
## [1] "El volumen el árbol del caso 2 es de: 49.59"
#caso 2
altura = 53.7
diametro = 15.4
nuevo_tree_caso_3 = paste("El volumen el árbol del caso 3 es de:",round( bo + (b1*altura) + (b2*diametro),2))
nuevo_tree_caso_3
## [1] "El volumen el árbol del caso 3 es de: 32.74"