การคาดคะเน
ฉันไม่รู้เกี่ยวกับการศึกษาเปรียบเทียบการทดสอบเหล่านี้ ฉันสงสัยว่าการทดสอบ Ljung-Box เหมาะสมกว่าในบริบทของตัวแบบอนุกรมเวลาเช่นตัวแบบ ARIMA ซึ่งตัวแปรอธิบายนั้นล่าช้าของตัวแปรตาม การทดสอบ Breusch-Godfrey อาจจะเหมาะสมกว่าสำหรับแบบจำลองการถดถอยทั่วไปที่พบสมมติฐานแบบดั้งเดิม (โดยเฉพาะการถดถอยแบบภายนอก)
การคาดเดาของฉันคือการกระจายตัวของการทดสอบ Breusch-Godfrey (ซึ่งขึ้นอยู่กับส่วนที่เหลือจากการถดถอยที่เหมาะสมโดย Ordinary Least Squares) อาจได้รับผลกระทบจากความจริงที่ว่าตัวแปรอธิบายไม่ได้ภายนอก
ฉันทำแบบฝึกหัดจำลองเล็ก ๆ เพื่อตรวจสอบสิ่งนี้และผลที่ได้คือสิ่งที่ตรงกันข้าม: การทดสอบ Breusch-Godfrey ทำได้ดีกว่าการทดสอบ Ljung-Box เมื่อทดสอบการหาค่าความสัมพันธ์แบบอัตโนมัติในส่วนที่เหลือของแบบจำลองการตอบโต้อัตโนมัติ รายละเอียดและรหัส R เพื่อทำซ้ำหรือปรับเปลี่ยนการออกกำลังกายได้รับด้านล่าง
แบบฝึกหัดการจำลองขนาดเล็ก
การใช้งานทั่วไปของการทดสอบ Ljung-Box คือการทดสอบความสัมพันธ์แบบอนุกรมในส่วนที่เหลือจากแบบจำลอง ARIMA ที่ติดตั้งไว้ ที่นี่ฉันสร้างข้อมูลจากรุ่น AR (3) และพอดีกับรุ่น AR (3)
ส่วนที่เหลือเป็นไปตามสมมติฐานว่างโดยไม่มีความสัมพันธ์อัตโนมัติดังนั้นเราคาดว่าค่า p ที่กระจายอย่างสม่ำเสมอ สมมติฐานว่างควรถูกปฏิเสธในอัตราร้อยละของคดีใกล้เคียงกับระดับนัยสำคัญที่เลือกเช่น 5%
การทดสอบกล่อง Ljung:
## Ljung-Box test
n <- 200 # number of observations
niter <- 5000 # number of iterations
LB.pvals <- matrix(nrow=niter, ncol=4)
set.seed(123)
for (i in seq_len(niter))
{
# Generate data from an AR(3) model and store the residuals
x <- arima.sim(n, model=list(ar=c(0.6, -0.5, 0.4)))
resid <- residuals(arima(x, order=c(3,0,0)))
# Store p-value of the Ljung-Box for different lag orders
LB.pvals[i,1] <- Box.test(resid, lag=1, type="Ljung-Box")$p.value
LB.pvals[i,2] <- Box.test(resid, lag=2, type="Ljung-Box")$p.value
LB.pvals[i,3] <- Box.test(resid, lag=3, type="Ljung-Box")$p.value
LB.pvals[i,4] <- Box.test(resid, lag=4, type="Ljung-Box", fitdf=3)$p.value
}
sum(LB.pvals[,1] < 0.05)/niter
# [1] 0
sum(LB.pvals[,2] < 0.05)/niter
# [1] 0
sum(LB.pvals[,3] < 0.05)/niter
# [1] 0
sum(LB.pvals[,4] < 0.05)/niter
# [1] 0.0644
par(mfrow=c(2,2))
hist(LB.pvals[,1]); hist(LB.pvals[,2]); hist(LB.pvals[,3]); hist(LB.pvals[,4])
ผลการวิจัยพบว่าสมมติฐานว่างถูกปฏิเสธในกรณีที่หายากมาก สำหรับระดับ 5% อัตราการปฏิเสธนั้นต่ำกว่า 5% มาก การกระจายของค่า p แสดงอคติต่อการไม่ปฏิเสธค่าว่าง
หลักการfitdf=3
ควรแก้ไขในทุกกรณี นี่จะอธิบายถึงองศาอิสระที่หายไปหลังจากปรับโมเดล AR (3) เพื่อให้ได้ส่วนที่เหลือ อย่างไรก็ตามสำหรับความล่าช้าในการสั่งซื้อที่ต่ำกว่า 4 สิ่งนี้จะนำไปสู่องศาลบหรือศูนย์อิสระทำให้การทดสอบไม่เหมาะสม ตามเอกสาร?stats::Box.test
: การทดสอบเหล่านี้ถูกนำมาใช้บางครั้งสิ่งตกค้างจาก ARMA (P, Q) พอดีซึ่งในกรณีอ้างอิงแนะนำประมาณดีกว่าที่จะกระจายโมฆะเป็นสมมติฐานที่จะได้รับโดยการตั้งค่าให้แน่นอนว่าfitdf = p+q
lag > fitdf
การทดสอบ Breusch-Godfrey:
## Breusch-Godfrey test
require("lmtest")
n <- 200 # number of observations
niter <- 5000 # number of iterations
BG.pvals <- matrix(nrow=niter, ncol=4)
set.seed(123)
for (i in seq_len(niter))
{
# Generate data from an AR(3) model and store the residuals
x <- arima.sim(n, model=list(ar=c(0.6, -0.5, 0.4)))
# create explanatory variables, lags of the dependent variable
Mlags <- cbind(
filter(x, c(0,1), method= "conv", sides=1),
filter(x, c(0,0,1), method= "conv", sides=1),
filter(x, c(0,0,0,1), method= "conv", sides=1))
colnames(Mlags) <- paste("lag", seq_len(ncol(Mlags)))
# store p-value of the Breusch-Godfrey test
BG.pvals[i,1] <- bgtest(x ~ 1+Mlags, order=1, type="F", fill=NA)$p.value
BG.pvals[i,2] <- bgtest(x ~ 1+Mlags, order=2, type="F", fill=NA)$p.value
BG.pvals[i,3] <- bgtest(x ~ 1+Mlags, order=3, type="F", fill=NA)$p.value
BG.pvals[i,4] <- bgtest(x ~ 1+Mlags, order=4, type="F", fill=NA)$p.value
}
sum(BG.pvals[,1] < 0.05)/niter
# [1] 0.0476
sum(BG.pvals[,2] < 0.05)/niter
# [1] 0.0438
sum(BG.pvals[,3] < 0.05)/niter
# [1] 0.047
sum(BG.pvals[,4] < 0.05)/niter
# [1] 0.0468
par(mfrow=c(2,2))
hist(BG.pvals[,1]); hist(BG.pvals[,2]); hist(BG.pvals[,3]); hist(BG.pvals[,4])
ผลลัพธ์สำหรับการทดสอบ Breusch-Godfrey นั้นดูสมเหตุสมผลกว่า ค่า p มีการกระจายอย่างสม่ำเสมอและอัตราการปฏิเสธอยู่ใกล้กับระดับนัยสำคัญ (ตามที่คาดไว้ภายใต้สมมติฐานว่าง)