Làm thế nào để R tính giá trị p cho hồi quy nhị thức này?


8

Hãy xem xét hồi quy nhị thức sau:

# Create some data
set.seed(10)
n <- 500
x <- runif(n,0,100)
y <- x + rnorm(n,sd=100) < 0
 
# Fit a binomial regression model
model <- glm(y ~ x, family="binomial")

summary(model)

Các summaryhàm trả về một giá trị p của 1.03e-05. Khi sử dụng anova.glm, người ta nhận được các giá trị p cực trị hơn một chút bất kể phương pháp nào được sử dụng để tính giá trị p.

anova(model, test="Rao")   # p.value = 7.5e-6
anova(model, test="LRT")   # p.value = 6.3e-6
anova(model, test="Chisq") # p.value = 6.3e-6

Giá trị p từ summaryhàm có áp dụng cho cùng một giả thuyết như các giá trị được trả về bởi anovahàm không? Nếu có, làm thế nào để summarytính giá trị p này và có thể thực hiện cùng một tính toán trực tiếp với anova?


3
Mặc dù hàm R lấy "nhị thức" làm đối số cho gia đình, họ nhị thức mặc định giả định liên kết logit và bạn đang tiến hành hồi quy logistic.
AdamO

Câu trả lời:


5

Nó có thể giúp bạn đọc câu trả lời của tôi ở đây: Tại sao giá trị p của tôi khác nhau giữa đầu ra hồi quy logistic, kiểm tra chi bình phương và khoảng tin cậy cho OR? Câu hỏi của bạn ở đây gần như là một bản sao của câu hỏi đó, nhưng có một vài yếu tố bổ sung trong câu hỏi của bạn có thể được giải quyết.

summary.glm()t0t

Sử dụng anova.glm()cho phép bạn truy cập vào các bài kiểm tra khác nhau. Khi bạn đặt test="Rao", nó cung cấp cho bạn giá trị p từ bài kiểm tra điểm. Và khi bạn thiết lập một trong hai test="Chisq"hoặc test="LRT"(họ đều giống nhau), nó mang lại cho bạn những giá trị p từ một thử nghiệm tỷ lệ khả năng.

Các anova.glm()chức năng thực hiện kiểm tra giả thuyết tương tự như kiểm tra Wald ở summary()đầu ra trong trường hợp này . Đó chỉ là vì mô hình của bạn chỉ có một biến. Các anova.glm()chức năng sẽ thực hiện kiểm tra tuần tự, mà là tương tự như 'loại I SS' trong một khung cảnh tuyến tính, trong khi các cuộc thử nghiệm Wald từ summary()là tương tự như 'gõ III SS' trong một khung cảnh tuyến tính (xem câu trả lời của tôi ở đây: Làm thế nào để giải thích loại I, loại II, và loại III ANOVA và MANOVA? ). Xem xét:

x2 = rnorm(n)
m2 = glm(y~x+x2, family="binomial")
summary(m2)$coefficients
#                Estimate  Std. Error    z value     Pr(>|z|)
# (Intercept) -0.05906436 0.186876339 -0.3160612 7.519561e-01
# x           -0.01567551 0.003537183 -4.4316372 9.352029e-06
# x2          -0.05967796 0.099093504 -0.6022388 5.470152e-01
anova(m2, test="LRT")
# Terms added sequentially (first to last)
# 
#      Df Deviance Resid. Df Resid. Dev  Pr(>Chi)    
# NULL                   499     619.10              
# x     1  20.3841       498     598.72 6.335e-06 ***
# x2    1   0.3627       497     598.35     0.547    
m3 = glm(y~x2+x, family="binomial")  # I just switched the order of x & x2 here
summary(m3)$coefficients
#                Estimate  Std. Error    z value     Pr(>|z|)
# (Intercept) -0.05906436 0.186876339 -0.3160612 7.519561e-01
# x2          -0.05967796 0.099093504 -0.6022388 5.470152e-01  # these are the same
# x           -0.01567551 0.003537183 -4.4316372 9.352029e-06  #  as above
anova(m3, test="LRT")
# Terms added sequentially (first to last)
# 
#      Df Deviance Resid. Df Resid. Dev  Pr(>Chi)    
# NULL                   499     619.10              
# x2    1   0.1585       498     618.94    0.6906      # these differ from the
# x     1  20.5883       497     598.35 5.694e-06 ***  #  anova output above

Bạn có thể sử dụng anova.glm()hàm để cung cấp cho bạn các điểm kiểm tra tỷ lệ và khả năng của các biến riêng lẻ trong mô hình hồi quy logistic nhiều tương tự như 'SS loại III', nhưng thật tẻ nhạt. Bạn sẽ cần tiếp tục chỉnh sửa mô hình của mình để lần lượt từng biến được liệt kê cuối cùng trong công thức được cung cấp cho glm()cuộc gọi. Giá trị p cuối cùng được liệt kê trong anova.glm()đầu ra là một giá trị tương tự với 'loại III SS'.

Để có được các bài kiểm tra tỷ số điểm hoặc khả năng của các biến riêng lẻ thuận tiện hơn, drop1()thay vào đó hãy sử dụng . Xem xét:

drop1(m3, test="LRT")
# Single term deletions
# 
# Model:
# y ~ x2 + x
#        Df Deviance    AIC     LRT  Pr(>Chi)    
# <none>      598.35 604.35                      
# x2      1   598.72 602.72  0.3627     0.547      # the same as when x2 is last above
# x       1   618.94 622.94 20.5883 5.694e-06 ***  # the same as when x  is last above

6

Trong R, summaryhàm để glmtính giá trị p bằng cách sử dụng thống kê Wald đơn giản, nghĩa là

2×Φ(-|β^|SE(β^))

β^SE(β^)Φ

Để tạo lại điều này từ đầu ra của bạn, hãy thử

 beta = coef(model)[2]
 # getting estimate
 B_SE = sqrt(vcov(model)[2,2])
 # extracting standard error
 pvalue =  pnorm(-abs(beta) / B_SE)  * 2
 # pvalue = 1.027859e-05
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.