1. 从“单打独斗”到“协同作战”:理解Cox回归中的交互效应
在临床研究或者流行病学分析里,我们常常会问这样的问题:某种药物的疗效,在男性和女性患者中一样吗?或者,一个风险因素(比如吸烟)对疾病的影响,在不同年龄段的人群里有没有差别?这些问题,本质上就是在探究交互效应。
让我用一个更生活的例子来解释。想象一下,咖啡因和压力都能让你心跳加速。如果你只是喝了杯咖啡,心跳快了一点;如果你只是工作压力大,心跳也快了一点。但如果你在巨大压力下又灌了一杯浓缩咖啡,你的心跳可能会飙升到一个远超两者简单相加的程度。这种“1+1>2”的现象,在统计学里,我们就说咖啡因和压力之间存在交互效应——一个因素的效果,因为另一个因素的存在而被改变了。
在生存分析,特别是Cox比例风险模型中,我们关注的交互效应通常是相乘交互。这听起来有点绕,其实可以这么理解:我们看的是风险比(HR)的乘积关系。简单说,如果因素A单独存在时的风险比是HR_A,因素B单独存在时的风险比是HR_B,那么当A和B同时存在时,如果实际的风险比HR_AB不等于HR_A乘以HR_B,我们就认为存在相乘交互效应。这个“不等于”就是交互作用的核心,它告诉我们,不能孤立地看待每个因素,它们凑在一起可能会产生新的故事。
做亚组分析,比如按性别分层看治疗效果,其实就是交互效应分析的一种直观应用。我们想知道“治疗”这个主效应,会不会因为“性别”这个分层变量的不同而不同。如果交互效应显著,那就意味着治疗对男性和女性的效果确实有差异,我们在报告结果时就必须分开说明,而不能笼统地给一个“平均”效果。所以,把交互效应算清楚、看明白,是做出准确、细致临床结论的关键一步。
2. 三种“武器库”:交互效应计算方法实战拆解
计算交互效应,就像手里有几把不同的螺丝刀,都能拧螺丝,但手感、效率和适用场景各有不同。下面我就结合R语言代码,带大家亲手操作一遍最常用的三种方法,看看它们各自有什么门道。
2.1 基本功:似然比检验(LRT)法
这是最经典、最“教科书”的方法,原理扎实,任何统计教材都会讲。它的思路很直接:我们建立两个Cox模型。第一个是主效应模型,只包含我们关心的几个变量,比如治疗分组、年龄、性别,它们之间互不影响。第二个是交互效应模型,在第一个模型的基础上,加入我们怀疑有交互的变量组合,比如“治疗分组*性别”。
接着,我们用似然比检验比较这两个模型。如果加入交互项后,模型对数据的拟合程度有统计学上的显著提升,那就说明交互效应是存在的。这个方法的优势非常明显:原理清晰,结果权威,审稿人一般都认。但它的缺点也很实在:步骤繁琐。你需要手动建两个模型,然后跑检验,如果有多组交互需要检验(比如治疗vs性别、治疗vs年龄等),代码就会重复很多行,结果也需要自己整理到表格里。
我们来用R实战一下,还是用经典的lung肺癌数据集。假设我们想看看体力评分(ph.ecog)对生存的影响,在男女性别(sex)和不同年龄组(AGE)中是否一致。
# 加载必要的包
library(survival)
library(dplyr)
# 准备数据,设置变量类型
data_int <- survival::lung
data_int$sex <- as.factor(data_int$sex)
data_int$ph.ecog <- as.factor(data_int$ph.ecog)
# 将年龄分为四组
qq <- quantile(data_int$age, na.rm = TRUE)
data_int$AGE <- with(data_int, cut(age, breaks = c(-Inf, qq[2], qq[3], qq[4], Inf), labels = 1:4))
data_int <- data_int %>% select(time, status, AGE, sex, ph.ecog) %>% na.omit()
# 方法1: 似然比检验 (检验 ph.ecog * sex 交互)
# 步骤1:建立不含交互项的主效应模型
fit_main <
398




被折叠的 条评论
为什么被折叠?



