로지스틱 회귀 분석보다 Cox 비례 위험 모델에서 p- 값이 더 높은 이유는 무엇입니까?


17

콕스 비례 위험 모델에 대해 배웠습니다. 로지스틱 회귀 모형에 적합한 경험이 많으므로 직관을 구축하기 위해 coxphR "survival"에서 사용 glm하는 모형을로 사용 하는 로지스틱 회귀 모형 과 비교했습니다 family="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"))

나는 각각 0.0419와 0.0254의 p- 값을 얻습니다. 마찬가지로 내가 나이가 있거나없는 예측 인자로서 섹스를 사용한다면.

이 수수께끼는 모델을 피팅 할 때 경과 된 시간을 고려하면 사망을 이진 결과로 처리하는 것보다 더 많은 통계적 힘을 줄 것이지만 p 값은 통계적 힘이 덜한 것과 일치하는 것처럼 보일 것입니다. 무슨 일이야?


3
데이터를 살펴보면 데이터는 실제로 로지스틱 회귀 모델에 적합하지 않습니다.
gung-Monica Monica 복원

답변:


20

로지스틱 회귀 모형은 반응이 베르누이 시행 (또는 일반적으로 이항 법이지만 단순성을 위해 0-1으로 유지)이라고 가정합니다. 생존 모델은 응답이 일반적으로 이벤트 시간이라고 가정합니다 (다시 말하지만 생략 할 일반화가 있습니다). 또 다른 방법 은 이벤트가 발생할 때까지 단위가 일련의 값을 통과 한다는 것입니다 . 실제로 각 지점에서 동전이 이산 적으로 뒤집 히지는 않습니다. ( 물론 일어날 수도 있지만 반복 측정을위한 모델, 아마도 GLMM이 필요할 것입니다.)

로지스틱 회귀 모델은 각 시대에 발생한 동전 뒤집기로 사망 할 때마다 꼬리가 나타납니다. 마찬가지로, 검열 된 각 데이텀은 지정된 나이에 발생한 단일 코인 플립으로 간주하고 머리를 consider습니다. 여기서 문제는 데이터가 실제로 무엇과 일치하지 않는다는 것입니다.

다음은 데이터의 플롯과 모델의 출력입니다. (물론 나는 로지스틱 회귀 모델에서 선이 조건부 밀도 플롯과 일치하도록 살아있는 예측으로 전환합니다.)

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

카플란 마이어 플롯

로지스틱 회귀 분석에서 예측 된 확률이 포함 된 Spineplot 및 조건부 밀도 플롯


데이터가 생존 분석 또는 로지스틱 회귀 분석에 적합한 상황을 고려하는 것이 도움이 될 수 있습니다. 새로운 프로토콜 또는 표준 치료법에 따라 퇴원 후 30 일 이내에 환자가 병원에 ​​재 입원 될 확률을 결정하기위한 연구를 상상해보십시오. 그러나 모든 환자는 재 입원을 받았으며 검열이 없었습니다 (이것은별로 현실적이지 않습니다). 정확한 재 입원 시간은 생존 분석 (즉, 콕스 비례 위험 모델)으로 분석 할 수 있습니다. 이 상황을 시뮬레이션하기 위해 속도 .5와 1의 지수 분포를 사용하고 1을 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 값이 (볼 0.163) 이었다 생존 분석의 P 값보다 높은 ( 0.005). 이 아이디어를 더 탐색하기 위해 시뮬레이션을 확장하여 로지스틱 회귀 분석의 검정력 대 생존 분석을 추정하고 Cox 모델의 p- 값이 로지스틱 회귀 분석의 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

로지스틱 회귀의 힘이 너무 생존 분석 (93 %에 대해) 이상 (75 %에 대한) 하부 및 생존 분석에서의 p의 값의 90 %가 회귀로부터 대응하는 P-값보다 낮았다. 지연 시간을 일부 임계 값보다 작거나 큰 값 대신 고려하면 직감 한대로 더 많은 통계적 힘을 얻을 수 있습니다.


1
천만에요, @JonahSinick. 로지스틱 회귀 분석이 생존 분석보다 강력한 상황을 파악하는 것이 가능하지만, 기본 상황에 대해서는 옳습니다. 생존 분석은 각 관측치에서 더 많은 정보를 활용하므로 일반적으로 더 강력해야합니다.
gung-복원 Monica Monica
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.