การทดสอบ Breusch-Pagan ทั้งสองนี้แตกต่างกันอย่างไร?


9

การใช้ R กับข้อมูลบางอย่างและพยายามดูว่าข้อมูลของฉันเป็นแบบ heteroscedastic หรือไม่ฉันพบการใช้งานสองแบบของการทดสอบ Breusch-Pagan, bptest (แพ็คเกจ lmtest) และncvTest (รถยนต์แพ็คเกจ) อย่างไรก็ตามสิ่งเหล่านี้ให้ผลลัพธ์ที่แตกต่าง ความแตกต่างระหว่างสองคืออะไร? เมื่อใดที่คุณควรเลือกใช้อย่างใดอย่างหนึ่ง

> 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 

ตัวอย่างเหล่านี้แสดงให้เห็นว่าจากการทดสอบข้อมูลของฉันจะเป็นแบบ heteroscedastic และอีกกรณีหนึ่งเป็น homoscedastic ฉันพบคำถามนี้ที่นี่ดังนั้น bptest อาจ studentized และ ncvTest อาจไม่อย่างไรก็ตามสิ่งนี้หมายความว่าอย่างไร

คำตอบ:


9

การเดาของคุณถูกต้องncvTestทำการทดสอบ Breusch-Pagan เวอร์ชันดั้งเดิม bptest(model, studentize = FALSE)นี้สามารถจริงจะตรวจสอบโดยเปรียบเทียบกับ (ดังที่ @ Helix123 ชี้ให้เห็น, สองฟังก์ชั่นยังแตกต่างกันในด้านอื่น ๆ เช่นอาร์กิวเมนต์เริ่มต้น, หนึ่งควรตรวจสอบคู่มือแพ็คเกจlmtestและcarสำหรับรายละเอียดเพิ่มเติม)

การทดสอบ Breusch อิสลาม studentized ถูกเสนอโดยอาร์ Koenker ของเขาใน 1,981 บทความหมายเหตุเกี่ยวกับ Studentizing การทดสอบสำหรับ heteroscedasticity ความแตกต่างที่ชัดเจนที่สุดของทั้งสองคือพวกเขาใช้สถิติการทดสอบที่แตกต่างกัน กล่าวคือให้เป็นสถิติทดสอบของนักเรียนและเป็นข้อมูลดั้งเดิมξξ^

ξ^=λξ,λ=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 อาจเป็นประโยชน์:

... บทสรุปที่สองเกิดขึ้นจากการวิเคราะห์นี้:

  1. พลังเชิงปลอดเชื้อของการทดสอบ Breusch และ Pagan นั้นไวต่อการกระจายของมากและε
  2. ขนาด asymptotic ของการทดสอบนั้นถูกต้องเฉพาะในกรณีพิเศษของ kurtosis เสียน

ข้อสรุปเดิมมีการขยายตัวใน Koenker และ Bassett (1981) โดยมีข้อเสนอแนะอีกทางหนึ่งคือการทดสอบที่มีประสิทธิภาพสำหรับความแตกต่างของข้อได้เปรียบ ข้อสรุปหลังบ่งบอกว่าระดับความสำคัญที่แนะนำโดย Breusch และ Pagan จะถูกต้องภายใต้เงื่อนไขแบบเกาส์ เท่านั้น เนื่องจากเงื่อนไขดังกล่าวจะถือว่าโดยทั่วไปบนความเชื่อคนตาบอดและเป็นอย่างฉาวโฉ่ยากที่จะตรวจสอบการเปลี่ยนแปลงของการทดสอบ Breusch และอิสลามเป็นข้อเสนอแนะที่ถูกต้อง "studentise" สถิติการทดสอบและนำไปสู่ระดับนัยสำคัญที่ถูกต้อง asymptotically สำหรับชั้นเรียนขนาดใหญ่พอสมควรของการกระจายสำหรับvarepsilonεε

ในระยะสั้นการทดสอบ BP ที่ทำให้เป็นนักเรียนนั้นแข็งแกร่งกว่าแบบทดสอบดั้งเดิม


2
อย่างไรก็ตามมีความแตกต่างอื่น ๆncvTestและbptestใช้ตัวแปรต่าง ๆ เพื่ออธิบายส่วนที่เหลือให้ดูข้อโต้แย้งvar.formulaและvarformulaตามลำดับ ผลลัพธ์จะแตกต่างกันเมื่อคุณเพิ่ม regressor อื่นลงในตัวอย่างของคุณ
Helix123

@ 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

"ตัวเลือกการรวมกันเชิงเส้น" ช่วยให้สามารถตรวจสอบ heteroskedasticity ที่เกี่ยวข้องกับการพึ่งพาเชิงเส้นของตัวแปรอิสระที่เฉพาะเจาะจง ตัวอย่างเช่นเพียง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 ที่ทำให้นักเรียนมีความแข็งแกร่งกว่าแบบทดสอบดั้งเดิม" ฉันมักจะไปด้วยbptestพร้อมกับstudentize = TRUE(ค่าเริ่มต้น) และvarformula = ~ fitted.values(my.lm)เป็นตัวเลือกสำหรับวิธีการเริ่มต้นสำหรับ homoskedasticity

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.