【发布时间】:2018-11-09 08:23:53
【问题描述】:
我试图弄清楚如何生成生存曲线并计算特定时间点的 P 值,而不是整个生存曲线的 P 值。
我使用包survminer、survival 中的surv 和survfit 方法来创建生存对象,并使用ggsurvplot 来绘制曲线,它是p 值。
df_surv <- Surv(time = df$diff_in_days, event = df$survivalstat)
df_survfit <- survfit(dat_surv ~ Schedule, data = df)
ggsurvplot(
df_survfit ,
data = df,
pval = TRUE
)
现在它计算 2500 多天的整个曲线的 p 值。我还想以精确的间隔计算 P 值。假设我想知道最多 365 天的生存概率。
我不能简单地切断所有生存时间超过 x(例如 365)天的记录,如下所示。然后所有的生存概率下降到 0%,因为没有考虑到事件发生在 365 之后的受试者。
事件没有,也没有人活着超过 x 天了。
df <- df[df$diff_in_days <= 365, ]
如何从整体曲线计算特定时间的 P 值?
我的数据框的dput(head(df) 用于可重现的示例。
structure(list(diff_in_days = structure(c(2160, 84, 273, 1245,
2175, 114), class = "difftime", units = "days"), Schedule = c(1,
1, 1, 2, 2, 2), survivalstat = c(0, 1, 1, 0, 1, 1)), row.names = c(12L,
28L, 33L, 38L, 58L, 62L), class = "data.frame")
我的数据框
- UID(每一行都是一个新条目)
- 事件发生否/是 (0,1)
- 距事件发生的整数天数(如果尚未发生,则计算从监控开始到当前的天数(右删失))
编辑:
使用以下代码将每个人的事件发生设置为 365 天后的 0。
dat$survivalstat <- ifelse(dat$diff_in_days > 365, 0, dat$survivalstat)
它确实计算了 p 值,但仍在整个曲线上。 365 天后,它保持水平直到 2500 多天(因为没有事件发生)结束,并且 365 天后的那些事件仍然被考虑在内,因为它们仍在曲线中。 (我假设即使 365 之后的所有数据点都相同,它们仍然会影响 P 值?)
【问题讨论】:
-
您能否提供一个可重现的最小示例?
-
我不能简单地截断所有存活时间超过 x 的记录...因为没有考虑到发生事件的时间晚于 365 年的受试者。 i> 如果你为这些科目设置生存状态
0? -
我已经编辑了我的帖子。它确实计算了 p 值,但仍然在整个曲线上。 365 天后,它在 2500 多天后保持水平直到结束(因为没有发生任何事件),并且 365 天后的那些事件仍然被考虑在内,因为它们仍在曲线中。
-
这更像是一个统计问题而不是编程问题,应该转移到交叉验证
标签: r dataframe survival-analysis