Neden Cox değerleri orantılı tehlike modelinde p değerleri lojistik regresyondan daha yüksektir?


17

Cox orantılı tehlike modelini öğreniyorum. Lojistik regresyon modellerine uyan çok fazla deneyimim var ve bu yüzden sezgiyi oluşturmak coxphiçin R "sağkalımından" uygun modelleri kullanarak uygun lojistik regresyon modelleri glmile karşılaştırıyorum family="binomial".

Kodu çalıştırırsam:

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

0.0419 ve 0.0254 yaşları için p-değerleri elde ediyorum. Benzer şekilde, seks'i yaşla birlikte veya yaş olmadan bir belirteç olarak kullanırsam.

Bu kafa karıştırıcı buluyorum çünkü modele takılırken geçen zamanın dikkate alınmasının, ölümü ikili bir sonuç olarak ele almaktan daha fazla istatistiksel güç vereceğini düşünürken , p değerleri daha az istatistiksel güce sahip olanla tutarlı görünecektir. Burada neler oluyor?


3
Verilere bakıldığında, veriler gerçekten lojistik regresyon modeli için uygun değildir.
gung - Monica'yı eski

Yanıtlar:


20

Lojistik regresyon modeli, yanıtın bir Bernoulli denemesi olduğunu varsayar (veya daha genel olarak bir binomdur, ancak basitlik için bunu 0-1'de tutacağız). Bir hayatta kalma modeli, yanıtın tipik olarak olay zamanı olduğunu varsayar (yine, bunun atlayacağımız genellemeler vardır). Koymak için başka bir yol birimleri olmasıdır geçen bir olay gerçekleşene kadar değerler bir dizi. Her noktada bir madalyonun aslında gizli bir şekilde çevrilmesi değil. (Bu olabilir ki , ancak daha sonra tekrarlanan önlemler için bir modele ihtiyacınız olabilir - belki de bir GLMM.)

Lojistik regresyon modeliniz, her ölümü o yaşta meydana gelen ve kuyruk haline gelen bir bozuk para olarak alır. Aynı şekilde, sansürlenen her veriyi, belirtilen yaşta meydana gelen ve başa çıkan tek bir bozuk para flip olarak kabul eder. Buradaki sorun, verilerin gerçekte ne olduğu ile tutarsız olmasıdır.

İşte bazı veriler ve modellerin çıktıları. (Çizginin koşullu yoğunluk grafiğiyle eşleşmesi için tahminleri lojistik regresyon modelinden canlı tahmin etmeye çevirdiğimi unutmayı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")

Kaplan-Meier çizimi

Lojistik regresyondan tahmin edilen olasılıklar ile omurga ve koşullu yoğunluk grafiği


Verilerin bir sağkalım analizi veya lojistik regresyon için uygun olduğu bir durumu değerlendirmek yararlı olabilir. Hastanın taburcu olduktan sonraki 30 gün içinde yeni bir protokol veya bakım standardı altında hastaneye yeniden kabul edilme olasılığını belirlemek için bir çalışma düşünün. Bununla birlikte, tüm hastalar geri kabul için takip edilir ve sansür yoktur (bu çok gerçekçi değildir), bu nedenle geri kabul için kesin zaman sağkalım analizi ile analiz edilebilir (yani burada Cox orantılı bir tehlike modeli). Bu durumu simüle etmek için, .5 ve 1 oranlı üstel dağılımları kullanacağım ve 30 değerini temsil etmek için 1 değerini bir kesme olarak kullanacağım:

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

resim açıklamasını buraya girin

Bu durumda, lojistik regresyon modeli (p-değeri görüyoruz 0.163) idi (bir yaşam sürdürme analizi p-değerinden daha yüksek0.005 ). Bu fikri daha fazla araştırmak için, bir lojistik regresyon analizinin gücünü bir hayatta kalma analizine karşı tahmin etmek için simülasyonu genişletebiliriz ve Cox modelindeki p-değerinin lojistik regresyondan p-değerinden daha düşük olma olasılığı . Ben de 1.4 olarak eşik olarak kullanacağım, böylece lojistik regresyonu en düşük düzeyde bir kesme kullanarak dezavantajlı değilim:

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

Lojistik regresyonun gücü sağkalım analizi (% 93 kadar) daha (% 75 kadar) daha düşük, ve hayatta kalma analizleri ile ilgili p-değerleri% 90 lojistik regresyon karşılık gelen p-değerleri daha düşüktür. Gecikme sürelerini hesaba katmak, bazı eşik değerlerden daha az veya daha büyük yerine, sezdiğiniz gibi daha fazla istatistiksel güç sağlar.


1
Rica ederim, @JonahSinick. Lojistik regresyonun hayatta kalma analizinden daha güçlü olacağı durumlarla başa çıkmak mümkündür, ancak temel durum hakkında haklısınız: hayatta kalma analizi her gözlemden daha fazla bilgi kullanır ve bu nedenle genellikle daha güçlü olmalıdır.
gung - Monica'yı eski
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.