# Ejercicio de econometría con la base de datos CASchools
# Cargar libreria y base de datos
library(AER)
## Cargando paquete requerido: car
## Cargando paquete requerido: carData
## Cargando paquete requerido: lmtest
## Cargando paquete requerido: zoo
##
## Adjuntando el paquete: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
## Cargando paquete requerido: sandwich
## Cargando paquete requerido: survival
data("CASchools")
attach(CASchools)
# Análisis descriptivo de variables de interés
CASchools$avg = (math + read) / 2 # Crea la variable del rendimiento promedio en matematica y lectura
attach(CASchools)
## The following objects are masked from CASchools (pos = 3):
##
## calworks, computer, county, district, english, expenditure, grades,
## income, lunch, math, read, school, students, teachers
summary(students)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 81.0 379.0 950.5 2628.8 3008.0 27176.0
summary(avg)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 605.5 640.0 654.5 654.2 666.7 706.8
hist(students, main = "Distribución del numero de estudiantes", col = "blue")

hist(avg, main = "Distribución del rendimiento de los estudiantes", col = "blue")

# Realizar grafico de dispersión
CASchools$ratiope= CASchools$students/CASchools$teachers #agregar variable a base de datos
attach(CASchools)
## The following objects are masked from CASchools (pos = 3):
##
## avg, calworks, computer, county, district, english, expenditure,
## grades, income, lunch, math, read, school, students, teachers
## The following objects are masked from CASchools (pos = 4):
##
## calworks, computer, county, district, english, expenditure, grades,
## income, lunch, math, read, school, students, teachers
plot(students, avg)

plot(ratiope, avg)
# Realizar modelo
modelo= lm(avg~ratiope)
summary(modelo)
##
## Call:
## lm(formula = avg ~ ratiope)
##
## Residuals:
## Min 1Q Median 3Q Max
## -47.727 -14.251 0.483 12.822 48.540
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 698.9329 9.4675 73.825 < 2e-16 ***
## ratiope -2.2798 0.4798 -4.751 2.78e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 18.58 on 418 degrees of freedom
## Multiple R-squared: 0.05124, Adjusted R-squared: 0.04897
## F-statistic: 22.58 on 1 and 418 DF, p-value: 2.783e-06
abline(coef = coef(modelo), col = "blue", lwd = 2)

print("Los resultados de la regresión muestran una relación negativa significativa entre la cantidad de estudiantes por profesor y el rendimiento de los estudiantes, específicamente por cada aumento unitario en la ratio de alumnos por profesor, el rendimiento descende en 2.28 unidades")
## [1] "Los resultados de la regresión muestran una relación negativa significativa entre la cantidad de estudiantes por profesor y el rendimiento de los estudiantes, específicamente por cada aumento unitario en la ratio de alumnos por profesor, el rendimiento descende en 2.28 unidades"
# Predicción de rendimiento para ratio-ep
coef = coef(modelo)
# Ratio pe de 17 ; Correspondiente al ratio en general para la matricula en Nicaragua en 2022, datos CNU
(pred_rend = coef[1] + coef[2]*17) # El rendimiento correspondiente sería de 660.18
## (Intercept)
## 660.1762
print("El rendimiento correspondiente a un ratio de 17 alumnos por profesor sería de 660.18")
## [1] "El rendimiento correspondiente a un ratio de 17 alumnos por profesor sería de 660.18"
# Ratio pe correspondiente a un rendimiento de 650
(ratio_est = (650 - coef[1]) / coef[2])
## (Intercept)
## 21.46363
print("El ratio de estudiantes que garantiza un mínimo de 650 puntos de rendimiento es de 21.5 estudiantes por profesor")
## [1] "El ratio de estudiantes que garantiza un mínimo de 650 puntos de rendimiento es de 21.5 estudiantes por profesor"
# Variación en el rendimiento frente a variacion de estudiantes de 19 -> 23
rend_19e = coef[1] + coef[2]*19
rend_23e = coef[1] + coef[2]*23
(var_rend = rend_23e - rend_19e)
## (Intercept)
## -9.119233
(var_rend_p = (rend_23e / rend_19e) - 1)
## (Intercept)
## -0.0139094
print("Ante un aumento en los estudiantes de 19 a 23, el rendimiento se redujo en 9 unidades, o en un 1.4% aproximadamente")
## [1] "Ante un aumento en los estudiantes de 19 a 23, el rendimiento se redujo en 9 unidades, o en un 1.4% aproximadamente"
# Resultados de la pendiente y el intercepto con fórmulas
# Fórmula de la pendiente
num = sum((ratiope - mean(ratiope))*(avg - mean(avg)))
den = sum((ratiope-mean(ratiope))^2)
(beta_1 = num/den)
## [1] -2.279808
print("Resultado en la pendiente idéntico al resultado del modelo")
## [1] "Resultado en la pendiente idéntico al resultado del modelo"
# Fórmula del intercepto
(beta_0 = mean(avg) - beta_1 * mean(ratiope))
## [1] 698.9329
print("Resultado en el intercepto idéntico al resultado del modelo")
## [1] "Resultado en el intercepto idéntico al resultado del modelo"
# Ajuste del modelo sin intercepto
modelo_si= lm(avg~ratiope + 0)
summary(modelo_si)
##
## Call:
## lm(formula = avg ~ ratiope + 0)
##
## Residuals:
## Min 1Q Median 3Q Max
## -204.193 -38.908 4.705 49.045 215.696
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## ratiope 32.980 0.172 191.8 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 69.54 on 419 degrees of freedom
## Multiple R-squared: 0.9887, Adjusted R-squared: 0.9887
## F-statistic: 3.678e+04 on 1 and 419 DF, p-value: < 2.2e-16
plot(ratiope, avg)
abline(a = 0, b = coef(modelo_si), col = "red", lwd = 2)

print("Se evidencia una clara diferencia en la estimación del modelo con y sin intercepto, tanto de magnitud como de dirección (la direccion del modelo sin intercepto se vuelve positiva)")
## [1] "Se evidencia una clara diferencia en la estimación del modelo con y sin intercepto, tanto de magnitud como de dirección (la direccion del modelo sin intercepto se vuelve positiva)"
print("La omisión del valor del intercepto cambia la interpretación de la estimación, y sobre todo del valor que toma el rendimiento promedio cuando la ratio de estudiantes a profesores es 0, pues al no haber intercepto este se define como un valor de 0, i.e. cuando el valor del ratio es nulo, se asigna igualmente un valor nulo al promedio de notas")
## [1] "La omisión del valor del intercepto cambia la interpretación de la estimación, y sobre todo del valor que toma el rendimiento promedio cuando la ratio de estudiantes a profesores es 0, pues al no haber intercepto este se define como un valor de 0, i.e. cuando el valor del ratio es nulo, se asigna igualmente un valor nulo al promedio de notas"
# Resultado de la pendiente en modelo sin intercepto con fórmula
(beta_1_si = (sum(ratiope*avg))/(sum((ratiope)^2)))
## [1] 32.98027
print("Resultado en la pendiente idéntico al resultado del modelo sin intercepto")
## [1] "Resultado en la pendiente idéntico al resultado del modelo sin intercepto"