通过 anova 从 cph 和 coxph 计算的卡方差异

机器算法验证 r 回归 方差分析 卡方检验 cox模型
2022-04-04 06:13:43

coxph卡方(来自-> anova)和 Wald 卡方(来自cph-> )之间有区别anova吗?

我该如何解释这些卡方值?在这种情况下,P<0.05 意味着什么?为什么每个变量的卡方值之和不等于 TOTAL?我的想法是每个卡方表示每个变量的预测信息和整个模型的总预测信息。

> library(survival)
> library(rms)
>
> data(colon)
> d <- colon
> m1 <- cph(Surv(time, status) ~ age + sex + nodes, data=d)
> anova(m1)
                Wald Statistics          Response: Surv(time, status) 

 Factor     Chi-Square d.f. P     
 age          0.03     1    0.8612
 sex          0.93     1    0.3349
 nodes      189.79     1    <.0001
 TOTAL      192.01     3    <.0001
> 0.03+0.93+189.79 # = 190.75
[1] 190.75
> m2 <- coxph(Surv(time, status) ~ age + sex + nodes, data=d)
> anova(m2)
Analysis of Deviance Table
 Cox model: response is Surv(time, status)
Terms added sequentially (first to last)

       loglik    Chisq Df Pr(>|Chi|)    
NULL  -6424.0                           
age   -6423.6   0.7147  1     0.3979    
sex   -6423.4   0.5019  1     0.4787    
nodes -6356.9 132.8685  1     <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
1个回答

测试差异

使用的两种测试有两个不同之处:

  1. 似然比检验与 Wald 检验的使用
  2. 在给定其他变量的情况下,使用顺序测试与测试一个变量的影响

由于您的示例数据集很大(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包含和的模型进行比较 agesex

对于第三个变量 ,nodes我们在给定 和 的情况下检验是否具有nodes统计显着性我们将包含 和 的模型包含的模型进行比较这是我们可以将结果与来自 的测试进行比较的唯一测试agesexagesexagesex nodesanova(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- 统计量sex0.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-值(对于任何实际用途)相同。