Tại sao giá trị p thường cao hơn trong mô hình rủi ro tỷ lệ Cox so với hồi quy logistic?


17

Tôi đã tìm hiểu về mô hình nguy hiểm theo tỷ lệ Cox. Tôi có rất nhiều kinh nghiệm phù hợp mô hình hồi quy logistic, và các mô hình như vậy để xây dựng trực giác tôi đã so sánh vừa vặn sử dụng coxphtừ R "sống sót" với các mô hình hồi quy logistic vừa vặn sử dụng glmvới family="binomial".

Nếu tôi chạy mã:

library(survival)
s = Surv(time=lung$time, event=lung$status - 1)
summary(coxph(s ~ age, data=lung))
summary(glm(status-1 ~ age, data=lung, family="binomial"))

Tôi nhận được giá trị p cho tuổi 0,0419 và 0,0254 tương ứng. Tương tự như vậy nếu tôi sử dụng tình dục như một công cụ dự đoán, có hoặc không có tuổi.

Tôi thấy khó hiểu vì tôi nghĩ rằng việc dành thời gian trôi qua khi điều chỉnh mô hình sẽ mang lại nhiều sức mạnh thống kê hơn là chỉ coi cái chết là kết quả nhị phân, trong khi các giá trị p có vẻ phù hợp với một người có sức mạnh thống kê ít hơn. Chuyện gì đang xảy ra ở đây?


3
Nhìn vào dữ liệu, dữ liệu thực sự không phù hợp với mô hình hồi quy logistic.
gung - Phục hồi Monica

Câu trả lời:


20

Mô hình hồi quy logistic giả định rằng phản hồi là một thử nghiệm Bernoulli (hay nói chung hơn là nhị thức, nhưng để đơn giản, chúng tôi sẽ giữ nguyên 0-1). Một mô hình sinh tồn giả định rằng phản hồi thường là thời gian xảy ra sự kiện (một lần nữa, có những khái quát về điều này mà chúng ta sẽ bỏ qua). Một cách khác để nói rằng các đơn vị đang truyền qua một loạt các giá trị cho đến khi một sự kiện xảy ra. Nó không phải là một đồng tiền thực sự được lật một cách riêng biệt tại mỗi điểm. (Tất nhiên điều đó có thể xảy ra, nhưng sau đó bạn sẽ cần một mô hình cho các biện pháp lặp đi lặp lại có lẽ là một GLMM.)

Mô hình hồi quy logistic của bạn lấy mỗi cái chết như một đồng xu lật xảy ra ở tuổi đó và đưa ra đuôi. Tương tự như vậy, nó coi mỗi mốc dữ liệu bị kiểm duyệt là một lần lật đồng xu duy nhất xảy ra ở độ tuổi quy định và đưa ra các đầu. Vấn đề ở đây là không phù hợp với dữ liệu thực sự là gì.

Dưới đây là một số sơ đồ của dữ liệu và đầu ra của các mô hình. (Lưu ý rằng tôi chuyển các dự đoán từ mô hình hồi quy logistic sang dự đoán còn sống để đường thẳng khớp với biểu đồ mật độ có điều kiện.)

library(survival)
data(lung)
s = with(lung, Surv(time=time, event=status-1))
summary(sm <- coxph(s~age, data=lung))
# Call:
# coxph(formula = s ~ age, data = lung)
# 
#   n= 228, number of events= 165 
# 
#         coef exp(coef) se(coef)     z Pr(>|z|)  
# age 0.018720  1.018897 0.009199 2.035   0.0419 *
# ---
# Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# 
#     exp(coef) exp(-coef) lower .95 upper .95
# age     1.019     0.9815     1.001     1.037
# 
# Concordance= 0.55  (se = 0.026 )
# Rsquare= 0.018   (max possible= 0.999 )
# Likelihood ratio test= 4.24  on 1 df,   p=0.03946
# Wald test            = 4.14  on 1 df,   p=0.04185
# Score (logrank) test = 4.15  on 1 df,   p=0.04154
lung$died = factor(ifelse(lung$status==2, "died", "alive"), levels=c("died","alive"))
summary(lrm <- glm(status-1~age, data=lung, family="binomial"))
# Call:
# glm(formula = status - 1 ~ age, family = "binomial", data = lung)
# 
# Deviance Residuals: 
#     Min       1Q   Median       3Q      Max  
# -1.8543  -1.3109   0.7169   0.8272   1.1097  
# 
# Coefficients:
#             Estimate Std. Error z value Pr(>|z|)  
# (Intercept) -1.30949    1.01743  -1.287   0.1981  
# age          0.03677    0.01645   2.235   0.0254 *
# ---
# Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# 
# (Dispersion parameter for binomial family taken to be 1)
# 
#     Null deviance: 268.78  on 227  degrees of freedom
# Residual deviance: 263.71  on 226  degrees of freedom
# AIC: 267.71
# 
# Number of Fisher Scoring iterations: 4
windows()
  plot(survfit(s~1))
