ロジスティック回帰モデルは、応答がベルヌーイ試行(または、より一般的には二項分布ですが、簡単にするために、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")
データが生存分析またはロジスティック回帰のいずれかに適している状況を考慮すると役立つ場合があります。新しいプロトコルまたは標準治療の下で、退院後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値よりも低かったです。遅延時間をあるしきい値よりも小さくしたり大きくしたりする代わりに考慮すると、あなたが直感したように、より多くの統計的検出力が得られます。