R: Práctica de Análisis de Regresión con Dos Variables

Análisis de Regresión con Dos Variables

A continuación encontrarán el script que se ha desarrollado durante las clases de Econometría 1 para el tema de Análisis de Regresión con Dos Variables. Puede copiar y pegar este script en un editor de R para correr las instrucciones junto a las notas de clases.

#----Econometría 1 - Prof. Anthonny Arias----#

#--Limpiamos nuestro espacio de trabajo--#

rm(); rm(list=ls())
cat("\014")

# Definimos la variable escolaridad y su media.
# Para esto, usamos la instrucción c() para definir vector.
# Y usamos la instrucción mean() para definir la media.

escolaridad <- c(6,7,8,9,10,11,12,13,14,15,16,17,18)
m.escolaridad <- mean(escolaridad)

# Definimos la variable salario y su media.

salario <- c(4.4567,5.77,5.9787,7.3317,7.3182,6.5844,7.8182,7.8351,11.0223,10.6738,10.8361,13.615,13.531)
m.salario <- mean(salario)

# Hacemos un gráfico de dispersión de estas dos variables.

plot(escolaridad,salario)

# Una vez obtenidos estos valores, podemos calcular los estimadores beta1 y beta2.

beta2 <- sum( (escolaridad-m.escolaridad)*(salario-m.salario) )/sum( (escolaridad-m.escolaridad)^2 )
beta2

beta1 <- m.salario - beta2*m.escolaridad
beta1

# Calculamos los valores estimados del salario.

salario.e <- beta1 + beta2*escolaridad
salario.e

# Calculamos los residuos.

residuos <- salario - salario.e
residuos

# Calculamos la var.e.

var.e <- sum( (residuos)^2 )/(length(salario)-2)

var.e
# Caculamos el error estándar, aplicando la raíz cuadrada a la var.e.

error.s <- sqrt(var.e)
error.s

# Calculamos la var.e de beta2

v.beta2 <- var.e/sum( (escolaridad-m.escolaridad)^2 )
v.beta2

# Calculamos el error estándar de beta2

es.beta2 <- sqrt(v.beta2)
es.beta2

# Para calcular el intervalo de confianza de beta2, consideramos t=1.7959

li.beta2 <- beta2 - qt(0.975,df=length(escolaridad)-2)*es.beta2
li.beta2

ls.beta2 <- beta2 + qt(0.975,df=length(escolaridad)-2)*es.beta2
ls.beta2

# Calculamos la var.e de beta1.

v.beta1 <- var.e*sum( escolaridad^2 )/(length(escolaridad) * sum( (escolaridad-m.escolaridad)^2 ))
v.beta1

# Calculamos el error estándar de beta1

es.beta1 <- sqrt(v.beta1)
es.beta1

# Para calcular el intervalo de confianza de beta1, consideramos t=1.7959

li.beta1 <- beta1 - qt(0.975,df=length(escolaridad)-2)*es.beta1
li.beta1

ls.beta1 <- beta1 + qt(0.975,df=length(escolaridad)-2)*es.beta1
ls.beta1

# Para hacer la prueba de hipótesis bilateral, determinamos el t-calculado.
t.c <- (beta2-0.70)/es.beta2
t.c # Como t.c está fuera del intervalo (-2.201,2.201) entonces rechazamos la hipótesis nula.
qt(0.025,df=length(escolaridad)-2)
qt(0.975,df=length(escolaridad)-2)


# Para hacer la prueba de hipótesis unilateral, determinamos el t-calculado.
t.c <- (beta2-0.50)/es.beta2
t.c # Como t.c está fuera del intervalo (-2.201,2.201) entonces rechazamos la hipótesis nula.
qt(0.95,df=length(escolaridad)-2)

# Calculamos ahora, el intervalo de confianza para chi-cuadrado
li.var.e <- (length(escolaridad)-2)*var.e/qchisq(0.975,df=11)
li.var.e

ls.var.e <- (length(escolaridad)-2)*var.e/qchisq(0.025,df=11)
ls.var.e

# Como la hipótesis nula indica que la varianza es igual a 0.6, entonces no rechazamos esta hipótesis.

# Podemos también llevar a cabo esta prueba con el estadístico chi-cuadrado. Para esto, calculamos el estadístico chi-cuadrado.

chi.c <- (length(escolaridad)-2)*var.e/0.6
chi.c

li.chi <- qchisq(0.025,df=df=length(escolaridad)-2)
li.chi
ls.chi <- qchisq(0.975,df=df=length(escolaridad)-2)
ls.chi

# Éste está dentro del intervalo [ qchisq(0.025,df=df=length(escolaridad)-2) ; qchisq(0.025,df=df=length(escolaridad)-2) ], por lo tanto, no se rechaza H0.