windows()
  par(mfrow=c(2,1))
  with(lung, spineplot(age, as.factor(status)))
  with(lung, cdplot(age, as.factor(status)))
  lines(40:80, 1-predict(lrm, newdata=data.frame(age=40:80), type="response"),
        col="red")

Âm mưu Kaplan-Meier

Spineplot & biểu đồ mật độ có điều kiện w / dự đoán xác suất từ ​​hồi quy logistic


Có thể hữu ích để xem xét một tình huống trong đó dữ liệu phù hợp cho phân tích sinh tồn hoặc hồi quy logistic. Hãy tưởng tượng một nghiên cứu để xác định xác suất bệnh nhân sẽ được đưa vào bệnh viện trong vòng 30 ngày sau khi xuất viện theo một giao thức mới hoặc tiêu chuẩn chăm sóc. Tuy nhiên, tất cả các bệnh nhân đều được theo dõi để nhận lại, và không có kiểm duyệt (điều này không thực tế lắm), vì vậy thời gian chính xác để nhận lại có thể được phân tích với phân tích tỷ lệ sống sót (viz., Mô hình mối nguy theo tỷ lệ Cox ở đây). Để mô phỏng tình huống này, tôi sẽ sử dụng các phân phối theo cấp số nhân với tỷ lệ 0,5 và 1 và sử dụng giá trị 1 làm điểm cắt để biểu thị trong 30 ngày:

set.seed(0775)  # this makes the example exactly reproducible
t1 = rexp(50, rate=.5)
t2 = rexp(50, rate=1)
d  = data.frame(time=c(t1,t2), 
                group=rep(c("g1","g2"), each=50), 
                event=ifelse(c(t1,t2)<1, "yes", "no"))
windows()
  plot(with(d, survfit(Surv(time)~group)), col=1:2, mark.time=TRUE)
  legend("topright", legend=c("Group 1", "Group 2"), lty=1, col=1:2)
  abline(v=1, col="gray")

with(d, table(event, group))
#      group
# event g1 g2
#   no  29 22
#   yes 21 28
summary(glm(event~group, d, family=binomial))$coefficients
#               Estimate Std. Error   z value  Pr(>|z|)
# (Intercept) -0.3227734  0.2865341 -1.126475 0.2599647
# groupg2      0.5639354  0.4040676  1.395646 0.1628210
summary(coxph(Surv(time)~group, d))$coefficients
#              coef exp(coef)  se(coef)        z    Pr(>|z|)
# groupg2 0.5841386  1.793445 0.2093571 2.790154 0.005268299

nhập mô tả hình ảnh ở đây

Trong trường hợp này, chúng ta thấy rằng giá trị p từ mô hình hồi quy logistic ( 0.163) cao hơn so với giá trị p từ một phân tích tồn tại ( 0.005). Để khám phá ý tưởng này hơn nữa, chúng ta có thể mở rộng mô phỏng để ước tính sức mạnh của phân tích hồi quy logistic so với phân tích sinh tồn và xác suất giá trị p từ mô hình Cox sẽ thấp hơn giá trị p từ hồi quy logistic . Tôi cũng sẽ sử dụng 1,4 làm ngưỡng, để tôi không gây bất lợi cho hồi quy logistic bằng cách sử dụng ngưỡng cắt tối ưu:

xs = seq(.1,5,.1)
xs[which.max(pexp(xs,1)-pexp(xs,.5))]  # 1.4

set.seed(7458)
plr = vector(length=10000)
psv = vector(length=10000)
for(i in 1:10000){
  t1 = rexp(50, rate=.5)
  t2 = rexp(50, rate=1)
  d  = data.frame(time=c(t1,t2), group=rep(c("g1", "g2"), each=50), 
                  event=ifelse(c(t1,t2)<1.4, "yes", "no"))
  plr[i] = summary(glm(event~group, d, family=binomial))$coefficients[2,4]
  psv[i] = summary(coxph(Surv(time)~group, d))$coefficients[1,5]
}
## estimated power:
mean(plr<.05)  # [1] 0.753
mean(psv<.05)  # [1] 0.9253
## probability that p-value from survival analysis < logistic regression:
mean(psv<plr)  # [1] 0.8977

Vì vậy, sức mạnh của hồi quy logistic thấp hơn (khoảng 75%) so với phân tích tồn tại (khoảng 93%), và 90% của p-giá trị từ việc phân tích tồn tại đã thấp hơn so với p-giá trị tương ứng từ hồi quy logistic. Nếu tính đến thời gian trễ, thay vì chỉ nhỏ hơn hoặc lớn hơn một số ngưỡng sẽ mang lại nhiều sức mạnh thống kê hơn như bạn đã trực giác.


1
Không có gì đâu, @JonahSinick. Có thể tạo ra các tình huống trong đó hồi quy logistic sẽ mạnh hơn phân tích sinh tồn, nhưng bạn nói đúng về tình huống cơ bản: phân tích sinh tồn sử dụng nhiều thông tin hơn từ mỗi quan sát & vì vậy nhìn chung sẽ mạnh hơn.
gung - Phục hồi Monica
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.