Modelo de regresión lineal multiple

La regresión lineal múltiple Un modelo de regresión lineal múltiple es una herramienta estadística que permite analizar y predecir una variable de interés (variable dependiente) a partir de varias otras variables (variables independientes). Se usa cuando queremos saber cómo influyen varios factores en una sola respuesta.

Se utiliza para:

-Predecir valores (por ejemplo, ingreso según edad, educación y experiencia).

-Identificar qué variables influyen más en el resultado.

-Explicar relaciones lineales entre varias variables.


# Datos
Horas_sueno <- c(3,2,1,6,8,8,9,5,6,6,7,8,7,8,5,3,2,1,6,8,8,9,5,6,6,7,8,7,8,5,8,8,8,7,7,6,7)
Hora_estudio <- c(2,3,1.5,4,3.5,5,6,2.5,7,8,1,4.5,5.5,6.5,7.5,3,2,4.2,3.8,5.8,6,8,4,5,5,6,9,6,8,4,8,8,9,7,6,5,4)
promedio <- c(60, 58, 50, 70, 75, 80, 85, 65, 78, 88, 55, 72, 76, 84, 90, 62, 59, 61, 74, 81, 83, 89, 68, 73, 75, 77, 91, 79, 86, 70, 87, 88, 89, 85, 84, 82, 80)

# Nueva variable: Horas de uso de internet
Horas_internet <- c(5,6,7,3,2,1,1,4,2,1,6,3,2,2,1,5,6,5,3,2,1,1,4,3,3,2,1,2,1,3,1,1,1,2,2,3,2)

# Crear data frame
datos <- data.frame(Horas_sueno, Hora_estudio, Horas_internet, promedio)

# Ver primeras filas
head(datos)
##   Horas_sueno Hora_estudio Horas_internet promedio
## 1           3          2.0              5       60
## 2           2          3.0              6       58
## 3           1          1.5              7       50
## 4           6          4.0              3       70
## 5           8          3.5              2       75
## 6           8          5.0              1       80

Correlación

La correlación es una medida estadística que indica la fuerza y la dirección de una relación lineal entre dos variables cuantitativas.

Tipos de correlación:

-Positiva: cuando una variable aumenta, la otra también tiende a aumentar.

-Negativa: cuando una variable aumenta, la otra tiende a disminuir.

-Nula o débil: no hay una relación lineal clara entre las variables.

cor(datos$Hora_estudio,datos$promedio)
## [1] 0.9197599
# [1] 0.9197599
## Interpretacion: existe una correlacion fuerte y positiva,es decir a mayor horas de estudio mayor sera el promedio.

cor(datos$Horas_sueno, datos$promedio)
## [1] 0.777676
# [1] 0.777676
## Interpretacion: existe una correlacion fuerte y positivo, es decir a mayor horas de sueño mayor sera el promedio

cor(datos$Horas_internet,datos$promedio)
## [1] -0.958969
# [1] -0.958969
## Interpretacion: existe una correlacion fuerte y negativa, es decir a mayor horas de internet menor el promedio

Modelo de Regresion Multiple

modelo <- lm(promedio ~ Horas_sueno + Hora_estudio + Horas_internet, data = datos)


# Resumen del modelo
summary(modelo)
## 
## Call:
## lm(formula = promedio ~ Horas_sueno + Hora_estudio + Horas_internet, 
##     data = datos)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -3.9257 -1.2724 -0.2788  0.8921  7.7416 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)     74.3183     5.4318  13.682 3.73e-15 ***
## Horas_sueno      0.2575     0.3629   0.710    0.483    
## Hora_estudio     1.9452     0.4088   4.758 3.75e-05 ***
## Horas_internet  -3.7769     0.7098  -5.321 7.16e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.506 on 33 degrees of freedom
## Multiple R-squared:  0.953,  Adjusted R-squared:  0.9487 
## F-statistic:   223 on 3 and 33 DF,  p-value: < 2.2e-16
## Interpretacion Modelo
#Intercepto ( 74.3): indica el promedio cuando todas las variables independientes son cero (hora de sueño, hora de estudio y horas de internet)
#Horas_sueno (0.2575, p 0.483): por cada hora de sueño, el promedio aumenta 0.25, lo que no representa un aumento significativo.
#Horas_estudio ( 1.94, p < 0.001) : por cada hora que se estudie, el promedio aumenta 1.94, mostrando una relacion significativa.
#Horas _internet(-3.77, p < 0.001): indica que por cada hora de internet el promedio disminuye 3.77, teniendo una relacion significativa.

Ecuacion del Modelo Ajustado

