Você está na página 1de 6

# Heterocedasticidade

# Uma das hipóteses do TGM, é a homocedasticidade, que requer que todas

# as observações da variável de resposta (dependente) seja igualmente

# distribuída ao longo da reta de regressão. Em muitas aplicações

# econômicas, se observa o fenômeno da heterocedasticidade.

# Vamos observar o exemplo do modelo de regressão simples, onde

# o gasto com alimentação é determinado pela renda.

# Abrir o banco food do PoEdata

data(food, package = "PoEdata")

summary(food)

# 40 observações de diferentes indivíduos para as variáveis

# food_exp = gasto com alimentação semanal em dólares, e

# income = renda semanal em 100 dolares.

# Rodar um modelo para calcular a elasticidade-gasto da renda

mod_alimen <- lm(log(food_exp) ~ log(income), food)

summary(mod_alimen)

# Elasticidade renda do gasto com alimentação é 0.55. Ou seja,

# o aumento de 1% na renda leva ao aumento de 0.55% no gasto com

# alimentação semanal. Variações na renda explicam 43.0% da variabilidade

# dos gastos com alimentação entre os diferentes individuos.

# Os coeficientes estimados são significativos (individualmente) ao

# ao nível de 0.01%, o teste F aponta para significância global do

# modelo.

# Será que os erros do modelo são heterocedásticos?


# Iniciar um diagnóstico gráfico

# Modelo de Regressão Simples

plot(log(food_exp) ~ log(income), food,

main = "Diagrama de Dispersão Renda Vs Gasto com Alimentação",

xlab="Logarítmo da Renda",

ylab="Logarítmo do Gasto com Alimentação",

col="red")

abline(mod_alimen)

# Modelo de Regressão Múltipla.

data(cps,package = "PoEdata")

head(cps)

mod_wage <- lm(wage ~ educ + age, cps)

summary(mod_wage)

plot(wage ~ predict(mod_wage), cps,

main = "Diagrama de Dispersão Salário Vs Salário Previsto",

xlab="Valores previstos do salário",

ylab="Salário",

col="red")

# outro diagnóstico gráfico envolve olhar diretamente os resíduos

res_mod_alimen <- resid(mod_alimen)

food_exp_hat <- predict(mod_alimen)

plot(res_mod_alimen ~ food_exp_hat, food,

main = "Diagrama de Dispersão Resíduos Vs Gasto Previsto",

xlab="Valores previstos do gasto",

ylab="Resíduos",
col="red")

abline(h=0)

res_mod_wage <- resid(mod_wage)

plot(res_mod_wage ~ predict(mod_wage), cps,

main = "Diagrama de Dispersão Resíduos Vs Salário Previsto",

xlab="Valores previstos do Salário",

ylab="Resíduos",

col="red")

abline(h=0)

# Gráfico do Gujarati com resíduos ao quadrado

res_mod_wage <- resid(mod_wage)

plot((res_mod_wage^2) ~ predict(mod_wage), cps,

main = "Diagrama de Dispersão Resíduos 2 Vs Salário Previsto",

xlab="Valores previstos do Salário",

ylab="Resíduos 2",

col="red")

# Teste de hipótese

# Teste de Goldfeld Quandt

#1) Ordenar de forma crescente os valores de X (renda)

c <- 6 # números centrias a serem excluídos dos modelos

n <- (40-c)/2 #número de observações em cada amostra

# Ordenar o banco
food_ordenado <- food [order(food$income), ] #ordenar o banco

#2) Separar a amostra em duas partes (baixa renda e alta renda) - Excluir valores centrais para

# "exarcebar" as diferenças entre os grupos

food_baixa<-food_ordenado[1:17,]

food_alta<-food_ordenado[24:40,]

#3) Estimar duas regressões (uma cada grupo)

Mod_baixa <- lm(log(food_exp)~ log(income), food_baixa)

summary(Mod_baixa)

Mod_alta <- lm(log(food_exp)~log(income), food_alta)

summary(Mod_alta)

#4) Calcular a estatística de teste (lambda)

SQR_baixa <- sum(resid(Mod_baixa)^2)

SQR_alta <- sum(resid(Mod_alta)^2)


gl <- n-2

lambda <- (SQR_alta/gl)/(SQR_baixa/gl)

pf(lambda,gl,gl,lower.tail = FALSE) #p<0.01

#Hipótese nula de GQ

#H0: sigma 2= sigma 1 representa uma homocedasticidade

# Dado o valor p do teste, rejeita-se H0 e o modelo possui heterocedasticidade

# Usando lmtest liibrary lmtest

gqtest(mod_alimen,fraction = 6 ) ## fraction é o nobs que estão retirando

# Teste de Breusch Pagan Godfrey (BPG)

# 1) estimar modelo por MQO (mod_wage)

# 2) Obter o estimador de MV para a variancia dos erros

sigma2_mv <- sum(res_mod_wage^2)/4733

# 3) calcular pi

pi<- res_mod_wage^2 / sigma2_mv

# 4) faça uma regressao de pi em função das variaveis independentes do modelo original


mod_pi <- lm( pi~ educ + age , cps)

# 5) calcular uma estatistica theta = 1/2 SQE

anova(mod_pi)

SQE <- 956+594

theta <-1 /2 * SQE

#qual a probabilidade do theta = 775 quando o theta real = 0 ?

pchisq(theta,2,lower.tail = FALSE) # < 0.01

# Nesse caso rejeita se a H0: alpha1 = 0 , alpha2 =0 .... alphak=0 (homocedasticidade)

# atalho para a BPG no R library lmtest

bptest(mod_wage, studentize = FALSE)

# teste WHite ou teste BP extendido

Você também pode gostar