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

使用epiR::epi.conf()(ctype="inc.risk")计算累积发病率时结果与手动计算不一致的问题

epiR::epi.conf()(ctype="inc.risk")计算累积发病率时结果与手动计算不一致的问题

这个问题的核心是函数错误地计算了事件数/非事件数(优势比的逻辑),而非你预期的事件数/总人数(累积发病率),下面是具体的原因分析和解决方案:

一、问题根源分析

你得到的结果0.1382979正好等于13/94,这完全不是累积发病率的计算逻辑。出现这种情况的可能原因有两个:

  1. 矩阵构造或参数的隐性错误
    你的输出和ctype="odds"(计算优势比)的结果完全一致,这说明要么你在代码中误将ctype写成了"odds",要么矩阵的维度/顺序被错误解析了——比如不小心把矩阵建为2行1列而非1行2列,旧版本epiR会把这种格式的矩阵错误地用「事件数/第二行的非事件数」来计算。

  2. epiR版本过旧
    非常早期的epiR版本对ctype="inc.risk"的输入格式处理存在bug,导致计算逻辑偏离了累积发病率的定义。

二、解决方案

1. 确保矩阵输入格式完全正确

对于ctype="inc.risk",函数要求的是1行2列的矩阵,第一列是事件数,第二列是非事件数,这样函数才会用「事件数/(事件数+非事件数)」计算累积发病率:

events <- 13
non_events <- 94

# 正确构造矩阵:1行2列,顺序为[事件数, 非事件数]
mat <- matrix(c(events, non_events), nrow = 1, ncol = 2, byrow = TRUE)

2. 确认参数无误并运行

确保ctype参数明确设置为"inc.risk",然后重新运行:

library(epiR)
res <- epi.conf(mat, ctype = "inc.risk", method = "exact")
res

此时正确的输出应该是:

est      lower     upper
1 0.1214953 0.06534318 0.2063471

其中est值和你手动计算的13/107≈0.1215完全一致。

3. 更新epiR到最新版本

如果你的epiR版本较旧,建议立即更新到最新稳定版,彻底避免旧版本的格式解析bug:

install.packages("epiR")
library(epiR)

三、快速验证方法

  • 运行epi.conf(mat, ctype="odds", method="exact"),如果输出和你之前的错误结果一致,说明你之前大概率误写了ctype参数;
  • 用dim(mat)检查矩阵维度,确保输出是[1, 2](1行2列)。

备注:内容来源于stack exchange,提问作者Agustín Nava

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 18:13:01