在 R 中为生存模型创建分组变量

Creating a grouping variable for a survival model in R

我正在尝试在 R 中绘制 KM 曲线,但首先我需要拟合生存对象。我有一个包含 100 行的数据集,其中每一行对应于 A 组或 B 组中的患者。我想做的是能够绘制(在同一图上)A 组与 A 组的 KM 曲线B 组与 A+B 组(所以每个人)。我遇到的麻烦是弄清楚如何构造组变量。我假设你不能在单个变量中做到这一点,所以这就是我正在尝试的,尽管它似乎没有正常工作(我没有让每个人都进入 A 组和 B 组)。

set.seed(4)

n = 100
x = runif(n,0,1500)
y = runif(n,0,5)
survival = runif(n,1,1000)
censor = rbinom(n,1,.5)

dat = data.frame(x=x,y=y,survival=survival,censor=censor)

### Create a group indicator variable
# 1: Group A
# 2: Group B
# 3: Everyone else
group = rep(3,nrow(dat))
group[which(dat$x < 730.5)] = 1
group[which(dat$y >= 2)] = 2


### Kaplan Meier curves
# Need new group indicator variables
A = ifelse(group == 1,1,0)
B = ifelse(group == 2,1,0)
AB = ifelse(group != 3,1,0)


### Overall survival
os = survfit(Surv(dat$survival,dat$censor)~A + B + AB,data=dat) 

因此,如果您 运行 示例并键入 os,您将看到 AB 中的样本大小 = 27,而我想要的是 17+56=73。

一种简单的方法是创建一个新列,指示该行所属的组(A 或 B),并将其与整个总体 (A+B) 绑定。 然后简单地 运行 模型对抗组。

# Create a new variable to indicate the group and drop the group you don't need.
dat$group = "C"
dat$group = ifelse( dat$x < 730.5, "A", dat$group )
dat$group = ifelse( dat$y >= 2, "B", dat$group )
dat = subset( dat, dat$group != "C" )

# Bind the sample with the population
dat2 = dat
dat2$group = "AB"
data = rbind( dat2, dat )

table( data$group )
# A AB  B 
# 17 73 56 

# Plot 
plot( survfit(Surv(data$survival,data$censor)~group,data=data) )