Tôi đang tìm cách để thực hiện một thử nghiệm tỷ lệ khả năng trong R để so sánh sự phù hợp của mô hình. Trước tiên tôi tự mã hóa nó, sau đó tìm thấy cả anova()
hàm mặc định và cả lrtest()
trong lmtest
gói. Tuy nhiên, khi tôi kiểm tra, anova()
luôn tạo ra một giá trị p hơi khác so với hai giá trị kia mặc dù tham số 'test' được đặt thành "LRT". Là anova()
thực sự thực hiện một số thử nghiệm tinh tế khác nhau, hoặc tôi không hiểu điều gì?
Nền tảng: R 3.2.0 chạy trên Linux Mint 17, lmtest
phiên bản 0.9-33
Mã mẫu:
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)
Khi tôi chạy nó, anova()
cho giá trị p là 0,6071, trong khi hai cái còn lại cho 0,60599. Một sự khác biệt nhỏ, nhưng nhất quán và quá lớn để không chính xác trong cách lưu trữ số dấu phẩy động. Ai đó có thể giải thích tại sao anova()
đưa ra một câu trả lời khác nhau?