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

R语言Kaplan-Meier分析中区间删失与右删失结果一致问题排查

生存分析中区间删失数据的正确识别问题

研究背景与数据定义

将昆虫置于冷却浴中逐步降温,在0至-35℃区间逐个取出,将取出温度取绝对值作为removal_temp列(模拟生存模型中的时间变量)。每个昆虫仅检测一次存活状态:

  • death = 1:昆虫死亡,属于区间删失(死亡发生在0到对应removal_temp的零下温度区间内)
  • death = 0:昆虫存活,属于右删失(存活时间超过对应removal_temp)

尝试的代码与问题

我尝试用以下代码创建区间删失的生存对象:

surv_object_interval <- with(insect_data, Surv(start_temp, removal_temp, event = death)) 
surv_object_interval

生存对象格式显示为(0, 35+],但运行后续分析代码后,结果和绘图与普通右删失分析完全一致:

km_interval <- survfit(surv_object_interval ~ 1)
summary(km_interval)

ggsurvfit(km_interval) +
 labs(x = "Removal Temperature (-°C)", y = "Survival Probability") +
 add_confidence_interval()

普通右删失分析代码:

surv_object_original <- Surv(insect_data$removal_temp, insect_data$death) 
surv_object_original 
km_original <- survfit(surv_object_original ~ 1) 
summary(km_original)

ggsurvfit(km_original) +
 labs(x = "Removal Temperature (-°C)", y = "Survival Probability") +
 add_confidence_interval()

R似乎未正确识别区间删失类型,导致两种分析结果一致。如何让R正确识别death = 1为区间删失、death = 0为右删失?

可复现代码与样本数据

library(survminer)
library(survival)

# 样本数据
set.seed(1738)
n <- 40
removal_temp <- seq(10, 35, length.out = n)
start_temp <- rep(0, n)
death <- c(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,0,0,1,0,0,0,0,1,0,0,0,0) 
insect_data <- data.frame(removal_temp, start_temp, death)

解决方案

问题根源

Surv()函数默认格式下,event=1被识别为在区间终点发生精确事件(即死亡时间等于removal_temp),而非你需要的区间删失类型,这导致分析逻辑和普通右删失完全一致。

正确的生存对象创建方式

需要指定type="interval2"参数,并重新定义事件类型的取值,匹配区间删失的规则:

# 重新定义事件类型:
# 2 = 区间删失(死亡发生在(start_temp, removal_temp)区间内)
# 0 = 右删失(存活时间 > removal_temp)
insect_data$event_type <- ifelse(insect_data$death == 1, 2, 0)

# 创建正确的区间删失生存对象
surv_object_correct <- with(insect_data, Surv(start_temp, removal_temp, event = event_type, type = "interval2"))
surv_object_correct

验证分析结果

运行生存分析后,结果会和普通右删失分析产生差异,说明R已正确识别区间删失:

km_correct <- survfit(surv_object_correct ~ 1)
summary(km_correct)

ggsurvfit(km_correct) +
 labs(x = "Removal Temperature (-°C)", y = "Survival Probability") +
 add_confidence_interval()

关键规则说明

type="interval2"模式下,event参数的取值对应不同删失类型:

  • 0: 右删失(存活时间超过区间终点)
  • 1: 精确事件(事件恰好发生在区间终点)
  • 2: 区间删失(事件发生在区间内部)
  • 3: 左删失(事件发生在区间起点之前)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 16:11:11