เหตุใดค่า p จึงสูงขึ้นในโมเดลอันตรายตามสัดส่วนของ Cox มากกว่าในการถดถอยโลจิสติก


17

ฉันได้เรียนรู้เกี่ยวกับรูปแบบอันตรายตามสัดส่วนของค็อกซ์แล้ว ฉันมีจำนวนมากประสบการณ์ที่เหมาะสมรูปแบบการถดถอยโลจิสติกและเพื่อที่จะสร้างสัญชาตญาณของฉันได้รับการเปรียบเทียบรูปแบบให้พอดีกับการใช้coxphจาก R "อยู่รอด" ที่มีรูปแบบการถดถอยโลจิสติกพอดีใช้กับglmfamily="binomial"

ถ้าฉันใช้รหัส:

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"))

ฉันรับค่า p สำหรับอายุ 0.0419 และ 0.0254 ตามลำดับ ในทำนองเดียวกันถ้าฉันใช้เพศเป็นตัวทำนายโดยมีหรือไม่มีอายุ

ฉันพบว่ามันทำให้งงเพราะฉันคิดว่าการใช้เวลาเป็นจำนวนมากเมื่อพิจารณาว่าแบบจำลองจะให้พลังงานทางสถิติมากกว่าการรักษาความตายเป็นผลลัพธ์ไบนารีในขณะที่ค่า p จะสอดคล้องกับที่มีกำลังทางสถิติน้อยลง เกิดขึ้นที่นี่คืออะไร?


3
เมื่อมองไปที่ข้อมูลแล้วข้อมูลนั้นไม่เหมาะสมกับตัวแบบการถดถอยโลจิสติกส์
gung - Reinstate Monica

คำตอบ:


20

แบบจำลองการถดถอยโลจิสติกถือว่าการตอบสนองคือการทดลองของ Bernoulli (หรือมากกว่านั้นคือทวินาม แต่สำหรับความเรียบง่ายเราจะเก็บ 0-1 ไว้) แบบจำลองการเอาตัวรอดสมมติว่าการตอบสนองนั้นโดยทั่วไปจะมีเวลาสำหรับเหตุการณ์ (อีกครั้งมีข้อสรุปทั่วไปของสิ่งที่เราจะข้ามไป) อีกวิธีในการใส่นั่นคือหน่วยกำลังผ่านชุดของค่าจนกว่าเหตุการณ์จะเกิดขึ้น ไม่ใช่ว่าเหรียญจะพลิกอย่างสิ้นเชิงในแต่ละจุด ( อาจเกิดขึ้นได้ แต่จากนั้นคุณต้องมีแบบจำลองสำหรับมาตรการซ้ำ ๆ - บางทีอาจเป็น GLMM)

แบบจำลองการถดถอยโลจิสติกส์ของคุณใช้เวลาในการเสียชีวิตเป็นเหรียญพลิกที่เกิดขึ้นในยุคนั้นและก้อย ในทำนองเดียวกันมันจะพิจารณาแต่ละข้อมูลที่ถูกตรวจสอบว่าเป็นการพลิกเหรียญเดียวที่เกิดขึ้นตามอายุที่กำหนดและขึ้นหัว ปัญหาที่นี่คือที่ไม่สอดคล้องกับสิ่งที่ข้อมูลจริงๆ

นี่คือบางส่วนของข้อมูลและผลลัพธ์ของโมเดล (โปรดทราบว่าฉันพลิกการทำนายจากตัวแบบการถดถอยโลจิสติกเพื่อทำนายการมีชีวิตอยู่เพื่อให้เส้นตรงกับพล็อตความหนาแน่นตามเงื่อนไข)

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")

พล็อต Kaplan-Meier

Spineplot & พล็อตความหนาแน่นตามเงื่อนไขพร้อมความน่าจะเป็นที่คาดการณ์จากการถดถอยโลจิสติก


มันอาจเป็นประโยชน์ในการพิจารณาสถานการณ์ที่ข้อมูลมีความเหมาะสมสำหรับการวิเคราะห์การอยู่รอดหรือการถดถอยโลจิสติก ลองนึกภาพการศึกษาเพื่อตรวจสอบความน่าจะเป็นที่ผู้ป่วยจะได้รับการรักษาซ้ำในโรงพยาบาลภายใน 30 วันหลังจากได้รับการรักษาภายใต้ระเบียบวิธีใหม่หรือมาตรฐานการดูแล อย่างไรก็ตามผู้ป่วยทุกคนมีการติดตามการยอมให้เข้ามาอีกครั้งและไม่มีการเซ็นเซอร์ (นี่ไม่ใช่ความจริงที่น่ากลัว) ดังนั้นเวลาที่แน่นอนในการยอมให้เข้ามาใหม่สามารถวิเคราะห์ได้ด้วยการวิเคราะห์การรอดชีวิต (กล่าวคือแบบจำลองสัดส่วนอันตราย Cox ในการจำลองสถานการณ์นี้ฉันจะใช้การแจกแจงแบบเอ็กซ์โพเนนเชียลที่มีอัตรา. 5 และ 1 และใช้ค่า 1 เป็น cutoff แทน 30 วัน:

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

ป้อนคำอธิบายรูปภาพที่นี่

ในกรณีนี้เราจะเห็นว่า p-value จากรูปแบบการถดถอยโลจิสติก ( 0.163) เป็นสูงกว่า p-value จากการวิเคราะห์การอยู่รอด ( 0.005) ในการสำรวจความคิดนี้เพิ่มเติมเราสามารถขยายการจำลองเพื่อประเมินพลังของการวิเคราะห์การถดถอยโลจิสติกเทียบกับการวิเคราะห์การอยู่รอดและความน่าจะเป็นที่ค่า p-value จากโมเดล Cox จะต่ำกว่าค่า p จากการถดถอยโลจิสติก . ฉันจะใช้ 1.4 เป็นเกณฑ์เพื่อที่ฉันจะไม่เสียเปรียบการถดถอยโลจิสติกโดยใช้การตัดยอดที่ไม่ดี:

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

ดังนั้นพลังงานของการถดถอยโลจิสติกส์จึงต่ำกว่า (ประมาณ 75%) กว่าการวิเคราะห์การรอดชีวิต (ประมาณ 93%) และ 90% ของค่า p จากการวิเคราะห์การอยู่รอดต่ำกว่าค่า p ที่สอดคล้องกันจากการถดถอยโลจิสติกส์ การพิจารณาความล่าช้าในการพิจารณาแทนที่จะน้อยกว่าหรือมากกว่าขีด จำกัด บางอย่างจะให้พลังทางสถิติมากขึ้นเมื่อคุณมีสัญชาตญาณ


1
ยินดีต้อนรับ @JonahSinick เป็นไปได้ที่จะสร้างสถานการณ์ที่การถดถอยโลจิสติกจะมีประสิทธิภาพมากกว่าการวิเคราะห์การเอาตัวรอด แต่คุณพูดถูกเกี่ยวกับสถานการณ์พื้นฐาน: การวิเคราะห์การเอาตัวรอดใช้ข้อมูลเพิ่มเติมจากการสังเกตแต่ละครั้งและโดยทั่วไปควรมีประสิทธิภาพมากกว่า
gung - Reinstate Monica
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.