library(readr)
#paquetes
library(readr)
library(ggplot2)
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
library(broom)
library(ggpubr)
library(lmtest)
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
library(car)
## Loading required package: carData
##
## Attaching package: 'car'
## The following object is masked from 'package:dplyr':
##
## recode
#datos
datos_estudio_universitarios<- read_csv("datos_estudio_universitarios.csv")
## Rows: 100 Columns: 5
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## dbl (5): estudiante, horas_estudio, edad, materias, trabaja
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
summary(datos_estudio_universitarios)#analisis descriptivo de los datos
## estudiante horas_estudio edad materias trabaja
## Min. : 1.00 Min. : 11.00 Min. :18.00 Min. :3.0 Min. :0.00
## 1st Qu.: 25.75 1st Qu.: 33.75 1st Qu.:21.00 1st Qu.:3.0 1st Qu.:0.00
## Median : 50.50 Median : 56.50 Median :24.00 Median :5.0 Median :0.00
## Mean : 50.50 Mean : 55.66 Mean :24.04 Mean :4.8 Mean :0.43
## 3rd Qu.: 75.25 3rd Qu.: 77.25 3rd Qu.:27.00 3rd Qu.:6.0 3rd Qu.:1.00
## Max. :100.00 Max. :100.00 Max. :29.00 Max. :7.0 Max. :1.00
cor(datos_estudio_universitarios)
## estudiante horas_estudio edad materias trabaja
## estudiante 1.00000000 -0.11568888 0.00625914 -0.05313652 0.04303440
## horas_estudio -0.11568888 1.00000000 -0.11743986 -0.15187178 -0.04438674
## edad 0.00625914 -0.11743986 1.00000000 -0.01856410 0.04796456
## materias -0.05313652 -0.15187178 -0.01856410 1.00000000 -0.01989668
## trabaja 0.04303440 -0.04438674 0.04796456 -0.01989668 1.00000000
pairs(datos_estudio_universitarios)
** Modelo de regresión múltiple**
\[ y=90.9410-0.8705edad-2.7962-2.1659 \] Conclusiones
ggplot(datos_estudio_universitarios, aes(x = horas_estudio)) +
geom_histogram(bins = 15, fill = "skyblue", color = "black") +
labs(title = "Distribución de horas de estudio", x = "Horas", y = "Frecuencia")
El histograma muestra cómo se distribuyen las horas de estudio entre los estudiantes. La mayorÃa de los estudiantes estudian entre 40 y 70 horas al mes.
datos_estudio_universitarios$trabaja <- as.factor(datos_estudio_universitarios$trabaja)
ggplot(datos_estudio_universitarios, aes(x = trabaja, y = horas_estudio, fill = trabaja)) + geom_boxplot() + scale_x_discrete(labels = c("No trabaja", "Trabaja")) + labs(title = "Horas de estudio según si trabaja", x = "Trabaja", y = "Horas de estudio")
El boxplot compara las horas de estudio de los estudiantes que trabajan y los que no trabajan. Se observa que, en general, los estudiantes que no trabajan tienen una mediana de horas de estudio más alta que los que sà trabajan.
ggplot(datos_estudio_universitarios, aes(x = edad, y = horas_estudio, color = trabaja)) + geom_point() + labs(title = "Edad vs Horas de estudio", x = "Edad", y = "Horas de estudio")
Este gráfico muestra cómo varÃan las horas de estudio con respecto a la edad, diferenciando si trabajan o no. No se observa una relación clara o fuerte entre la edad y las horas de estudio. Sin embargo, visualmente se puede notar que hay una ligera tendencia a que los estudiantes más jóvenes estudien un poco más, especialmente entre los que no trabajan.
ggplot(datos_estudio_universitarios, aes(x = materias, y = horas_estudio, color = trabaja)) + geom_point() + labs(title = "Materias vs Horas de estudio", x = "Materias", y = "Horas de estudio")
Este gráfico analiza si hay relación entre la cantidad de materias inscritas y las horas de estudio. En general, no hay una tendencia muy clara, pero se puede notar que los estudiantes con más materias tienden a estudiar más.
datos_estudio_universitarios$trabaja <- factor(datos_estudio_universitarios$trabaja, levels = c(0, 1), labels = c("No", "SÃ"))
modelo <- lm(horas_estudio ~ edad + materias + trabaja, data = datos_estudio_universitarios)
summary(modelo) #ejecucion del modelo
##
## Call:
## lm(formula = horas_estudio ~ edad + materias + trabaja, data = datos_estudio_universitarios)
##
## Residuals:
## Min 1Q Median 3Q Max
## -47.105 -21.738 1.673 20.632 43.545
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 90.9410 20.0773 4.530 1.7e-05 ***
## edad -0.8705 0.7370 -1.181 0.240
## materias -2.7962 1.8065 -1.548 0.125
## trabajaSÃ -2.1659 5.1912 -0.417 0.677
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 25.67 on 96 degrees of freedom
## Multiple R-squared: 0.03927, Adjusted R-squared: 0.009252
## F-statistic: 1.308 on 3 and 96 DF, p-value: 0.2763
Intercepto: Es el valor estimado de horas de estudio cuando todas las variables independientes son 0. Edad: Si el coeficiente es negativo, a mayor edad se espera una leve disminución en horas de estudio. Materias: Un coeficiente positivo indicarÃa que mientras más materias, más horas estudia el estudiante. Trabaja (SÃ): El modelo compara contra el grupo que no trabaja. Si el coeficiente es negativo, indica que quienes trabajan tienden a estudiar menos horas que quienes no lo hacen.
par(mfrow = c(2, 2))
plot(modelo)
par(mfrow = c(2, 2))
# 1. Supuesto de Linealidad: Residuales vs Valores Ajustados
plot(modelo$fitted.values, resid(modelo), main = "Linealidad: Residuales vs Valores Ajustados", xlab = "Valores Ajustados", ylab = "Residuales", pch = 19, col = "steelblue")
abline(h = 0, col = "red", lty = 2)
Se observa que los residuos están distribuidos de forma relativamente
aleatoria alrededor de la lÃnea horizontal roja (en y = 0), sin seguir
un patrón claro o una forma sistemática.
#1 Supuesto de Independencia: Durbin-Watson
dwtest(modelo)
##
## Durbin-Watson test
##
## data: modelo
## DW = 1.873, p-value = 0.2573
## alternative hypothesis: true autocorrelation is greater than 0
Aqui podemos observar que tenemos una forma de campana que va de menor a mayor
#Supuesto de Normalidad: Histograma, QQ Plot y Shapiro-Wilk
par(mfrow = c(1, 1))
hist(resid(modelo), col = "lightblue", main = "Histograma de Residuales", xlab = "Residuales")
qqnorm(resid(modelo)); qqline(resid(modelo), col = "red")
shapiro.test(resid(modelo))
##
## Shapiro-Wilk normality test
##
## data: resid(modelo)
## W = 0.9616, p-value = 0.005234
Nos damos cuenta que los datos se ajustan a su normalidad