1+1大于2是怎么回事?来个相加交互模型看看

在某些疾病有这样的现象,A和B两种危险因素都和疾病呈正相关,人们理所当然地想,同时暴露于A和B的人群的风险,肯定比仅暴露于A或仅暴露于B的人群要高。好像没毛病,但问题是有时候前者比后者高太多了,是不是略显诡异?

于是人们做出推测,A和B不是独立作用的。如果A作用于某条通路,B独立地作用于另一条通路,那么同时暴露于两个因素时,其风险在数学上可以解释为A+B或A×B。不幸的是,观察到的数据脱离了这个轨道,那只能认为,另外至少还有一条通路,需要A和B同时参与。所以当同时暴露于两个因素时,除了他们各管各的,还打开了其他的通路。

这就是交互作用,最常见的研究就是某个基因异常与某个环境因素的交互作用,还有基因-基因交互作用的研究。当我们有了怀疑,就可以从统计上做个交互分析来检验。

上边的A+B和A×B,指代统计学上的两种交互模型,一个是相加尺度交互模型,一个相乘尺度交互模形。分析危险因素时最常用的logistic回归,本质上是相乘模型。但近年来有不少学者提倡使用相加模型,因为相加模型的意义更明确。

1+1大于2是怎么回事?来个相加交互模型看看

Eur J Epidemiol. 2005;20(7):575-9.

如图,U表是未暴露,纵坐标表示风险,第二和第三根柱子分别是单独暴露于基因突变和吸烟时的风险,第四根柱子就是同时暴露于两因素时,风险竟然比叠加要高这么多。

如果想要通过logistic回归找到有统计学意义的危险因素,再检测它们在相加尺度上的交互作用,就需要经过一些变换。

需要计算的统计量

要知道两因素在相加尺度上是否发生了交互作用,就需要知道三个值:

交互作用相对超额危险度(Relative Excess Risk of Interaction,RERI)

归因比(Attributable Proportion,AP)

协同指数(Synergy Index,S)

如果没有发生交互作用,那么RERI和AP等于0,S等于1。更准确地说,是RERI和AP的置信区间包含0,S的置信区间包含1。反之则可认为发生了交互作用。

计算这三个值在不同的软件中有不同的方法,我当然还是要介绍最简便的R。

就用一份模拟的数据来演示吧:

1+1大于2是怎么回事?来个相加交互模型看看

Group是疾病分组,1为病例组,0为对照组;A因素,1为暴露,0为不暴露;B同理。可见按照暴露情况,可以把人群分为4类,即A0B0,A1B0,A0B1,A1B1。就是要比较这四类人与疾病风险的关系。

## 先从File→Import Dataset导入数据(本例中命名为Data),然后

library(Matrix)

library(survival)

library(epiR)

setwd('D://Interaction')

# 载入需要用到的包,设置工作路径

## 构造虚拟变量Dum,把两个因素整合成上面说的那四类

Data$Dum <-

Data$Dum[Data$A ==0 & Data$B ==0] <- 0

Data$Dum[Data$A ==1 & Data$B ==0] <- 1

Data$Dum[Data$A ==0 & Data$B ==1] <- 2

Data$Dum[Data$A ==1 & Data$B ==1] <- 3

Data$Dum <- factor(Data$Dum)

# 看起来厚厚一段其实很简单,在Data表中建立Dum变量,先设为(空值),然后填数字。“”表示条件,“&”表示“且”,之后的第一行就表示,当A=0,且B=0时,Dum赋值为0,后面依此类推。这样我们就有了一个Dum变量,共有0、1、2、3这四个值。

# 最后一句千万别漏了,是把Dum变量的类型转化为分类变量(factor)。

## 构建广义线性模型

Data.glm <- glm(Group ~ Dum, family = binomial, data = Data)

summary(Data.glm)

# 这是先把我们想用的logistic回归推广到广义线性模型(generalized linear model, GLM)里,因为logistic是GLM的一个特例,而计算REPI等指标的计算本来就是适用于线性模型的。再通过Family参数选择binomial,将其特化成logistic模型。Data选择数据集。

# 用summary函数查看模型的一些特征,在输出的一堆结果中,注意这个表:

1+1大于2是怎么回事?来个相加交互模型看看

刚才的Dum变量有0、1、2、3这四个变量,现在以0为参照,列出了其他三个值的参数。其实你只需要记住三个Dum在表中的位置就行了,即第2、3、4行。

## 计算相加模型指标

epi.interaction(model = Data.glm, coeff = c(2,3,4), type = "RERI

查看原文 >>
相关文章