ฉันกำลังมองหาวิธีที่จะทำการทดสอบอัตราส่วนความน่าจะเป็นใน R เพื่อเปรียบเทียบแบบจำลองที่พอดี ฉันเขียนมันเองก่อนจากนั้นก็พบว่าทั้งanova()
ฟังก์ชั่นเริ่มต้นและlrtest()
ในlmtest
แพ็คเกจ เมื่อฉันตรวจสอบanova()
จะสร้างค่า p ที่แตกต่างกันเล็กน้อยจากอีกสองเสมอแม้ว่าพารามิเตอร์ 'test' จะถูกตั้งค่าเป็น "LRT" มีการanova()
ปฏิบัติจริงบางอย่างที่แตกต่างกันการทดสอบอย่างละเอียดหรือฉันไม่เข้าใจว่าอะไร?
แพลตฟอร์ม: R 3.2.0 ทำงานบน Linux Mint 17, lmtest
รุ่น 0.9-33
รหัสตัวอย่าง:
set.seed(1) # Reproducibility
n=1000
y = runif(n, min=-1, max=1)
a = factor(sample(1:5, size=n, replace=T))
b = runif(n)
# Make y dependent on the other two variables
y = y + b * 0.1 + ifelse(a==1, 0.25, 0)
mydata = data.frame(y,a,b)
# Models
base = lm(y ~ a, data=mydata)
full = lm(y ~ a + b, data=mydata)
# Anova
anova(base, full, test="LRT")
# lrtest
library(lmtest)
lrtest(base, full)
# Homebrew log-likelihood test
like.diff = logLik(full) - logLik(base)
df.diff = base$df.residual - full$df.residual
pchisq(as.numeric(like.diff) * 2, df=df.diff, lower.tail=F)
เมื่อฉันรันมันanova()
ให้ค่า p เป็น 0.6071 ในขณะที่อีกสองให้ 0.60599 ความแตกต่างเล็ก ๆ น้อย ๆ แต่คงที่และใหญ่เกินกว่าที่จะไม่แม่นยำในการจัดเก็บหมายเลขจุดลอยตัว บางคนสามารถอธิบายได้ว่าทำไมanova()
ให้คำตอบที่ต่างออกไป