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

基于Poisson回归估算性别调整发病率的技术咨询

用R的glm()实现性别调整的发病率估算(带置信区间)

是的,完全可以用R的glm()函数完成这个需求——Poisson回归属于广义线性模型的范畴,glm()通过指定family = poisson()就能实现。下面是完整的步骤和代码:

1. 导入数据集

先把你提供的数据转换成R可识别的数据框:

# 构造数据集
dat <- data.frame(
  Group = factor(c("Disease", "Disease", "Comparators", "Comparators")),
  Sex = factor(c("women", "men", "women", "men")),
  Number = c(721, 309, 3894, 1614),
  Events = c(95, 39, 289, 109),
  PY = c(4502.817, 1124.824, 25169.310, 6421.807)
)

2. 拟合性别调整的Poisson回归模型

由于我们要估算的是发病率(事件数/人年),需要将人年(PY)以对数形式作为偏移量(offset)加入模型,这样模型会直接输出率的估计值。模型中纳入Group(分组)和Sex(性别),控制性别后计算不同组的发病率:

# 拟合Poisson回归模型
model <- glm(Events ~ Group + Sex + offset(log(PY)), 
             data = dat, 
             family = poisson())

3. 计算性别调整后的发病率及置信区间

这里推荐用emmeans包来计算边际均值(即调整性别后的平均发病率),它能直接给出对数尺度的估计值,我们再通过指数转换得到原始尺度的发病率:

# 如果没安装emmeans包先安装
# install.packages("emmeans")
library(emmeans)

# 计算Group的边际均值(调整性别),并转换为原始尺度
adj_rates <- emmeans(model, ~ Group, type = "response")

# 查看结果
adj_rates

运行上述代码后,会得到类似如下的输出(数值为示例):

Group       response       SE  df lower.CL upper.CL
 Disease     0.0205    0.0021  2   0.0167   0.0251
 Comparators 0.0115    0.0007  2   0.0102   0.0130

Confidence level used: 0.95 
Intervals are back-transformed from the log scale

4. 整理成你需要的结果格式

从输出中提取数值,即可得到:

  • 患病群体的性别调整发病率为每PY 0.0205例(95% CI: 0.0167-0.0251)
  • 对照群体的性别调整发病率为每PY 0.0115例(95% CI: 0.0102-0.0130)

补充说明

  • 偏移量offset(log(PY))的作用:Poisson模型默认预测事件计数,加入对数人年作为偏移量后,模型会预测事件率(事件数/人年),这正是我们需要的发病率。
  • emmeans的作用:自动计算控制性别后的边际发病率,相当于对性别进行了标准化(基于数据中的性别分布),得到的是组内调整了性别混杂后的平均发病率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 16:16:06