これら2つのBreusch-Paganテストの違いは何ですか?


9

一部のデータでRを使用し、データが不均一であるかどうかを確認しようとしたところ、Breusch-Paganテストの2つの実装、bptest(パッケージlmtest)とncvTest(パッケージcar)が見つかりました。ただし、これらの結果は異なります。2つの違いは何ですか?どちらを使用するかをいつ選択すべきですか?

> 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 

これらの例は、テストによると、私のデータはある場合には異分散性であり、別の場合には同分散性であることを示しています。ここでこの質問を見つけので、bptestが学生化されている可能性があり、ncvTestはそうではない可能性がありますが、これはどういう意味ですか?

回答:


9

あなたの推測は正しいですncvTest。Breusch-Paganテストの元のバージョンを実行します。これは実際にと比較することで確認できbptest(model, studentize = FALSE)ます。(@ Helix123が指摘したように、2つの関数はデフォルトの引数などの他の側面も異なります。詳細についてはlmtest、パッケージのマニュアルを確認する必要がありcarます。)

ξξ^

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

以下は、私が書いたばかりの内容を示すコードのスニペットです(farawayパッケージから取得したデータ)。

> 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

元のBPテストを学生化したい理由については、R。Koenkerの記事からの直接引用が役立つかもしれません。

...この分析から2つの結論が明らかになります。

  1. ε
  2. テストの漸近サイズは、ガウス尖度の特別な場合にのみ正しいです。

εε

つまり、スチューデント化されたBPテストは、元のテストよりも堅牢です。


2
しかし、別の違いがあります:ncvTestbptest引数を参照、残差を説明するために別の変数を使用var.formulaし、varformulaそれぞれを、。例に別のリグレッサを追加すると、結果は分岐します。
Helix123 '29年

@ Helix123:ありがとう、逃したと思います。
フランシス

2

実際には、ncvTest方程式の左辺を使用し、bptestデフォルトでは、右辺を使用します。

これは、の場合Y ~ X、両方のテストで同じ結果が得られることを意味します(のstudentize = Fオプションに関してbptest)。ただし、などの多変量解析Y ~ X1 + X2では、結果が異なります。(@ Helix123が指摘したように)

ヘルプファイルからncvTest : var.formula:「エラー分散の片側式。省略した場合、エラー分散は近似値によって異なります。」つまり、デフォルトでは、フィットされた値が使用されますが、独立変数(X1 + X2)の線形結合を使用することもできます。

bptest : varformula「デフォルトでは、メインの回帰モデルと同じ説明変数が使用されます。」のヘルプファイルから。

@Francisの同じ例を続ける(パッケージstat500からのデータfaraway):

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

BPテスト、近似値を使用:

> 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

予測子の線形結合を使用したBPテスト:

> 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

「線形結合オプション」を使用すると、特定の独立変数の線形依存に関連する異分散性を調査できます。たとえば、hw変数のみ:

> 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

@Francisは、まとめとして最後に、私は通常と一緒に行き、「要するに、スチューデントBPテストは、元の1よりも堅牢である」bptestと、studentize = TRUE(デフォルト)とvarformula = ~ fitted.values(my.lm)homoskedasticityための最初のアプローチのためのオプションとして。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.