Qual é a diferença entre esses dois testes Breusch-Pagan?

9

Usando R em alguns dados e tentando ver se meus dados são heterocedásticos ou não, encontrei duas implementações do teste Breusch-Pagan, bptest (package lmtest) e ncvTest (package car). No entanto, estes produzem resultados diferentes. Qual é a diferença entre os dois? Quando você deve optar por usar um ou outro?

> model <- lm(y ~ x)
> bp <- bptest(model)
> bp
studentized Breusch-Pagan test

data:  model 
BP = 3.3596, df = 1, p-value = 0.06681

> ncvTest(model)
Non-constant Variance Score Test 
Variance formula: ~ fitted.values 
Chisquare = 3.858704    Df = 1     p = 0.04948855 

Este exemplo mostra que, de acordo com os testes, meus dados são heterocedásticos e, no outro, homoscedásticos. Eu encontrei essa pergunta aqui, para que o melhor texto possa ser estudado e o ncvTest, no entanto, o que isso significa então?

Mien
fonte

Respostas:

9

Seu palpite está correto, ncvTestexecuta a versão original do teste Breusch-Pagan. Na verdade, isso pode ser verificado comparando-o com bptest(model, studentize = FALSE). (Como o @ Helix123 apontou, duas funções também diferem em outros aspectos, como argumentos padrão, deve-se verificar os manuais dos pacotes lmteste carobter mais detalhes.)

O teste de Breusch-Pagan estudado foi proposto por R. Koenker em seu artigo de 1981, Uma nota sobre o estudo de um teste para heterocedasticidade . A diferença mais óbvia dos dois é que eles usam estatísticas de teste diferentes. Ou seja, as estatísticas de teste estudadas e seja a original,* ξξξ^

ξ^=λξ,λ=Var(ε2)2Var(ε)2.

Aqui está um trecho de código que demonstra o que acabei de escrever (dados extraídos do farawaypacote):

> mdl = lm(final ~ midterm, data = stat500)
> bptest(mdl)

    studentized Breusch-Pagan test

data:  mdl
BP = 0.86813, df = 1, p-value = 0.3515

> bptest(mdl, studentize = FALSE)

    Breusch-Pagan test

data:  mdl
BP = 0.67017, df = 1, p-value = 0.413

> ncvTest(mdl)
Non-constant Variance Score Test 
Variance formula: ~ fitted.values 
Chisquare = 0.6701721    Df = 1     p = 0.4129916 
> 
> n = nrow(stat500)
> e = residuals(mdl)
> bpmdl = lm(e^2 ~ midterm, data = stat500)
> lambda = (n - 1) / n * var(e^2) / (2 * ((n - 1) / n * var(e))^2)
> Studentized_bp = n * summary(bpmdl)$r.squared
> Original_bp = Studentized_bp * lambda
> 
> Studentized_bp
[1] 0.8681335
> Original_bp
[1] 0.6701721

Quanto ao motivo pelo qual alguém quer estudar o teste de PA original, uma citação direta do artigo de R. Koenker pode ser útil:

... Duas conclusões emergem dessa análise:

  1. O poder assintótico do teste de Breusch e Pagan é extremamente sensível à curtose da distribuição de , eε
  2. o tamanho assintótico do teste é correto apenas em casos especiais de curtose gaussiana.

A primeira conclusão é expandida em Koenker e Bassett (1981), onde são sugeridos testes alternativos e robustos para a heterocedasticidade. A última conclusão implica que os níveis de significância sugeridos por Breusch e Pagan estarão corretos apenas sob condições gaussianas em . Como essas condições geralmente são assumidas com fé cega e são notoriamente difíceis de verificar, é sugerida uma modificação do teste de Breusch e Pagan que "estuda" corretamente a estatística do teste e leva a níveis de significância assintoticamente corretos para uma classe razoavelmente grande de distribuições para .εε

Em suma, o teste de PA estudado é mais robusto que o original.

Francis
fonte
2
No entanto, há outra diferença: ncvTeste bptestuse variáveis ​​diferentes para explicar os resíduos, consulte argumentos var.formulae varformula, respectivamente. Os resultados divergem quando você adiciona outro regressor ao seu exemplo.
precisa saber é o seguinte
@ Helix123: obrigado, acho que perdi isso.
Francis
2

Em termos práticos, ncvTestusa o lado esquerdo da equação e bptestusa o lado direito, por padrão.

Isso significa que, em um caso de Y ~ X, ambos os testes fornecerão os mesmos resultados (em relação à studentize = Fopção de bptest). Mas em uma análise multivariada, como Y ~ X1 + X2, os resultados serão diferentes. (Como @ Helix123 apontou)

No arquivo de ajuda de ncvTest : var.formula: "uma fórmula unilateral para a variação de erro; se omitida, a variação de erro depende dos valores ajustados ." O que significa que, por padrão, os valores ajustados serão usados, mas também permite usar uma combinação linear das variáveis ​​independentes (X1 + X2).

No arquivo de ajuda de bptest : varformula: "Por padrão, as mesmas variáveis ​​explicativas são obtidas como no modelo de regressão principal."

Continuando o mesmo exemplo de @Francis (dados stat500, do farawaypacote):

> mdl_t = lm(final ~ midterm + hw, data = stat500)

Teste de pressão arterial, usando valores ajustados:

> ncvTest(mdl_t) # Default

Non-constant Variance Score Test 
Variance formula: ~ fitted.values 
Chisquare = 0.6509135    Df = 1     p = 0.4197863 

> bptest(mdl_t, varformula = ~ fitted.values(mdl_t), studentize = F)

Breusch-Pagan test

data:  mdl_t
BP = 0.65091, df = 1, p-value = 0.4198

Teste de pressão arterial, usando uma combinação linear de preditores:

> ncvTest(mdl_t, var.formula = ~ midterm + hw)
Non-constant Variance Score Test 
Variance formula: ~ midterm + hw 
Chisquare = 0.7689743    Df = 2     p = 0.6807997 

> bptest(mdl_t, studentize = F) # Default

Breusch-Pagan test

data:  mdl_t
BP = 0.76897, df = 2, p-value = 0.6808

A "opção de combinação linear" permite investigar a heterocedasticidade associada à dependência linear de uma variável independente específica. Por exemplo, apenas a hwvariável:

> ncvTest(mdl_t, var.formula = ~ hw)
Non-constant Variance Score Test 
Variance formula: ~ hw 
Chisquare = 0.04445789    Df = 1     p = 0.833004 

> bptest(mdl_t, varformula = ~ stat500$hw, studentize = F)

Breusch-Pagan test

data:  mdl_t
BP = 0.044458, df = 1, p-value = 0.833

Por fim, como o @Francis resumiu: "Em resumo, o teste de PA estudado é mais robusto que o original", costumo acompanhar bptest, com studentize = TRUE(padrão) e varformula = ~ fitted.values(my.lm)como opções, uma abordagem inicial para a homocedasticidade.

Ana
fonte