测试差异
使用的两种测试有两个不同之处:
- 似然比检验与 Wald 检验的使用
- 在给定其他变量的情况下,使用顺序测试与测试一个变量的影响
由于您的示例数据集很大(1822 个完整的观测值,包含 897 个事件),第一个差异并不重要,所以让我们先看看第二个差异。
给定其他变量的顺序测试与一个变量的测试
请注意,anova()
在coxph
模型上运行的输出显示为Terms added sequentially (first to last)
。这意味着对于第一个变量 ,age
我们只是测试是否age
是一个统计上显着的预测变量,而不查看任何其他变量。基本上,我们age
使用似然比测试(我们可以这样做,因为模型是嵌套的)来测试模型是否比没有解释变量(只有截距)的模型更适合数据。这应该给出相同的结果
anova(coxph(Surv(time, status) ~ age, data=d))
(实际结果略有不同,因为其他解释变量中的数据缺失。如果你去掉缺失数据的观察,你会得到完全相同的答案。)
对于第二个变量 ,sex
我们检验sex
给定 是否具有统计显着性age
;我们将仅包含 的模型与同时age
包含和的模型进行比较。 age
sex
对于第三个变量 ,nodes
我们在给定 和 的情况下检验是否具有nodes
统计显着性;我们将包含 和 的模型与包含和的模型进行比较。这是我们可以将结果与来自 的测试进行比较的唯一测试。age
sex
age
sex
age
sex
nodes
anova(m1)
在给定coxph
模型的其他变量的情况下对一个变量进行测试
coxph
为了从模型中获得与一般模型中的结果相当的测试结果cph
,我们有几种选择。一种简单的方法是drop1()
使用似然比检验将完整模型(三个预测变量)与包含除一个之外的所有预测变量的模型进行比较。首先,为了避免根据我们包含的变量而出现不同观察数量的问题,我们根据完整数据重新拟合模型:
d.comp = na.omit(d[c("time","status","age","sex","nodes")])
m2.comp = update(m2, data=d.comp)
不,我们依次删除每个预测器:
drop1(m2.comp, test="Chisq")
并得到
Df AIC LRT Pr(>Chi)
<none> 12720
age 1 12718 0.031 0.8611
sex 1 12719 0.929 0.3351
nodes 1 12851 132.868 <2e-16 ***
如您所见,结果与来自 的 Wald 测试的结果非常相似cph
。
沃尔德测试?
那么什么是 Wald 测试呢?基本上,由于所有预测变量都是连续的,它们只是正常的、渐近的z检验,但具有平方检验统计量。也就是说,每个检验统计量都是z来自summary(m2.comp)
(和z统计量是估计系数除以其标准误差)。例子:
summary(m2.comp)
coef exp(coef) se(coef) z Pr(>|z|)
age 0.0004934 1.0004936 0.0028216 0.175 0.861
sex -0.0645554 0.9374842 0.0669405 -0.964 0.335
nodes 0.0872323 1.0911501 0.0063330 13.774 <2e-16 ***
这z- 统计量sex
是−0.0645554/0.0669405=−0.964, 和(−0.964)2=0.93,这是模型sex
预测变量的 Wald 检验的卡方统计量。cph
(对于因子和非线性变量,考虑到用于表示因子/非线性效应的(虚拟/变换)变量的估计量之间的相关性,计算稍微复杂一些。)
使用哪些测试?
给定其他变量的顺序测试和一个变量的测试都是有意义的,但它们测试不同的假设。前者基本上是问“如果我添加这个新的预测器,它会改善拟合吗?” 迭代地,对于潜在预测变量的有序列表。后者询问“鉴于我包括所有其他预测变量,添加这个是否会改善拟合?”。
Wald 检验与似然比检验
两个检验之间的另一个差异,即上面提到的差异 1,是渐近 Wald 检验(基本上依赖于中心极限定理——您有足够的观察结果,检验统计量近似正态分布)和(部分)似然之间的差异比率测试(LRT)。对于小型数据集,结果可能会有所不同。(即使在这里,nodes
变量的检验统计量也大不相同。)通常,似然比检验是首选。
如果您想比较使用“coxph()”(或其他正常回归函数)拟合的同一模型上的 Wald 和 LRT 测试,使用该car
包非常容易:
library(car)
Anova(m2.comp, test.statistic="Wald") # Equal to anova(m1)
Anova(m2.comp, test.statistic="LR") # Equal to drop1(m2.comp, test="Chisq")
这给了我们:
# LR
LR Chisq Df Pr(>Chisq)
age 0.0 1 0.86
sex 0.9 1 0.34
nodes 132.9 1 <2e-16 ***
# Wald
Df Chisq Pr(>Chisq)
age 1 0.03 0.86
sex 1 0.93 0.33
nodes 1 189.73 <2e-16 ***
毫不奇怪,p-值(对于任何实际用途)相同。