当吸烟遇上饮酒,当空气污染叠加遗传易感性,当熬夜撞上高压力,这些危险因素的组合会产生怎样的破坏力?是简单的“1+1=2”,还是更具杀伤力的“1+1>2”?
上一篇文章我们通过研究实例讲解了相加交互分析(顶刊都在使用的联合效应分析方法:相加交互分析),本文将详细介绍如何使用“InteractionR”包进行相加交互效应分析。
1、InteractionR介绍
InteractionR 是一个用于分析交互作用(特别是相加交互作用)的 R 包,广泛应用于流行病学、生物统计学和医学研究。它主要用于计算和评估两个或多个暴露因素对结局变量的联合效应,并提供多种统计指标来量化交互作用。
1. InteractionR包可实现的分析
该程序包严格遵循Knol和Vanderweele提出的报告标准,自动生成包含以下内容的分析表格:
- 各因素单独作用的 OR 值
- 联合作用的 OR 值
- 相乘交互效应:通过回归系数 alc:smk 的显著性判断
- 相加交互效应指标:相对超额风险(RERI)、归因比例(AP)、协同指数(SI)
2. InteractionR包中三种置信区间计算方法
包中实现了三种计算相加交互作用指标置信区间的方法:
- Delta法:传统方法,计算简单但性能较差。
- MOVER法(方差恢复法):利用OR/RR置信区间的不对称性,小样本表现优异。
- 百分位Bootstrap法:大样本时性能最佳,但小样本可能出现稀疏单元格问题核心指标。
3. InteractionR包用于相加交互效应分析的优势
- 主函数`interactionR()`接受常规回归模型对象,自动提取所需信息
- 支持logistic回归、条件logistic回归和Cox模型
- 提供表格生成函数,一键输出发表级表格
- 内置数据示例和详细文档,降低学习成本
2、实战演练
案例1:酒精与吸烟对口腔癌的交互作用
使用包中内置的OCdata数据,包含酒精(“alc”)和吸烟(“smk”)这两个暴露变量,以及结果口腔癌(“oc”)这两个二分变量(0 或 1,分别表示不存在或存在)。分析步骤如下:
####相加交互效应模型分析_Zhiping Niu #######
# 首次使用时,安装interactionR程序包
# 注意:如果已安装,可跳过此步骤以避免重复安装
# install.packages() 是R中用于从CRAN安装包的基础函数
install.packages("interactionR")
# 载入interactionR包
# library() 函数用于加载已安装的包,使其功能可用
# 如果安装成功但加载失败,可能是包依赖未满足(如检查是否安装了devtools、ggplot2等)
library(interactionR)
# 拟合含交互项的logistic回归模型
# glm() 是广义线性模型函数,此处用于拟合二分类结局的Logistic回归
# 参数说明:
# - formula: oc ~ alc*smk
# - oc: 二分类结局变量(如疾病发生与否)
# - alc*smk: 表示包含alc、smk的主效应及其交互项(等价于 alc + smk + alc:smk)
# - family: binomial(link='logit')
# - 指定分布为二项分布,链接函数为logit(即Logistic回归)
# - data: OCdata
# - 指定数据集,需确保变量名与数据框中一致
m <- glm(oc ~ alc*smk, family = binomial(link='logit'), data = OCdata)
# 使用MOVER法进行交互作用分析
# interactionR() 是包的核心函数,用于计算相加交互作用指标
# 参数说明:
# - model: m
# - 上一步拟合的回归模型对象
# - exposure_names: c("alc", "smk")
# - 指定两个暴露变量的名称(顺序会影响结果解释)
# - ci.type: "mover"
# - 置信区间计算方法,可选"delta"(默认)、"mover"或"bootstrap"
# - MOVER法(Method of Variance Estimates Recovery)对小样本更稳健
# - ci.level: 0.95
# - 置信区间水平(默认0.95)
# - em: FALSE
# - 是否评估效应修饰(Effect Modification),FALSE表示分析交互作用
# - recode: FALSE
# - 是否自动重新编码保护性因素(FALSE保持原始编码)
table_object <- interactionR(m,
exposure_names = c("alc", "smk"),
ci.type = "mover",
ci.level = 0.95,
em = FALSE,
recode = FALSE)
# 生成发表级表格
# interactionR_table() 将结果输出为Word格式的表格(默认保存到工作目录)
# 输出内容:
# - 暴露单独/联合的OR值及置信区间
# - 相加交互作用指标(RERI、AP、SI)及置信区间
# - 交互作用的统计学显著性
# 注意:
# - 表格会自动保存为"interactionR_table.docx"
# - 可通过参数调整格式(如filename修改路径,title修改标题)
interactionR_table(table_object)
结果表格清晰展示了:
- 饮酒(alc)的单独效应:OR=3.33(95% CI: 0.7, 15.86),表明饮酒可能增加口腔癌风险,但OR置信区间包含1,表明不具有统计学显著性。
- 吸烟(smk)的单独效应:OR=2.96(95% CI: 0.68, 12.91),吸烟可能增加口腔癌风险,但OR置信区间包含1,表明不具有统计学显著性。
- 饮酒(alc)和吸烟(smk)联合效应:OR=9.04(95% CI: 2.64, 30.91),远高于单独暴露的效应,表明两者可能存在协同作用,且OR置信区间不包含1,表明具有统计学显著性。
- 交互作用分析:
- 相加交互(RERI):3.74(95% CI: -11.43, 21.87),点估计显示正向交互,但置信区间包含0,统计不显著。
案例2:运动与吸烟对腰椎间盘突出的影响
使用包中内置的HDiscdat数据,包含运动参与(“ns”)和吸烟(“smk”)这两个暴露变量,以及结果腰椎间盘突出(“h”)。以上三个变量均为二分类变量(0 或 1,分别表示不存在或存在)。
展示bootstrap法的应用:
# 拟合含交互项的logistic回归模型 # 使用glm()函数拟合模型,其中: # - h: 二分类结局变量(如疾病发生与否) # - ns*smk: 表示包含ns、smk的主效应及其交互项(等价于 ns + smk + ns:smk) # - family=binomial(link='logit'): 指定使用logistic回归 # - data=HDiscdata: 指定使用的数据集 m2 <- glm(h ~ ns*smk, family=binomial(link='logit'), data=HDiscdata) # 使用bootstrap法进行交互作用分析(1000次重复) # interactionR_boot()是interactionR包中专门用于bootstrap分析交互作用的函数 # 参数说明: # - model: m2 - 上一步拟合的回归模型对象 # - ci.level=0.95 - 置信区间水平(默认0.95) # - em=FALSE - 不评估效应修饰(Effect Modification),而是分析交互作用 # - recode=FALSE - 不重新编码保护性因素 # - seed=12345 - 设置随机种子以保证结果可重复 # - s=1000 - 指定bootstrap重复次数为1000次 # 注意: # - bootstrap法计算量较大,重复次数越多结果越稳定但耗时越长 # - 建议在正式分析前测试较小次数(如100次)检查代码是否正确 table_object2 <- interactionR_boot(m2, ci.level=0.95, em=FALSE, recode=FALSE, seed=12345, s=1000)
结果表格清晰展示了:
- 不运动(ns)的单独效应:OR=2.38(95% CI: 1.27, 4.46),显著增加腰椎间盘突出风险。
- 吸烟(smk)的单独效应:OR=1.88(95% CI: 1.29, 2.73),同样显著增加风险。
- 不运动(ns)和吸烟(smk)联合效应:OR=1.98(95% CI: 1.12, 3.48),与单独吸烟的效应接近,但低于单独不运动的效应。
- 交互作用分析:
- -1.28(95% CI: -3.63, 0.54),点估计为负值,提示可能的拮抗作用(但统计不显著)。



确认删除