Heterocedasticidad en R. Pruebas para detectarla.

👏 La heterocedasticidad se da cuando en un modelo de regresión lineal, al estudiar los residuos del modelo vemos que la varianza de éstos no es constante.

Si pasa ésto el modelo creado estará incumpliendo una de las hipótesis básicas sobre el que se sustenta de manera teórica. Para poder aceptar la validez del modelo la varianza de los errores debería ser homocedástica, es decir, debe mantenerse constante en todas las observaciones.

La realidad es que es muy común que cuando creemos un modelo de regresión aparezca la heterocedasticidad ya que es complicado encontrar la variables perfectas desde el principio.

5 MOTIVOS QUE PUEDEN PRODUCIR HETEROCEDASTICIDAD 👀

  • 1.Que las variables usadas tengan distribuciones de probabilidad diferentes
  • 2 .Que exista multicolinealidad entre ellas.
  • 3. Que la forma del modelo no sea la correcta. Por ejemplo usar el lineal cuando no hay una relación lineal entre variables.
  • 4. Existencia de valores atípicos muy pronunciados
  • 5. La falta de normalidad en la variables.

Cómo vemos hay muchas causas y es fácil que cualquiera de ellas se produzcan porque rara vez encontramos la combinación perfecta.

Hay procedimientos para poder medir la heterocedasticidad. Aquí vamos a enumerar algunas pruebas estadísticas usadas para ello.

PRUEBAS PARA MEDIR LA HETEROCEDASTICIDAD

•             La prueba de White

•             El test de Breusch-Pagan

•             La prueba de Park

•             La prueba de Goldfeld-Quandt

•             La Prueba de Hartley

•             La Prueba de Bartlett

🤞 En este vídeo hablaré más a detalle de los dos primeros procedimientos, el de White y el de Breusch-Pagan, haciendo un ejemplo en R studio con un modelo de regresión lineal multiple, que usé en un artículo anterior para predecir el precio del par de divisa GBPUSD.

Más abajo dejo el código en R usado en el vídeo 👇👇


### VIDEO HETEROCEDASTICIDAD ###


#La heterocedasticidad se da cuando en un modelo de regresión lineal, 
#al estudiar los residuos del modelo vemos que la varianza de éstos 
# no es constante

# Inclumpliento de el supuesto de homcedasticidad

# Varias causas

  #* distribuciones de probabilidad diferentes
  # *multicolinealidad
  # *Que la forma del modelo no sea la correcta
  #* Existencia de valores atípicos muy pronunciados
  #* La falta de normalidad en la variables.


#insesgadez y eficiencia


## PARTE 1 -- CREACIÓN DEL MODELO LINEAL 


#install.packages("quantmod")
library(quantmod)
#install.packages("tseries")
library(tseries)
#install.packages("forecast")
library(forecast)
#install.packages("TSA")
library(TSA)
#install.packages("Quandl")
library(Quandl)



#1. Descargamos las variables que vamos a usar

getSymbols("INDPRO",src="FRED")  #Industrial Production Index
getSymbols("UMCSENT",src="FRED") #University of Michigan: Consumer Sentiment
getSymbols("FEDFUNDS",src="FRED") #tasa interes fondos federales
getSymbols("CCRETT01USM661N",src="FRED") #Tipo de cambio efectivo IPC
getSymbols("M2NS",src="FRED")     #Stock de dinero M2
getSymbols("PAYEMS",src="FRED")   # Des trabajadores no rurales
getSymbols("BOPGSTB",src="FRED")  #Balance cuenta, Diferencia entre exp e imp
getSymbols("EXUSUK",src="FRED")   #GBP mensual



## Predecir GBPUSD -- 1 mes 

###2.  Dividimos lso datos en 2 muestras
##  IN SAMPLE y OUT SAMPLE


prod= INDPRO["2001-01::2019-12"]
sent= UMCSENT["2001-01::2019-12"]
Fedfunds=FEDFUNDS["2001-01::2019-12"]
GBP=EXUSUK["2001-01::2019-12"]
credit=CCRETT01USM661N["2001-01::2019-12"]
pay=PAYEMS["2001-01::2019-12"]
money=M2NS["2001-01::2019-12"]
trade=BOPGSTB["2001-01::2019-12"]


