Está en la página 1de 30

Heteroscedasticidad

Giovanni Vargas Palomino


Curso de Programación en R
Junio 2022
• En este capítulo se presentan varias pruebas para explorar si se
cumple el supuesto de homocedasticidad de los errores en regresión
lineal.
En las prueba mostradas a continuación se estudian las siguientes
hipótesis:

H0:los errores tienen varianza constante (homocedasticidad)


H1:los errores no tienen varianza constante (heteroscedasticidad)
Test de Breusch-Pagan
Esta prueba fue propuesta por Breusch and Pagan (1979) y consiste en
ajustar un modelo de regresión lineal con variable respuesta dada por
residuales del modelo original al cuadrado e2(i) y como covariables las
variables del modelo original.

Por ejemplo, si se tienen k=2 covariables para explicar a Y, entonces el


modelo de regresión para estudiar la homocedasticidad es

e^2(i)=δ0 + δ1x1 + δ2x2 + u


Si se concluye que δ1=δ2=0, significa que los residuales no son función
de las covariables del modelo. El estadístico en esta prueba está dado
por n×R2 y bajo la hipótesis nula verdadera, el estadístico tiene
distribución χ2k.

La función bptest del paquete lmtest Hothorn et al. (2019) implementa


esta prueba.
Ejemplo
Simule un conjunto de datos donde se viole la hipótesis de varianza
constante (de los e(i) o de las y(i) y aplique las pruebas de hipótesis para ver
si son capaces de detectar la violación del supuesto de homocedasticidad.

Solución
En el código mostrado a continuación se simulan observaciones en las cuales
la varianza de
E(i) no es constante ya que para generar los datos se usa la instrucción
ei <- rnorm(n=n, sd=x2), es decir que la varianza depende de la variable x2.
Programa en R
gen_data <- function(n) {
x1 <- rpois(n, lambda=5)
x2 <- rbinom(n, size=6, prob=0.4)
ei <- rnorm(n=n, sd=x2)
y <- -3 + 2 * x1 + 4 * x2 + ei
data.frame(y, x1, x2)
}

n <- 200
datos <- gen_data(n=n)
mod <- lm(y ~ x1 + x2, data=datos) # Modelo de interes
Vamos a aplicar la prueba de forma manual.
Programa en R
ei <- resid(mod)
fit <- lm(ei^2 ~ x1 + x2, data=datos) # Modelando ei^2 ~ x1 + x2
R2 <- summary(fit)$r.squared
k <- 2
estadistico <- n * R2
valorP <- pchisq(q=estadistico, df=k, lower.tail=FALSE)
cbind(estadistico, valorP)
## estadistico valorP
## [1,] 36.79662 1.022622e-08
Programa en R
Vamos a aplicar la prueba de forma automática con la función bptest.

library(lmtest)
bptest(mod)
##
## studentized Breusch-Pagan test
##
## data: mod
## BP = 43.12, df = 2, p-value = 4.331e-10
De la salida anterior se observa que el valor-P es menor que el nivel de
significancia usual de 5%, por lo tanto, hay evidencias para decir que no
se cumple la homocedasticidad de los ei.
Test de White
El test de Breusch-Pagan sólo detecta formas lineales de
heterocedasticidad. Para resolverlo, el test de White, propuesto
por White (1980), permite contrastar no linealidades utilizando los
cuadrados y los productos cruzados de todos los regresores. Si k=2 el
test de White crea el siguiente modelo de regresión:
Este test se puede implementar por medio de la función bptest pero
especificando los términos no lineales de la expresión anterior.
Ejemplo
Aplicar White test para los datos simulados del ejemplo anterior.
Solución
Para aplicar el test se usa el argumento varformula y se escribe la
fórmula con los términos no lineales:

los términos lineales están por defecto.


Programa en R
bptest(mod, varformula = ~ x1 * x2 + I(x1^2) + I(x2^2), data=datos)
Resultado de R
##
## studentized Breusch-Pagan test
##
## data: mod
## BP = 60.325, df = 5, p-value = 1.041e-11
Como el valor-P es pequeño entonces hay evidencias para rechazar la
hipótesis de homocedasticidad.

La prueba se puede también realizar de forma manual, a continuación


se muestra el procedimiento.
Programa en R
fit <- lm(resid(mod)^2 ~ x1 + x2 + x1 * x2 + I(x1^2) + I(x2^2),
data=datos)
R2 <- summary(fit)$r.squared
estadistico <- n * R2
valorP <- pchisq(q=estadistico, df=5, lower.tail=FALSE)
cbind(estadistico, valorP)
Resultado en R
## estadistico valorP
## [1,] 47.81409 3.876213e-09
Test Score para un Error de Varianza No
constante
Esta prueba sirve para estudiar la hipótesis nula de varianza constante
de los errores frente a la hipótesis alternativa de que la varianza de los
errores cambia con el nivel de la respuesta o con alguna combinación
lineal de los predictores.
La función ncvTest del paquete car Fox, Weisberg, and Price (2020)
implementa esta prueba.
Ejemplo
Aplicar Score test para los datos simulados del ejemplo anterior.
Solución, programa en R
library(car)
ncvTest(mod)
Resultado en R
## Non-constant Variance Score Test
## Variance formula: ~ fitted.values
## Chisquare = 17.57293, Df = 1, p = 2.765e-05
Test de Goldfeld-Quandt
Este test está implementado en la función gqtest del paquete lmtest.
Harrison-McCabe test
Este test está implementado en la función hmctest del paquete lmtest.

También podría gustarte