Sự khác biệt giữa hai bài kiểm tra Breusch-Pagan này là gì?


9

Sử dụng R trên một số dữ liệu và cố gắng xem liệu dữ liệu của tôi có phải là không đồng nhất hay không, tôi đã tìm thấy hai triển khai thử nghiệm Breusch-Pagan, bptest (gói lmtest) và ncvTest (xe gói). Tuy nhiên, những kết quả này tạo ra kết quả khác nhau. Sự khác biệt giữa hai là gì? Khi nào bạn nên chọn sử dụng cái này hay cái kia?

> 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 

Những ví dụ này cho thấy theo các thử nghiệm, dữ liệu của tôi nằm trong một trường hợp không đồng nhất và trong trường hợp khác là homoscedastic. Tôi đã tìm thấy câu hỏi này ở đây để bptest có thể được học sinh và ncvTest có thể không, tuy nhiên, điều này có nghĩa là gì?

Câu trả lời:


9

Dự đoán của bạn là chính xác, ncvTestthực hiện phiên bản gốc của bài kiểm tra Breusch-Pagan. Điều này thực sự có thể được xác minh bằng cách so sánh nó với bptest(model, studentize = FALSE). (Như @ Helix123 đã chỉ ra, hai chức năng cũng khác nhau về các khía cạnh khác, chẳng hạn như các đối số mặc định, một nên kiểm tra hướng dẫn sử dụng gói lmtestcarđể biết thêm chi tiết.)

ξ*ξ^

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

Đây là một đoạn mã thể hiện những gì tôi vừa viết (dữ liệu được lấy từ faraway gói):

> 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

Về lý do tại sao một người muốn học sinh kiểm tra HA ban đầu, một trích dẫn trực tiếp từ bài viết của R. Koenker's có thể hữu ích:

... Hai kết luận xuất hiện từ phân tích này:

  1. ε , và
  2. kích thước tiệm cận của xét nghiệm chỉ đúng trong trường hợp đặc biệt của bệnh Kurt Gaussian.

εε

Nói tóm lại, bài kiểm tra HA được học sinh mạnh hơn bài kiểm tra ban đầu.


2
Tuy nhiên, có một sự khác biệt khác: ncvTestbptestsử dụng các biến khác nhau để giải thích các phần dư, xem các đối số var.formulavarformula, tương ứng. Kết quả sẽ phân kỳ khi bạn thêm một biến hồi quy vào ví dụ của mình.
Helix123

@ Helix123: cảm ơn bạn, tôi đoán tôi đã bỏ lỡ điều đó.
Phanxicô

2

Trong điều kiện thực tế, ncvTestsử dụng phía bên trái của phương trình và bptestsử dụng phía bên phải, theo mặc định.

Điều đó có nghĩa là trong trường hợp Y ~ X, cả hai bài kiểm tra sẽ cung cấp kết quả giống nhau (liên quan đến studentize = Ftùy chọn bptest). Nhưng trong một phân tích đa biến nhưY ~ X1 + X2 , kết quả sẽ khác nhau. (Như @ Helix123 đã chỉ ra)

Từ tệp trợ giúp của ncvTest : var.formula: "công thức một phía cho phương sai lỗi; nếu bỏ qua, phương sai lỗi phụ thuộc vào các giá trị được trang bị ." Điều đó có nghĩa là theo mặc định, các giá trị được trang bị sẽ được sử dụng, nhưng nó cũng cho phép sử dụng kết hợp tuyến tính của các biến độc lập (X1 + X2).

Từ tệp trợ giúp của bptest : varformula: "Theo mặc định, các biến giải thích tương tự được lấy như trong mô hình hồi quy chính."

Tiếp tục ví dụ tương tự về @Francis (dữ liệu stat500, từ farawaygói):

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

Kiểm tra HA, sử dụng các giá trị được trang bị:

> 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

Kiểm tra HA, sử dụng kết hợp tuyến tính của các yếu tố dự đoán:

> 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

"Tùy chọn kết hợp tuyến tính" cho phép điều tra tính không đồng nhất liên quan đến sự phụ thuộc tuyến tính của một biến độc lập cụ thể. Ví dụ: chỉ là hwbiến:

> 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

Cuối cùng, như @Francis đã tóm tắt, "Nói tóm lại, xét nghiệm HA được học sinh mạnh hơn so với thử nghiệm ban đầu", tôi thường đi theo bptest, với studentize = TRUE(mặc định) và varformula = ~ fitted.values(my.lm)như các tùy chọn, cho cách tiếp cận ban đầu cho tính đồng nhất.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.