R plot(surv(), newdata=...) 多次绘制相同的线 - 为什么?

数据挖掘 r 生存分析
2022-02-19 16:04:07

我是 R 新手,无法按需要进行绘图工作。问题是 R 似乎一遍又一遍地画出相同的四条线,而且是多余的。我遇到的情况的详细信息如下。

我有一个数据集:

> str(dataset)
'data.frame':   57641 obs. of  3 variables:
 $ duration : num  3 8 7 2 4 8 2 2 8 8 ...
 $ graduated: logi  FALSE TRUE TRUE FALSE FALSE TRUE ...
 $ group    : num  651 651 671 671 651 651 651 651 651 651 ...

然后,我对其拟合了 Cox 比例风险回归模型:

survObj <- Surv(time = dataset$duration / 2, event = dataset$graduated)
model <- coxph(survObj ~ group, data=dataset)

接下来,按照这个例子,我创建了一个框架,希望通过组号对生存函数进行分组:

frame <- data.frame(group = dataset$group)

> str(frame)
'data.frame':   57641 obs. of  1 variable:
 $ group: num  651 651 671 671 651 651 651 651 651 651 ...

数据中有四组:

> unique(dataset$group)
[1] 651 671 652 681

使用这个新框架,我创建了一个合适的生存模型:

fitObjGrouped <- survfit(model, newdata = frame)

最后,我绘制了这个东西:

color_set <- rainbow(4)
plot(fitObjGrouped, col=color_set)

结果具有正确的线条,但相互绘制了很多次:

绘制的生存模型 - 重叠线

如您所见,最后绘制了两条红线和两条蓝线。它们是正确的,每个类别都有一个,但仔细观察会发现它们每个下面都有一条绿色或其他颜色的线。将其转换为 PDF 时,文件大小是应有大小的 273 倍!

所以问题是:为什么 R 画线这么多次,我怎么能同时实现正确的模型拟合和绘图?

有人可以帮助我更好地理解我正在使用的 R 命令吗?提前致谢!

2个回答

请注意,在链接的演示文稿中,在标题为“绘制效果”的幻灯片上,treat对象只有 2 行。

在您的情况下,因为frame有 57k 行,所以fitObjGroupednewdata. 您可以使用 来验证这一点fitObjGrouped$n要解决此问题,请尝试:

frame <- data.frame(group = unique(dataset$group))

尝试使组成为一个因素,您可能希望使其成为一个阶层,

model <- coxph(survObj ~ strata(factor(group)), data=dataset)

不确定这是否会有所帮助,但肯定会对 Surv 如何处理您的信息产生影响。如果没有因素 Surv 将考虑分组一个数字变量,其中该数字的增加将导致更多的案例。将其转换为因子和分层将估计每组的不同生存曲线。

不确定这是否有助于您的情节,但它肯定会影响您的配合结果。