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

如何设置数据使用reda包Recur函数研究重复事件并解决报错

问题原因分析

第一个报错:Subjects having events at or after censoring: 1, 2

reda包的Recur函数要求每个个体(此处为Location)的最后一个时间区间必须是截尾记录(event=0),用于明确观察终止节点。但你的数据存在两个问题:

  • Location 1的最后一行event=1,意味着该区间内发生故障后无后续截尾记录,系统判定为“截尾后仍有事件”
  • Location 2仅包含一段event=1的区间,缺少截尾记录,违反数据结构规则

第二个报错:Error in if (s[length(s)] > 0.5) {: missing value where TRUE/FALSE needed

Location 3存在连续的截尾区间(第7、8行均为event=0),截尾代表观察已终止,后续不应再添加新的观察区间,这种重复截尾的结构不符合Recur的要求。


修正数据并解决问题的步骤

步骤1:清理无效的连续截尾记录

删除Location 3的第三行(多余的截尾区间),因为截尾后观察已结束,无需再添加后续区间:

# 移除Location3的第三段截尾记录
clean_data <- reprex.data[-8,]

步骤2:补全个体的截尾记录

为Location 1和Location 2添加截尾区间,明确观察终止时间(此处假设研究终止时间为现有数据的最大tstop值2790,可根据实际研究周期调整):

# 为Location1添加截尾区间:从最后一次故障时间2790到观察终止时间2790
clean_data <- rbind(clean_data, data.frame(Location=1, tstart=2790, tstop=2790, event=0))

# 为Location2添加截尾区间:从故障时间138到观察终止时间2790
clean_data <- rbind(clean_data, data.frame(Location=2, tstart=138, tstop=2790, event=0))

# 按Location和tstart排序,确保时间顺序正确
clean_data <- clean_data[order(clean_data$Location, clean_data$tstart),]

步骤3:使用修正后的数据调用Recur函数

现在可正常调用Recur并执行summary:

library(reda)
# 创建重复事件对象
recur_obj <- with(clean_data, Recur(tstart %to% tstop, 
                                   id = Location, 
                                   event = event,
                                   check = "hard"))

# 查看结果
recur_obj
#> [1] 1: (0, 790], (790, 2177], (2177, 2790], (2790, 2790+]
#> [2] 2: (0, 138], (138, 2790+]   
#> [3] 3: (0, 582], (582, 1948+]
#> [4] 4: (0, 119], (119, 362], ..., (1174, 2050+]

# 执行summary
summary(recur_obj)

关键数据规则总结

使用reda::Recur时,重复事件数据必须满足:

  • 每个个体的时间区间连续无重叠,从0开始依次推进
  • 每个个体的最后一个区间必须是截尾记录(event=0),明确观察终止
  • 不允许出现连续的截尾区间,截尾后不应再有后续观察区间

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 09:07:06