modelo <- lm(promedio ~ Horas_sueno + Hora_estudio + Horas_internet, data = datos)
summary(modelo)
## 
## Call:
## lm(formula = promedio ~ Horas_sueno + Hora_estudio + Horas_internet, 
##     data = datos)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -3.9257 -1.2724 -0.2788  0.8921  7.7416 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)     74.3183     5.4318  13.682 3.73e-15 ***
## Horas_sueno      0.2575     0.3629   0.710    0.483    
## Hora_estudio     1.9452     0.4088   4.758 3.75e-05 ***
## Horas_internet  -3.7769     0.7098  -5.321 7.16e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.506 on 33 degrees of freedom
## Multiple R-squared:  0.953,  Adjusted R-squared:  0.9487 
## F-statistic:   223 on 3 and 33 DF,  p-value: < 2.2e-16
cat("promedio =", round(coef(modelo)[1], 2), "+",
    round(coef(modelo)[2], 2), "* Horas_sueno +",
    round(coef(modelo)[3], 2), "* Hora_estudio +",
    round(coef(modelo)[4], 2), "* Horas_internet")
## promedio = 74.32 + 0.26 * Horas_sueno + 1.95 * Hora_estudio + -3.78 * Horas_internet
## promedio = 74.32 + 0.26 * Horas_sueno + 1.95 * Hora_estudio + -3.78 * Horas_internet

Diagnostico del Modelo

#Grafico de residuos vs valores ajustados

plot(modelo$fitted.values, resid(modelo),
     xlab = "Valores Ajustados",
     ylab = "Residuos",
     main = "Gráfico de residuos vs. valores ajustados",
     pch = 20, col = "yellow")
abline(h = 0, col = "green", lty = 3)

##Intepretacion: Como se observa en el gráfico, la mayoría de los residuos se encuentran dispersos aleatoriamente alrededor de la línea horizontal en cero, sin formar patrones sistemáticos. Esta distribución indica que no existe una tendencia clara en los residuos, lo cual es deseable, ya que sugiere que el supuesto de homocedasticidad y la ausencia de relación no modelada están razonablemente cumplidos.

Normalidad de Residuos

residuos <- resid(modelo)

# Histograma de los residuos
hist(residuos,
     breaks = 12,
     col = "purple",
     main = "Histograma de los Residuos",
     xlab = "Residuos",
     ylab = "Frecuencia")

# Superponer curva normal teórica

xfit <- seq(min(residuos), max(residuos), length = 100)
yfit <- dnorm(xfit, mean = mean(residuos), sd = sd(residuos))
yfit <- yfit * diff(hist(residuos, plot = FALSE)$breaks)[1] * length(residuos)
lines(xfit, yfit, col = "pink", lwd = 2)

## Interpretacion: La forma de distribución observada en la gráfica sugiere que los residuos no siguen una distribución normal, lo cual podría afectar la validez de las pruebas inferenciales basadas en el modelo.

Prueba de Shapiro-Wilk de los Residuos

residuos <- resid(modelo)

# Prueba de Shapiro-Wilk
shapiro.test(residuos)
## 
##  Shapiro-Wilk normality test
## 
## data:  residuos
## W = 0.93815, p-value = 0.04029
#[1] p-value = 0.04029

##Interpretacion: Se observa que los residuos no parecen ajustarse a una distribución normal, lo cual podría comprometer algunos supuestos del modelo, especialmente aquellos relacionados con la validez de las inferencias estadísticas.

Prueba de Breusch-Pagan (Homocedasticidad)

#install.packages("lmtest")   
library(lmtest)
## Warning: package 'lmtest' was built under R version 4.4.2
## Cargando paquete requerido: zoo
## Warning: package 'zoo' was built under R version 4.4.2
## 
## Adjuntando el paquete: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
bptest(modelo)
## 
##  studentized Breusch-Pagan test
## 
## data:  modelo
## BP = 0.73424, df = 3, p-value = 0.8651
#{1} p-value = 0.8651
##Interpretacion:como p es 0.8651 que es mayor a 0.05 no se rechazamos la hipotesis nula de homocedaticidad, por lo que se infiere que no hay heterocedasticidad en el modelo.

Prueba de Autocorrelacion Durbin-Watson

#install.packages("lmtest")
library(lmtest)


dwtest(modelo)
## 
##  Durbin-Watson test
## 
## data:  modelo
## DW = 1.3141, p-value = 0.01017
## alternative hypothesis: true autocorrelation is greater than 0
##Interpretacion: como el valor de Dw esta cercano a 2 nos indica Autocorrelacion de los residuos, violando un supuesto de la regresion lineal.

Multicolinealidad

#install.packages("car")  
library(car)
## Warning: package 'car' was built under R version 4.4.2
## Cargando paquete requerido: carData
## Warning: package 'carData' was built under R version 4.4.2
vif(modelo)
##    Horas_sueno   Hora_estudio Horas_internet 
##       3.599186       4.420278       8.642497
# #{1} Hora_sueno= 3.599186 Hora_estudio= 4.420278 Hora_internet=8.642497

##Interpretacion: hora de sueno y hora de estudio presentan una correlacion cercana, sin embargo Hora internet presenta un valor mayor indicando multicolinealidad.

Conclusion Final

El modelo de regresión muestra un desempeño aceptable en términos generales; sin embargo, se identifican dos aspectos problemáticos: la presencia de autocorrelación positiva en los residuos y una alta multicolinealidad asociada a la variable Horas_internet. Estos factores pueden afectar la validez de las inferencias estadísticas. Se recomienda revisar la especificación del modelo, considerar la eliminación o transformación de variables colineales, y explorar métodos alternativos de modelado.