# Calculamos la suma de los cuadrados explicada.

SCE.escolaridad <- beta2^2*sum( (escolaridad-m.escolaridad)^2 )
SCP.escolaridad <- SCE.escolaridad/1
SCP.escolaridad

# Calculamos la suma de los cuadrados de los residuos.

SCR.residuos <- sum(residuos^2)
SCP.residuos <- SCR.residuos/(length(escolaridad)-2)
SCP.residuos

# Calculamos la suma de los cuadrados totales.

SCT.salarios <- sum( (salario-m.salario)^2 )
SCP.salarios <- SCT.salarios/(length(salario)-1)
SCP.salarios

# Calculamos ahora el valor F (F calculado).

F.c <- SCP.escolaridad/SCP.residuos
F.c

# Calculamos el p-value (valor-p) para este F calculado.

pf(F.c,1,length(escolaridad)-2,lower.tail = F)

# Verificamos que se cumple el teorema

t.c <- (beta2-0)/es.beta2
t.c
t.c^2
F.c

# Predicción de la Media

escolaridad.0 <- 20
salario.0 <- beta1 + beta2*escolaridad.0
salario.0

# Calculamos la varianza de la predicción.

varm.salario.0 <- var.e*(1/length(escolaridad)+(escolaridad.0-m.escolaridad)^2/sum((escolaridad-m.escolaridad)^2))
varm.salario.0

# Calculamos ahora el error estándar.

eem.salario.0<- sqrt(varm.salario.0)
eem.salario.0

# Calculamos el intervalo de confianza para salario.0

li.salario.0 <- beta1 + beta2*escolaridad.0 - qt(0.025,df=length(escolaridad)-2,lower.tail = FALSE)*eem.salario.0
li.salario.0

ls.salario.0 <- beta1 + beta2*escolaridad.0 + qt(0.025,df=length(escolaridad)-2,lower.tail = FALSE)*eem.salario.0
ls.salario.0

# Predicción Individual

# Calculamos la varianza de la predicción.

vari.salario.0 <- var.e*(1+1/length(escolaridad)+(escolaridad.0-m.escolaridad)^2/sum((escolaridad-m.escolaridad)^2))
vari.salario.0

# Calculamos ahora el error estándar.

eei.salario.0<- sqrt(vari.salario.0)
eei.salario.0

# Calculamos el intervalo de confianza para salario.0

li.salario.0 <- beta1 + beta2*escolaridad.0 - qt(0.025,df=length(escolaridad)-2,lower.tail = FALSE)*eei.salario.0
li.salario.0

ls.salario.0 <- beta1 + beta2*escolaridad.0 + qt(0.025,df=length(escolaridad)-2,lower.tail = FALSE)*eei.salario.0
ls.salario.0

#----Análisis de Residuos----#

#--Análisis de Correlación--#

# Gráfico de dispersión para los residuos.

plot(residuos)

# Hacemos la gráfica de la función de autocorrelación.
# Si todaslas barras están por debajo de las líneas azules, esto indica que no hay autocorrelación.
# https://www.reddit.com/r/AskStatistics/comments/5kiix2/interpret_acfpacf_dataplots_in_r/

acf(residuos)

# Hacemos la prueba de Durbin–Watson, que establece como hipótesis nula que el coeficiente de correlación es igual a cero.
# El estadístico de Durbin–Watson igual a dos indica que no hay autocorrelación.
# https://en.wikipedia.org/wiki/Durbin%E2%80%93Watson_statistic

library("lmtest")
dwtest(salario ~ escolaridad)

#--Pruebas de Normalidad--#

# Generamos el histograma de los residuos.

hist(residuos)

plot(density(residuos))

# Gráfica de probabilidad normal

qqnorm(residuos, pch = 1, frame = TRUE)
qqline(residuos, col = "steelblue", lwd = 2)

# También se puede llevar a cabo usando el siguiente comando
library("car")
qqPlot(residuos,col.lines="steelblue")

# Prueba de Anderson-Darling.

library(nortest)
ad.test(residuos)

# Prueba de normalidad de Jarque-Bera (JB)
# https://lancebachmeier.com/computing/j-b-test.html
# Esta plantea como hipótesis nula el coeficiente de asimetría igual cero y la curtosis igual a tres.

library(tseries)
jarque.bera.test(residuos)

# Prueba de normalidad de Shapiro-Wilk
# https://stat.ethz.ch/R-manual/R-devel/library/stats/html/shapiro.test.html
# Esta prueba plantea como hipótesis nula que los datos están normalmente distribuídos.

shapiro.test(residuos)

¿Tienes alguna duda? Compártela en los comentarios.

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.