#1.- BIBLIOTECAS
library(kableExtra)
## Warning: package 'kableExtra' was built under R version 4.2.3
## Warning in !is.null(rmarkdown::metadata$output) && rmarkdown::metadata$output
## %in% : 'length(x) = 2 > 1' in coercion to 'logical(1)'
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.2.3
## Warning: package 'ggplot2' was built under R version 4.2.3
## Warning: package 'tibble' was built under R version 4.2.3
## Warning: package 'tidyr' was built under R version 4.2.3
## Warning: package 'readr' was built under R version 4.2.3
## Warning: package 'purrr' was built under R version 4.2.3
## Warning: package 'dplyr' was built under R version 4.2.3
## Warning: package 'forcats' was built under R version 4.2.3
## Warning: package 'lubridate' was built under R version 4.2.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.2 ✔ readr 2.1.4
## ✔ forcats 1.0.0 ✔ stringr 1.5.0
## ✔ ggplot2 3.4.2 ✔ tibble 3.2.1
## ✔ lubridate 1.9.2 ✔ tidyr 1.3.0
## ✔ purrr 1.0.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::group_rows() masks kableExtra::group_rows()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the ]8;;http://conflicted.r-lib.org/conflicted package]8;; to force all conflicts to become errors
library(haven)
## Warning: package 'haven' was built under R version 4.2.3
library(foreign)
library(lmtest)
## Warning: package 'lmtest' was built under R version 4.2.3
## Loading required package: zoo
## Warning: package 'zoo' was built under R version 4.2.3
##
## Attaching package: 'zoo'
##
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
library(car)
## Warning: package 'car' was built under R version 4.2.3
## Loading required package: carData
## Warning: package 'carData' was built under R version 4.2.3
##
## Attaching package: 'car'
##
## The following object is masked from 'package:dplyr':
##
## recode
##
## The following object is masked from 'package:purrr':
##
## some
library(estimatr)
## Warning: package 'estimatr' was built under R version 4.2.3
library(knitr)
library(olsrr) # tools for building OLS regression models
## Warning: package 'olsrr' was built under R version 4.2.3
##
## Attaching package: 'olsrr'
##
## The following object is masked from 'package:datasets':
##
## rivers
options(scipen=999)
#2.- BASE DE DATOS
#cargamos base de datos
gpa3 <- read_dta("http://fmwww.bc.edu/ec-p/data/wooldridge/gpa3.dta")
hprice1 <- read_dta("http://fmwww.bc.edu/ec-p/data/wooldridge/hprice1.dta")
d401k <- read_dta("http://fmwww.bc.edu/ec-p/data/wooldridge/401ksubs.dta")
#3.- REGRESIONES
#Estimamos modelos
reg <- lm(cumgpa ~ sat + hsperc + tothrs + female + black + white, data=gpa3, subset=(spring==1))
reg2 <- lm(price ~ lotsize + sqrft + bdrms, data=hprice1 )
reg3 <- lm(nettfa ~ inc + I((age - 25)^2) + male + e401k, data= d401k, subset = (fsize==1))
#4.- REPRESENTACIÓN GRÁFICA
Residuales VS valores ajustados es un gráfico para detectar no linealidad, varianzas de error desiguales y valores atípicos.
Revisar el util paquete olsrr* https://olsrr.rsquaredacademy.com/articles/intro.html
En econometría, los valores ajustados (también conocidos como valores estimados o valores predichos) se refieren a las estimaciones de la variable dependiente en un modelo estadístico, dadas ciertas valores de las variables independientes. En otras palabras, son los valores de la variable dependiente que el modelo estima que se producirán para los valores específicos de las variables independientes.
En un modelo de regresión lineal, por ejemplo, los valores ajustados son la línea recta que mejor se ajusta a los datos y que se utiliza para predecir el valor de la variable dependiente para cualquier valor dado de las variables independientes. Estos valores son importantes para evaluar la calidad del modelo y para hacer predicciones sobre el comportamiento futuro de la variable dependiente.
Los valores ajustados se calculan utilizando los coeficientes estimados del modelo y los valores observados de las variables independientes. Estos valores ajustados se pueden utilizar para evaluar la precisión del modelo y para hacer predicciones sobre los valores de la variable dependiente para diferentes valores de las variables independientes:
#regresion 1
ols_plot_resid_fit(reg)
Al ser la media 0, como podemos observar, parece indicar que hay
homocedasticidad (es subjetivo, ojo).
bptest(reg)
##
## studentized Breusch-Pagan test
##
## data: reg
## BP = 44.557, df = 6, p-value = 0.00000005732
Tenemos heterocedasticiad, al ser p-valor < 0.05.
#regresion 2
ols_plot_resid_fit(reg2)
bptest(reg2)
##
## studentized Breusch-Pagan test
##
## data: reg2
## BP = 14.092, df = 3, p-value = 0.002782
Heterocedasticidad
# regresion 3
ols_plot_resid_fit(reg3)
bptest(reg3)
##
## studentized Breusch-Pagan test
##
## data: reg3
## BP = 15.711, df = 4, p-value = 0.003433
Heterocedasticidad
#4.- Score Test
ols_test_score(reg) # Usando los valores ajustados del modelo
##
## Score Test for Heteroskedasticity
## ---------------------------------
## Ho: Variance is homogenous
## Ha: Variance is not homogenous
##
## Variables: fitted values of cumgpa
##
## Test Summary
## ----------------------------
## DF = 1
## Chi2 = 0.0662252
## Prob > Chi2 = 0.7969143
Homocedasticidad.
ols_test_score(reg2) # Usando los valores ajustados del modelo
##
## Score Test for Heteroskedasticity
## ---------------------------------
## Ho: Variance is homogenous
## Ha: Variance is not homogenous
##
## Variables: fitted values of price
##
## Test Summary
## ------------------------------
## DF = 1
## Chi2 = 9.647331
## Prob > Chi2 = 0.001896269
Heterocedasticidad.
ols_test_score(reg3) # Usando los valores ajustados del modelo
##
## Score Test for Heteroskedasticity
## ---------------------------------
## Ho: Variance is homogenous
## Ha: Variance is not homogenous
##
## Variables: fitted values of nettfa
##
## Test Summary
## -------------------------------
## DF = 1
## Chi2 = 14.09198
## Prob > Chi2 = 0.0001740845
Heterocedasticidad.
ols_test_score(reg2, vars = c('lotsize','sqrft')) # Especificando las variables
##
## Score Test for Heteroskedasticity
## ---------------------------------
## Ho: Variance is homogenous
## Ha: Variance is not homogenous
##
## Variables: lotsize sqrft
##
## Test Summary
## ------------------------------
## DF = 2
## Chi2 = 13.13056
## Prob > Chi2 = 0.001408427
Esto nos indica que hay heterocedasticidad provocada por estas variables.
#5.- Contraste de Breusch Pagan
La prueba de Breusch Pagan fue presentada por Trevor Breusch y Adrian Pagan en 1979. Se usa para probar la heteroscedasticidad en un modelo de regresión lineal y asume que los términos de error se distribuyen normalmente. Comprueba si la varianza de los errores de una regresión depende de los valores de las variables independientes con un X2 de prueba.
Puede realizar la prueba usando los valores ajustados del modelo, los predictores en el modelo y un subconjunto de las variables independientes. Incluye opciones para realizar múltiples pruebas y ajustes de valor p. Las opciones para los ajustes del valor de p incluyen el método de Bonferroni, Sidak y Holm.
La prueba de “Breusch-Pagan” consiste en obtener los residuales ûi para todas las observaciones i=1,…,n , donde se regresiona su valor al cuadrado con todas las variables independientes del la ecuacion inicial û2i=B1Xk+…+BkXk . Posteriormente, multiplicamos el R2 de la regresion auxiliar, con el numero de observaciones N
La estadística de prueba de Breusch-Pagan (BP) es una medida de la discrepancia entre el modelo original y el modelo ajustado para tener en cuenta la posible heteroscedasticidad en los errores. Este se calcula de la misma froma que el estadistico LM, ya que la fromula es BP=N∗R2 , donde donde n es el número de observaciones del modelo, y R² es el coeficiente de determinación del modelo ajustado para la heteroscedasticidad.
El comando “bptest” tiene como salida: La estadística de prueba de Breusch-Pagan BP, los grados de libertad df y el una medida de la evidencia en contra de la hipótesis nula de un test estadístico p-value. Donde H0=homocedasticidad y Ha=heterocedasticidad
# PAQUETE "LMTEST"
# Breusch-Pagan test (bptest)
bptest(reg2) # prueba estudentixada de Bresuch-Pagan
##
## studentized Breusch-Pagan test
##
## data: reg2
## BP = 14.092, df = 3, p-value = 0.002782
Heterocedasticidad.
#PAQUETE "OLSRR"
ols_test_breusch_pagan(reg2) # Utilizando los valores ajustados (fitted values)
##
## Breusch Pagan Test for Heteroskedasticity
## -----------------------------------------
## Ho: the variance is constant
## Ha: the variance is not constant
##
## Data
## ---------------------------------
## Response : price
## Variables: fitted values of price
##
## Test Summary
## ---------------------------------
## DF = 1
## Chi2 = 20.55289
## Prob > Chi2 = 0.000005800624
Heterocedasticidad
ols_test_breusch_pagan(reg2, rhs = TRUE) # utilizando las variables independientes del modelo
##
## Breusch Pagan Test for Heteroskedasticity
## -----------------------------------------
## Ho: the variance is constant
## Ha: the variance is not constant
##
## Data
## ------------------------------
## Response : price
## Variables: lotsize sqrft bdrms
##
## Test Summary
## ---------------------------------
## DF = 3
## Chi2 = 30.02273
## Prob > Chi2 = 0.000001364947
Heterocedasticidad
ols_test_breusch_pagan(reg2, rhs = TRUE, multiple = TRUE) # Utilizando variables independientes del modelo y múltiples pruebas
##
## Breusch Pagan Test for Heteroskedasticity
## -----------------------------------------
## Ho: the variance is constant
## Ha: the variance is not constant
##
## Data
## ------------------------------
## Response : price
## Variables: lotsize sqrft bdrms
##
## Test Summary (Unadjusted p values)
## --------------------------------------------------
## Variable chi2 df p
## --------------------------------------------------
## lotsize 20.55762 1 0.000005786313
## sqrft 12.32272 1 0.000447478265
## bdrms 10.44809 1 0.001227765106
## --------------------------------------------------
## simultaneous 30.02273 3 0.000001364947
## --------------------------------------------------
Heterocedasticidad.
ols_test_breusch_pagan(reg2, rhs = TRUE, multiple = TRUE, p.adj = 'bonferroni') # Bonferroni valor p Ajuste
##
## Breusch Pagan Test for Heteroskedasticity
## -----------------------------------------
## Ho: the variance is constant
## Ha: the variance is not constant
##
## Data
## ------------------------------
## Response : price
## Variables: lotsize sqrft bdrms
##
## Test Summary (Bonferroni p values)
## --------------------------------------------------
## Variable chi2 df p
## --------------------------------------------------
## lotsize 20.55762 1 0.000017358940
## sqrft 12.32272 1 0.001342434796
## bdrms 10.44809 1 0.003683295319
## --------------------------------------------------
## simultaneous 30.02273 3 0.000001364947
## --------------------------------------------------
Heterocedasticidad
ols_test_breusch_pagan(reg2, rhs = TRUE, multiple = TRUE, p.adj='holm')
##
## Breusch Pagan Test for Heteroskedasticity
## -----------------------------------------
## Ho: the variance is constant
## Ha: the variance is not constant
##
## Data
## ------------------------------
## Response : price
## Variables: lotsize sqrft bdrms
##
## Test Summary (Holm's p values)
## --------------------------------------------------
## Variable chi2 df p
## --------------------------------------------------
## lotsize 20.55762 1 0.000017358940
## sqrft 12.32272 1 0.000894956531
## bdrms 10.44809 1 0.001227765106
## --------------------------------------------------
## simultaneous 30.02273 3 0.000001364947
## --------------------------------------------------
# Valor p de Holm Ajuste
Heterocedasticidad.