You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cox比例风险模型中时变分类变量的评估问题求助

分类协变量时变风险比建模问题

我需要计算两种治疗方案的风险率,这两种方案在治疗早期的风险高于后期。参考了survival包的时变变量相关文档,但文档示例多针对连续协变量,而我的协变量是分类变量。tt()方法似乎不适用于分类变量,因此尝试通过治疗与时间分层的交互项采用阶梯函数法建模,却得到了NA结果,还因维度问题无法检验假设和使用predict()函数。以下是我的示例数据集与分析代码,请求语法层面的帮助:


数据生成与生存曲线绘制

library(tidyverse)
library(survival)
library(survminer)

## 生成数据集
set.seed(1234)
n <- 200
time <- round(runif(n, 1, 365), 0)
status <- rnorm(n, 0.5, 0.1) %>% round(0)
# 修正原代码的rep参数错误,按组生成治疗分组
df.interim <- data_frame(time, status, treatment = rep(c("w", "p"), each = n/2))

## 给"w"组增加早期死亡案例
df <- df.interim %>%
  rbind(data_frame(time = round(runif(50, 1, 50), 0), 
                   status = 1, 
                   treatment = "w"))

## 绘制生存曲线
survfit2(Surv(time, status) ~ treatment, data = df) %>% 
  ggsurvfit(linewidth = 1) +
  add_confidence_interval() +
  add_risktable() +
  add_quantile(y_value = 0.6, color = "gray50", linewidth = 0.75) +
  scale_ggsurvfit()

生存曲线


模型拟合与问题输出

## 基础Cox模型
m1 <- coxph(Surv(time, status) ~ treatment, data = df)
m1
# 输出结果:
#              coef exp(coef) se(coef)     z        p
# treatmentw 0.7215    2.0575   0.1662 4.341 1.42e-05

## 检验比例风险假设
plot(cox.zph(m1, global=TRUE))
cox.zph(m1, global=TRUE)
# 输出结果:
#           chisq df       p
# treatment  18.8  1 1.4e-05
# GLOBAL     18.8  1 1.4e-05

## 时间分层建模
df.split <- survSplit(Surv(time, status) ~ ., data=df, cut=c(50), episode= "tgroup", zero=0)
m2 <- coxph(Surv(time, status) ~ treatment:strata(tgroup), data=df.split)
m2
# 输出结果存在NA:
#                        coef exp(coef) se(coef)      z        p
# treatmentp:strata(tgroup)tgroup=1 -1.8873    0.1515   0.4004 -4.713 2.44e-06
# treatmentw:strata(tgroup)tgroup=1      NA        NA   0.0000     NA       NA
# treatmentp:strata(tgroup)tgroup=2 -0.2594    0.7715   0.2020 -1.284    0.199
# treatmentw:strata(tgroup)tgroup=2      NA        NA   0.0000     NA       NA

## 检验时间分层模型的比例风险假设时出错
plot(cox.zph(m2, global=TRUE))
cox.zph(m2, global=TRUE)
# 报错信息:
# Error in dimnames(tbl) <- list(c(termname, "GLOBAL"), c("chisq", "df",  : 
#   length of 'dimnames' [1] not equal to array extent

内容的提问来源于stack exchange,提问作者ctlamb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 04:00:22