如何让 parameters() 使用 coxph() 的稳健标准误?
结论
可以显式指定使用 coxph 对象的协方差矩阵。对于包含 cluster(id) 的 survival::coxph() 模型,survival 默认使用稳健方差。先用 vcov(fit) 取得协方差矩阵,再通过 parameters::model_parameters() 计算标准误和区间。parameters 的文档支持通过 vcov 参数指定协方差矩阵函数。parameters 的 vcov 文档 survival 的 coxph 文档
parameters::model_parameters(fit, vcov = stats::vcov)
vcov(fit) 应与拟合对象使用的方差类型一致。这里用了 cluster(id),所以 coxph() 默认启用稳健方差。如果模型是以其他方式拟合的,不要假定 vcov(fit) 一定是稳健协方差矩阵。
检查输出中的不一致
题目中的结果显示,系数约为 0.46,标准误为 0.56,因此 Wald z 值应约为 0.46 / 0.56 ≈ 0.82,与输出中的 437.88 不符。可以直接比较模型摘要中的标准误和协方差矩阵给出的标准误:
summary(fit)$coefficients
sqrt(diag(vcov(fit)))
summary(fit)$coefficients 会列出系数、标准误和检验统计量;sqrt(diag(vcov(fit))) 给出协方差矩阵对应的标准误。如果输出中的 z 与系数除以显示的 SE 明显不符,区间也与该 SE 不一致,那么这组汇总结果内部就不一致。仅凭题目提供的输出,无法确定这是 parameters 的缺陷,还是特定版本中的提取问题。可以先用上面的 vcov 参数显式计算,再核对实际输出。
如果要自行计算基于该协方差矩阵的 95% Wald 置信区间,可以使用:
b <- coef(fit)
se <- sqrt(diag(vcov(fit)))
z <- b / se
ci <- cbind(
lower = b - qnorm(0.975) * se,
upper = b + qnorm(0.975) * se
)
cbind(coefficient = b, SE = se, z = z, ci)
注意聚类数量
示例数据中的 id 只有两个取值,也就是两个聚类。即使软件能计算聚类稳健标准误,聚类数过少时,稳健方差和据此得到的检验结果也可能不稳定。因此,不宜只凭一个很小的 p 值下结论。应结合研究设计和聚类数量选择合适的推断方法。
备注:内容仅供参考。
