Se observa el comportamiento de los datos
# Cargamos base de datos
library(readxl)
Ejemplo <- read_excel("C:/Users/house/Downloads/Ejemplo.xlsx")
# Grafico de dispersión
pairs(Ejemplo$promedio~Ejemplo$Horas_sueno)
De acuerdo con la gráfica de dispersión se puede observar que al aumentar las horas de sueño, el promedio tambien aumenta
#Prueba de normalidad para la variable independiente
shapiro.test(Ejemplo$Horas_sueno)
##
## Shapiro-Wilk normality test
##
## data: Ejemplo$Horas_sueno
## W = 0.8646, p-value = 0.0004204
#Prueba de normalidad para la variable dependiente
shapiro.test(Ejemplo$promedio)
##
## Shapiro-Wilk normality test
##
## data: Ejemplo$promedio
## W = 0.92264, p-value = 0.01506
Ambas variables se distribuyen de manera normal, ya que el valor de p según la prueba de Shapiro-Wilk para la variable de horas de sueños es 0.0004 y la variable del promedio es 0.015.
Se determinara la relación entre ambas variables, de esta manera se aplica la prueba de correlación de Pearson, Spearman y Kendall.
# Correlación de Person
cor.test(Ejemplo$Horas_sueno,Ejemplo$promedio, method="pearson")
##
## Pearson's product-moment correlation
##
## data: Ejemplo$Horas_sueno and Ejemplo$promedio
## t = 13.273, df = 34, p-value = 5.25e-15
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.8395419 0.9564076
## sample estimates:
## cor
## 0.9155509
# Correlación de Spearman
cor.test(Ejemplo$Horas_sueno,Ejemplo$promedio,method="spearman") # Los datos no son ordinales y son normales por ende, no se puede calcular el valor exacto de p-value
## Warning in cor.test.default(Ejemplo$Horas_sueno, Ejemplo$promedio, method =
## "spearman"): Cannot compute exact p-value with ties
##
## Spearman's rank correlation rho
##
## data: Ejemplo$Horas_sueno and Ejemplo$promedio
## S = 932.86, p-value = 1.568e-12
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho
## 0.8799402
# Correlación de Kendall
cor.test(Ejemplo$Horas_sueno,Ejemplo$promedio, method="kendall") # Los datos no son ordinales y son normales por ende, no se puede calcular el valor exacto de p-value
## Warning in cor.test.default(Ejemplo$Horas_sueno, Ejemplo$promedio, method =
## "kendall"): Cannot compute exact p-value with ties
##
## Kendall's rank correlation tau
##
## data: Ejemplo$Horas_sueno and Ejemplo$promedio
## z = 6.0936, p-value = 1.104e-09
## alternative hypothesis: true tau is not equal to 0
## sample estimates:
## tau
## 0.7837403
La relación entre las horas de sueño y el promedio es fuerte ya que el coeficiente de pearson arrojo 0.9155.n
#Ajustar modelo
modelo<-lm(Ejemplo$promedio ~ Ejemplo$Horas_sueno)
#Resumen del modelo
summary(modelo)
##
## Call:
## lm(formula = Ejemplo$promedio ~ Ejemplo$Horas_sueno)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.49438 -0.32849 -0.06144 0.25445 0.92268
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.99204 0.20551 4.827 2.87e-05 ***
## Ejemplo$Horas_sueno 0.41706 0.03142 13.273 5.25e-15 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.4109 on 34 degrees of freedom
## Multiple R-squared: 0.8382, Adjusted R-squared: 0.8335
## F-statistic: 176.2 on 1 and 34 DF, p-value: 5.25e-15
Analisis de residuales:
Min: El error más negativo fue -0.49
1Q: El 25% de los residuos estan por debado de -0.32
Mediana: El residuo tipico(mediano)fue -0,061 (Casi cero, muy bueno)
3Q: El 75% de los residuos están por debajo de 0.25
Max: El error más grande fue 0.92
Residual standard error: \[0.41\] Se puede evidenciar que existe un error estandar bajo, lo cual indica la existencia de errores pequeños y consistentes.De igual forma el promedio del tamaño de los errores es 0.41.
Multiple R-squared:
\[R^2=0.8382\] Con un \(83\%\) de la variabilidad del promedio esta relacionada con la Hora de Sueño.
\[R^2(Ajustado)=0.8335\] Al ajustar el modelo, con un \(83\%\) de la variabilidad del promedio esta relacionada con la Hora de Sueño.
\[F-statistic: \quad 176.2 \quad on \quad 1 \quad and \quad 34 DF,\quad p-value:\quad 5.25e-15\] El modelo es altamente significativo, indicando que la variable independiente realmente ayuda a predecir la variable dependiente.
\[ y=0.41706x+0.992 \] Donde \(x\) son las Horas de sueño y \(y\) es el Promedio, por otra parte cuando las horas de sueño son 0, el promedio es de 0.99 \(\approx\) 1 y el incremento en el promedio por cada hora extra de sueño es de 0.41706.
Se realizaran predicciones:
\[\hat{y_i} = 0.9916 + 0.4179 × (Horas \quad de \quad Sueño)\] El residuo para cualquier individuo:
\[e_i = yi − \hat{y_i}\]
# Ajustar el modelo
modelo <- lm(Ejemplo$promedio ~ Ejemplo$Horas_sueno)
# Predicciones
predicciones <- predict(modelo)
# Residuos
residuos <- residuals(modelo)
# Crear una tabla
resultado <- data.frame(
"Horas de Sueno" = Ejemplo$Horas_sueno,
"Promedio Real" = Ejemplo$promedio,
"Prediccion" = predicciones,
Residuo = residuos
)
print(resultado)
## Horas.de.Sueno Promedio.Real Prediccion Residuo
## 1 3 2.5 2.243210 0.2567901
## 2 2 2.0 1.826153 0.1738467
## 3 1 1.0 1.409097 -0.4090968
## 4 6 3.0 3.494379 -0.4943795
## 5 8 4.0 4.328493 -0.3284925
## 6 8 4.5 4.328493 0.1715075
## 7 9 5.0 4.745549 0.2544509
## 8 5 3.5 3.077323 0.4226771
## 9 6 3.0 3.494379 -0.4943795
## 10 6 3.2 3.494379 -0.2943795
## 11 7 3.8 3.911436 -0.1114360
## 12 8 4.0 4.328493 -0.3284925
## 13 7 4.0 3.911436 0.0885640
## 14 8 5.0 4.328493 0.6715075
## 15 5 4.0 3.077323 0.9226771
## 16 3 2.5 2.243210 0.2567901
## 17 2 2.0 1.826153 0.1738467
## 18 1 1.0 1.409097 -0.4090968
## 19 6 3.0 3.494379 -0.4943795
## 20 8 4.0 4.328493 -0.3284925
## 21 8 4.5 4.328493 0.1715075
## 22 9 5.0 4.745549 0.2544509
## 23 5 3.5 3.077323 0.4226771
## 24 6 3.0 3.494379 -0.4943795
## 25 6 3.2 3.494379 -0.2943795
## 26 7 3.8 3.911436 -0.1114360
## 27 8 4.0 4.328493 -0.3284925
## 28 7 4.0 3.911436 0.0885640
## 29 8 5.0 4.328493 0.6715075
## 30 5 4.0 3.077323 0.9226771
## 31 8 4.5 4.328493 0.1715075
## 32 8 4.2 4.328493 -0.1284925
## 33 8 4.1 4.328493 -0.2284925
## 34 7 3.9 3.911436 -0.0114360
## 35 7 3.6 3.911436 -0.3114360
## 36 6 3.0 3.494379 -0.4943795
De acuerdo con la tabla anterior, se muestra que cuando un estudiante duerme 6 horas, su promedio real es de 3.0 y por medio del modelo obtenido se predice que su nota promedio es 3.5, donde el residuo es de -0.49, teniendo en cuenta que la nota promedio observada es menor a la nota promedio estimada.Por otra parte un estudiante que tenga 2 horas de dormir, tendra en promedio una nota de 2.0, luego se precide a partir del modelo que su nota promedio es de 1.8 con un residuo de 0.17, en este caso la nota promedio observada es mayor a la nota promedio estimada.
Verificaciónn de Supuestos en el Modelo de Regresión Lineal
La relación entre la variable independiente (Horas de sueño) y la dependiente (promedio) debe ser lineal, es decir, describirse bien con una lınea recta.
plot(Ejemplo$Horas_sueno, Ejemplo$promedio, main = "Relacion Horas de Sueno vs Promedio", xlab = "Horas de Sueno", ylab = "Promedio")
abline(modelo, col = "red", lwd = 2)
De acuerdo con la gráfica, se puede comprobar que los datos no tienen un comportamiento lineal, ya que existen valores que no se encuentran sobre la linea de tendencia.
Los residuos (errores) del modelo deben ser independientes entre si, sin autocorrelación.
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.3
##
## Adjuntando el paquete: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
dwtest(modelo)
##
## Durbin-Watson test
##
## data: modelo
## DW = 0.99102, p-value = 0.0003737
## alternative hypothesis: true autocorrelation is greater than 0
Test de Durbin-Watson
Hipótesis nula (H₀): No hay autocorrelación en los residuos.(Los errores son independientes), donde p-value > 0.05
Hipótesis alternativa (H₁): Hay autocorrelación en los residuos. (Normalmente se prueba autocorrelación positiva, pero también se puede investigar negativa), donde p-value < 0.05
Decisión: Dado que el p-valor = 0.0003 es menor a 0.05, rechazamos la hipotesis nula y aceptamos la alternativa, donde se confirma que existe dependencia entre los errores.
La varianza de los residuos debe ser constante para todos los valores de la variable independiente.
# Graficar residuos vs. valores ajustados
plot(modelo$fitted.values, resid(modelo),
xlab = "Valores ajustados", # fitted values
ylab = "Residuos",
main = "Grafico de residuos vs. valores ajustados",
pch = 19, col = "pink")
abline(h = 0, col = "purple", lty = 2)
Los valores de los residuales deberian agruparse sobre la linea de referencia (0), que indica si el modelo de regresión es bueno, donde se evidencia que los valores no presentan un patron definido, es decir estan dispersos de manera homogenea. Por tanto se concluye que hay homoscedasticidad.
library(lmtest)
bptest(modelo)
##
## studentized Breusch-Pagan test
##
## data: modelo
## BP = 0.47948, df = 1, p-value = 0.4887
Test de Breusch
La hipótesis nula (H₀):Los residuos son homocedásticos (es decir, tienen varianza constante), donde el p-value > 0.05
La hipótesis alternativa (H₁): Hay heterocedasticidad (la varianza de los errores no es constante),donde el p-value < 0.05
Decisión: Dado que el p-valor = 0.4887 es mayor a 0.05, no rechazamos la hipótesis nula, por lo tanto los residuos son homoscedásticos.
Los residuos deberían seguir una distribución normal.
hist(modelo$residuals,
breaks = 10,
probability = TRUE, # Para que el eje Y sea densidad
main = "Histograma de los Residuos con Curvas de Densidad",
xlab = "Residuos",
col = "lightgray",
border = "white")
# Línea de densidad de los residuos
lines(density(modelo$residuals),
col = "purple",
lwd = 2)
# Línea de distribución normal teórica
curve(dnorm(x, mean = mean(modelo$residuals), sd = sd(modelo$residuals)),
col = "blue",
lwd = 2,
lty = 2,
add = TRUE)
Con base en el histograma se puede identificar que no existe normalidad en el comportamiento de los residuos.
qqnorm(modelo$residuals)
qqline(modelo$residuals, col = "red", lwd = 2)
Según la grafica del QQ-Plot, se demuestra que los residuos no siguen una tendencia lineal, donde hay residuos atipicos y otros tienen un comportamiento escalonado.
shapiro.test(modelo$residuals)
##
## Shapiro-Wilk normality test
##
## data: modelo$residuals
## W = 0.91761, p-value = 0.01071
Test Shapiro Wilk
La hipótesis nula (H): Los errores siguen una distribución normal, donde el p-value > 0.05
La hipótesis alternativa (H₁):Los errores no siguen una distribución normal,donde el p-value < 0.05
Decisión: Dado que el p-valor = 0.01 es menor a 0.05, rechazamos la hipotesis nula, por lo tanto los errores no tienen una distribución normal.