#creamos una tabla

t_varibles=data.frame(merge(sent,Fedfunds,GBP,credit,pay,money,trade))



#creamos el modelo 


Mod_Macro = lm(EXUSUK~UMCSENT+FEDFUNDS+CCRETT01USM661N+PAYEMS+M2NS+BOPGSTB,data=t_varibles)

summary(Mod_Macro)

anova(Mod_Macro)

#plot(Mod_Macro)
res<-residuals(Mod_Macro)
plot(res,type="l")


## Mirar la existencia de Heterocedasticidad


### BREUSH-PAGAN

#hist(res)
#Analiza si la varianza estimada de los residuos de una 
#regresión dependen de los valores de las variables independientes.

# partiendo de la relación lineal entre la varianza 
# y las variables exógenas.



library(lmtest)
library(car)

bptest(Mod_Macro)

#p-value = 0.004789< 0.05 --- heterocedasticidad

#ho


#coeftest(Mod_Macro,vcov=hccm(Mod_Macro))


#MODELO DE WHITE

#El objetivo de esta prueba es determinar si las variables explicativas del modelo, 
#pueden determinar la evolución de los errores al cuadrado


#whites.htest(var.model) funcion del paquete het.test


## White test se basa en regresión de residuos y productos cruzados

#CARLOS ENRIQUE MARYINEZ

modelo_white<- bptest(Mod_Macro, ~I(UMCSENT^2)+I(FEDFUNDS^2)+I(CCRETT01USM661N^2)+I(PAYEMS^2)+I(M2NS^2)+I(BOPGSTB^2)+UMCSENT*FEDFUNDS*CCRETT01USM661N*PAYEMS*M2NS*BOPGSTB,data=t_varibles)
print(modelo_white)


#p-value = 7.946e-06< 0.05 hetrocedasticidad



###### Prueba de White ejemplo 


install.packages("stargazer")
library(stargazer)



Mod_Macro2 = lm(EXUSUK~UMCSENT+FEDFUNDS,data=t_varibles)
summary(Mod_Macro2)


u_i<-Mod_Macro2$residuals

data_frame_white<-as.data.frame(cbind(u_i, t_varibles))
regresion_auxiliar <- lm(I(u_i^2)~UMCSENT+FEDFUNDS+I(UMCSENT^2)+I(FEDFUNDS^2)+UMCSENT*FEDFUNDS, data = data_frame_white)
sumario<- summary(regresion_auxiliar)
sumario
n <- nrow(data_frame_white)
R_2<- sumario$r.squared
LM_W<- n*R_2
gl <- 2+2+1
p_value<- 1- pchisq(q = LM_W, df = gl)
VC<- qchisq(p = 0.95, df = gl)
salida_white<- c(LM_W,VC, p_value)
names(salida_white)<-c("LMw", "Valor critico", "p value")
stargazer(salida_white, title = "Resultados de la prueba de white", type = "text", digits = 6)

#https://www.r-bloggers.com/heteroscedasticity/
#https://rpubs.com/Carlos_Martinez/505361
#http://cjardon.webs.uvigo.es/Transparencias/Unidad7.pdf
#https://cran.r-project.org/web/packages/het.test/het.test.pdf
#http://www2.kobe-u.ac.jp/~kawabat/ch08.pdf


8 comentarios en “Heterocedasticidad en R. Pruebas para detectarla.”

  1. Profesor Víctor, buenas tardes ¿la data del ejercicio no está para descargarla, verdad?, si se pudiera acceder a ella sería genial para realizar los pasos en Rstudio

    1. Hola Patricio. La data la descargué directamente sacando los datos en linea de la FRED. Por tanto la tienes ya en R studio en el código. No es necesario que la descargues por fuera

  2. Muchas gracias por el amor a tu profesión porque es por eso que transmites tu conocimiento! Me has salvado en varias tareas
    Saludos desde México

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio