1. 什么时候该选GEE:重复测量数据的一个现实决策
做纵向数据分析的朋友大概率都遇到过这个场景:手里是一份随访数据,每个受试者有好几条记录,组内显然不独立,直接塞进普通回归模型怕犯错误。教科书这时候会给你两个方向——广义估计方程(GEE)和线性混合模型。两套东西经常被并列提,但真实的项目里选哪条路,绝不是看谁名气大,而是看你的研究问题在问什么。
GEE解决的核心问题可以一句话讲透:当我们不关心个体内部的随机波动细节,只想知道"总体平均效应"是多少时,怎么在存在相关性的数据里得到靠谱的系数和标准误。它通过一个"工作相关结构"来校正组内相关性带来的信息重叠,然后估计出稳健的总体平均效应。这个定位和混合模型有本质区别,混合模型会显式地把个体差异拆成随机截距、随机斜率,估计的是"给定这个个体水平时的条件效应"。一个是population-averaged,一个是subject-specific,学术上常说的PA vs. SS之争,落到业务语言里就是:你是想回答"这个药在人群层面平均能降多少血压",还是想回答"某个特定患者血压会怎么随用药时间变化"。
我在实际项目里的经验是,如果客户或合作方要的是可推广的公共卫生结论,比如政策评估、流行病学队列研究,GEE往往是更直接的选择。原因有三:第一,GEE对协变量结构的假设更宽松,数据里的相关结构稍微设错一点,主效应估计依然一致;第二,它不需要对随机效应的分布做假设,这在离散结局(二分类、计数)场景下尤其省心,因为混合逻辑回归的随机效应积分没有解析解,计算上麻烦;第三,GEE给出的标准误是sandwich estimator,也就是经验稳健标准误,即使工作相关结构设定得不太对,标准误一般也能扛住。
当然,GEE也有它不舒服的地方。最典型的一点是它对缺失数据的假设很苛刻:要求完全随机缺失才有好性质,而混合模型在随机缺失条件下表现更好。这句话在面试或论文答辩里经常被问,但在真实项目中,很多团队压根没意识到数据缺失机制会直接影响该选GEE还是混合模型。后面我会专门展开讲这块。
1.1 处理相关性的两条技术路线
为了说清楚GEE的定位,有必要先聊几句它为什么诞生。GEE是Liang和Zeger在1986年提出的,那会儿生物统计领域正苦于一个问题:临床试验和流行病学调查里到处都是重复测量数据,每个患者在不同时间点测血压、测CD4计数、测生活质量评分,这些观测天然相关。如果无视相关性直接用普通回归,参数估计倒是无偏的,但标准误会偏小,置信区间变窄,p值漂亮得不可信,假阳性的风险很高。
传统方案是多元回归或者把数据做变换,麻烦且不灵活。混合模型在统计理论上是漂亮的,但那个年代的计算资源根本撑不起大规模随机效应模型,尤其是非高斯结局。GEE的巧妙之处在于,它不试图把相关结构准确建出来,而是随便猜一个,然后用sandwich标准误兜底。用一句行话讲:GEE通过拟似然估计等式,把相关结构当成nuisance parameter来处理。这个设计哲学在工程上非常好使——稳定、快、对模型误设不敏感。
我在实际项目里多次对比过这两类方法的效果。比如一个多中心临床试验数据,三个中心,每个中心两三百个患者,随访四次。用GEE和用带随机中心截距的混合模型,主效应系数通常差不了太多,但标准误会有差别,而且GEE跑起来几乎不需要调参,混合模型偶尔会遇到随机效应协方差矩阵的非正定问题。在要快速给出结果的项目里,GEE的工程优势是很实在的。
1.2 GEE的估计思路:从拟似然到工作相关矩阵
GEE的核心逻辑可以拆成三步看。第一步,写出边际均值模型,也就是连接函数和线性预测子的关系,比如逻辑回归的形式:logit(p) = Xβ。第二步,设定因变量方差与均值的关系,这通常由结局的分布族决定,二项分布就是p(1-p),泊松分布就是均值本身。第三步,给组内观测设定一个工作相关矩阵R(α),描述同一受试者不同时间点观测之间的相关程度。
然后GEE的估计方程长这样:对所有个体求和,D^T V^{-1} (Y - μ) = 0。这里面D是均值对β的导数矩阵,V是工作协方差矩阵,由方差部分和相关矩阵组合而成。求解这个方程不需要设定完整似然函数,所以叫拟似然。解出来的β是的一致估计量,它的渐近方差用sandwich estimator来算,形式是B^{-1} M B^{-1},其中B是模型导数部分的信息矩阵,M是残差叉积部分。这个M就是所谓的"经验"部分,它直接从数据里算实际残差,所以哪怕你相关结构猜错了,只要均值模型对,标准误依然有保障。
用一句话总结GEE的解构逻辑:均值模型为主,相关结构为辅。辅助部分就算辅助得不好,主力部分依然不塌。这也是为什么它在应用统计里口碑好——它不是靠赌相关结构正确来过日子的方法,它的容错性在设计层面就已经内建了。
1.3 该用GEE还是混合模型:我的判断清单
很多入门者会问"GEE和混合模型哪个更好",这种提问本身就容易带偏。更实际的问题应该是:我手里的数据和我的研究问题,更适合哪一边。我一般按下面这个清单来判断,基本几分钟就能有结论。
第一,研究问题问的是人群平均还是个体条件。如果政策制定者问"这种疫苗在人群层面将感染风险降低了多少",GEE是直接答案。如果临床医生问"这个患者如果坚持用药,他个人的风险会降到多少",混合模型的subject-specific预测更贴合。第二,结局类型和计算代价。连续结局且随机效应结构简单,混合模型很好用;但如果结局是二分类或计数,又有很多分类变量做随机效应,混合模型的数值积分会非常痛苦,GEE基本不需要纠结这些。第三,样本量和聚类单元数量。GEE的sandwich标准误在大样本渐近理论下表现好,但如果你只有十来个中心、每个中心样本量也不大,sandwich标准误会偏激进,这时候要么改用小样本校正,要么考虑混合模型。第四,缺失数据的假设能否满足。前文提过,GEE要MCAR才比较安全,混合模型在MAR下表现更好。这个区别在随访类数据里经常是决定性的。
2. 工作相关结构的选型逻辑与常见误区
GEE使用过程中最容易被忽略、也最容易翻车的就是工作相关结构的设定。很多教程会一笔带过说"默认exchangeable就行",但真实项目里这个选择直接关系到效率,甚至在某些场景下会引发收敛问题。我花了不少时间在这个环节上踩坑,值得单独拿出来聊聊。
工作相关结构概括起来有四种常见形态。第一种是独立结构,对应的相关矩阵是单位阵,相当于假装组内观测不相关。第二种是可交换结构,假设组内任意两次观测的相关性都一样,这是最常用的默认选项。第三种是一阶自回归结构,假设观测间的相关随间隔时间变长而衰减,适合时间点间隔规则且相关性随间隔拉大而减弱的纵向数据。第四种是无结构,让相关矩阵的每个元素自由估计,灵活但同时要估计的参数会随重复测量次数平方级增长,样本量不足时非常容易崩。
选择结构的逻辑不能只看"哪个更精确"。相关结构的选择更多的是在偏差和方差之间做权衡——你设定的结构越灵活,需要估计的辅助参数就越多,在小样本下反而可能引入更多不确定性。而GEE的渐近性质恰恰是"只要均值模型对,就算相关结构错了,主效应一致",所以在实际应用中,一般原则是:用最简单、与数据机制大致吻合的结构,然后用稳健标准误来兜底。可交换结构通常是最稳的起点,因为它不要求时间点之间有任何特殊依赖模式。
2.1 四种相关结构:适用场景与现实限制
可交换结构在临床试验中被广泛使用是有道理的。大部分临床试验的患者随访时间点虽然固定,但各时间点的相关性并没有明显的递减趋势,即便有轻微衰减,可交换结构配合sandwich标准误也完全扛得住。但有一个前提条件需要注意——重复测量次数不能太大。如果每个受试者有十几个时间点的数据,用可交换结构就太粗糙了,因为远期观测和近期观测的相关性差异会被压平成同一个值,虽然系数无偏,但效率损失会比较明显。
一阶自回归结构适合时间序列特征明显的纵向数据。比如经济学面板数据里的月度指标随访,上一期和这一期关系紧密,隔得越远关联越弱。用AR(1)结构能更好地利用时间排序信息,在相同样本量下得到更窄的置信区间。但要注意,AR(1)对时间间隔的规则性有要求,如果你的随访时间点间隔参差不齐——有的人第1、3、6个月访视,有的人第1、4、7个月——严格按照时间点位置设定相关结构就会有点尴尬,这时要么把时间离散化到规则的窗格里,要么索性用可交换结构省事一些。
无结构是最灵活的,也是实际使用中"富贵病"最多的一种。它把组内任意两次观测的相关都当作自由参数来估计,好处是能毫无假设地反映真实相关模式,坏处是估计的参数数量随测量次数二次方增长。假设每个受试者随访10次,相关矩阵里就有45个参数要估,如果你的有效样本量不够,模型跑出来的相关矩阵很可能是非正定的,报错"correlation matrix not positive definite"。这种情况在小组数、多重复的纵向数据里特别常见,我的建议是:除非样本量非常充足,尽量不要选unstructured。无结构更适合作为模型诊断的参照物,而不是默认选项。
2.2 结构选错会是什么后果:一个类比和一次实测
把相关结构选错的后果用生活化的类比来解释会更容易理解。想象你在估一群人平均身高,如果你错误地假设每两个人的身高信息是完全独立的,那么你所估出的平均身高的置信区间就会显得过分精准——因为你把同一个家庭里兄弟姐妹互相相似的身高信息,当成了来自互不相关个体的独立证据。GEE如果选了独立结构而实际数据又强相关,就会出现类似的状况:点估计没问题,但标准误往下偏,p值过于乐观。
我印象比较深刻的一次实测是医院随访数据,四个时间点,结局是二分类的术后并发症有无。最初用可交换结构跑完后,我因为好奇调整成了独立结构做对比,结果主效应系数的方向没变,但标准误从0.112缩水到了0.094,对应的p值从0.036变到了0.011。这个差别在论文投稿时是致命的——前者只能说"有统计学意义",后者会让人误以为证据强了很多。换到AR(1)结构时,标准误落在0.106附近,说明时间相邻性确实带来了额外信息,但幅度不大。这个对比实验强烈建议每个GEE使用者都做一次,成本很低,但对结论稳健性的理解会深刻很多。
2.3 用面板数据检验工作结构:一个可复现的验证方法
R的geepack包提供了专门的检验方法,核心思路是比较不同工作相关结构下的系数估计差异和QIC信息准则。操作很简单:对同一份数据,分别用exchangeable、ar1、independence跑一遍模型,然后比较各模型的QIC值。QIC这个指标可以粗略理解为GEE版的AIC,越低代表模型在拟合优度和复杂度之间的平衡越好。
但要注意一个坑:如果你的系数在选项之间出现了方向改变或者明显的大小摆动,这往往是均值模型设定有问题的信号,而不单纯是相关结构的问题。相关结构错配只影响效率,如果你的估计值因此发生了实质变化,多半是数据里存在强非线性关系、缺失数据严重,或者重要协变量被遗漏了。这时候先不要急着在四种结构里选个最好的,而是要回头检查均值模型本身。我在实际分析中通常会把"不同工作相关结构下系数的稳定性"当作模型诊断的一部分来使用——它比任何单一检验都更能说明模型是否站得住脚。
3. 从R到Python的落地实现与参数陷阱
工具层面,GEE的生态环境比混合模型要清晰一些。R里的geepack是事实标准,Python里statsmodels的gee模块也基本可用。两个生态我都跑过不少项目,各有各的脾气,这里把实现要点和参数陷阱一并拆开讲。
3.1 R语言geepack的标准流程与关键参数
R里跑GEE的核心函数是geeglm,它的调用习惯和glm非常接近,额外需要指定三个关键要素:id指定聚类分组,corstr指定工作相关结构,std.err指定标准误类型。一个典型的调用长这样:
library(geepack) fit <- geeglm( y ~ time + trt + time:trt + age + sex, data = dat, family = binomial(link = "logit"), id = id, corstr = "exchangeable", std.err = "san.se" ) summary(fit)这里最容易踩的坑有两个。第一个是数据的排列顺序——geeglm默认假设数据按id和时间排序,如果你的数据没有先按id聚在一起,再用聚类内的时间排序,模型内部对相关矩阵的构造就可能错乱。它不报错,但结果不对。我在早期跑一个多中心数据时就吃过这个亏,id是患者编号,但数据框是按中心分块的,每个中心里的id顺序被打乱了,模型跑出来的系数看着合理但标准误明显异常。排查了很久才发现是排序问题。解决办法很机械但也有效:先按id和时间排序,再跑模型。
第二个坑是std.err的取值。geeglm提供两种选择,默认的"san.se"是经典sandwich标准误,另一种"fijs"是Jackknife标准误。小样本场景下san.se会低估标准误,fijs会更保守一些,但计算代价高。我一般的习惯是,如果聚类单元数大于40,用san.se够了;如果聚类单元数少,比如只有10到20个中心,用fijs额外跑一遍做敏感性分析。这一点很多教程不会提,但对真实项目里的结论稳健性影响不小。
3.2 Python statsmodels的对应实现与差异点
Python里跑GEE的方式如下:
import statsmodels.api as sm from statsmodels.genmod.generalized_estimating_equations import GEE from statsmodels.genmod.cov_struct import Exchangeable model = GEE( endog=df["y"], exog=sm.add_constant(df[["time", "trt", "age"]]), groups=df["id"], family=sm.families.Binomial(), cov_struct=Exchangeable() ) result = model.fit(cov_type="robust") print(result.summary())statsmodels的GEE实现整体上比R的geepack更"直觉化",但有几个差异点需要注意。首先,statsmodels默认不会自动帮你处理数据排序,你必须自己在传入前把数据按groups排序好,否则相关矩阵的对应关系会混乱。其次,Python的cov_type参数和R的std.err不完全对应,statsmodels里你通常指定"robust"来获得sandwich标准误,也有"naive"选项,但实际项目中naive基本不会用——它假设你的相关结构完全正确,这几乎不可能,用它等于自欺欺人。
还有一个小差异是groups参数的传法。statsmodels的GEE要求groups是一个与endog长度相同的数组,表示每个观测属于哪个聚类单元。如果你的数据是多层嵌套结构,比如患者属于医院、医院属于地区,GEE的groups只能指定一层,多水平嵌套要用扩展版本来处理。这在临床多中心数据里比较常见,我通常的做法是选最上层的聚类单元作为groups,下层结构放进协变量或干脆忽略。
3.3 系数组件、置信区间与模型输出解读
分析GEE输出时,最关键的是看三样东西:系数点估计、稳健标准误、以及QIC。系数本身和普通广义线性模型的解读方式一致,比如logistic链接下系数的指数化就是odds ratio。标准误要特别注意看是不是稳健版本——如果summary里显示的标准误和naive标准误相差很大,这本身就是一个值得警惕的信号,说明你的相关结构设定和数据的实际情况偏离较大,即使系数无偏,效率也已经打了折扣。
我在实际项目中做过一次很有意思的对比,同一个数据集,用GLM无视相关性、用GEE可交换、用GEE独立结构、用混合模型,四种方式跑出来的截距和时间效应系数差别不大,但标准误从GLM的0.058到GEE可交换的0.083,差了超过40%。这个差距直接决定了p值过不过0.05那条线。很多从SPSS或简单统计工具转型过来的研究者,第一次看到这个差异往往非常惊讶。这就是相关数据处理的本质威力——它不会改变你的点估计,但它会诚实告诉你,你的数据里真正有效的信息量比表面看起来少。
4. 小样本场景下的校正策略与我的排错记录
GEE在渐近理论上很漂亮,但真实项目中常遇到的恰恰是小样本场景。多中心临床试验一个中心只有二三十个患者,随访三五次,聚类数量可能就十几个。这种条件下,sandwich estimator的行为会变得很不稳定,标准误容易被严重低估,而且聚类数量越少越离谱。这里的"小样本"有两个方向:一个是聚类数量少,另一个是每个聚类的观测次数少。两者对GEE的影响不同。
聚类数量少是更致命的问题。GEE的sandwich estimator的核心是"用样本中不同聚类之间的残差变异来估计系数的真实变异",如果聚类数量只有10个,那这个估计就建立在10个观测之上,和一个人用10个样本量估一个均值的标准误没什么区别,波动极大。针对这个情况,统计学界已经发展出若干校正方法,其中最常见的是Mancl和DeRouen在2001年提出的小样本校正,以及更保守的Kauermann和Carroll修正。R里的geesmv包专门实现了这类方法,Python里statsmodels的cov_type参数也支持small_sample调整。
4.1 为什么"默认的稳健标准误"在小样本下会翻车
sandwich estimator在数学上可以拆成两部分:面包和肉。面包是均值模型的信息矩阵,肉是残差的叉积矩阵。当样本量充足时,残差叉积矩阵能稳定逼近真实的残差协方差,sandwich就表现出良好的覆盖概率。当聚类数量很少时,叉积矩阵中每一个聚类残差向量都贡献很大分量,任何一个聚类的异常波动都会扭曲整个标准误估计。这就像用三五个人的收入平均值去估计全国人均收入,方差大到没法看。
Mancl-DeRouen校正的思路很直接:对残差叉积矩阵做某种"去偏"处理,考虑到估计过程中系数本身的随机误差也被嵌进了残差里。它用hat matrix把残差里来自参数估计的成分剥离掉,让标准误回归到接近真实值。实际效果上,小样本校正后的置信区间会比默认sandwich更宽,覆盖概率更接近名义水平。但校正也不是万灵药,在极端的小聚类数量下,校正后的标准误可能会走向另一个极端——过于保守,检验功效下降。
4.2 校正方法的选型和常见错误
选校正方法时,普通用户最容易犯的错误是"直接用一个包跑出结果,看哪个p值顺眼就用哪个"。这是典型的用结论倒推方法。我的建议是,先把你的聚类数量M和每个聚类内的平均观测次数n_i换算成有效样本规模,再去判断。经验阈值大致如下:
| 聚类数量 | 默认sandwich行为 | 推荐策略 |
|---|---|---|
| >100 | 表现良好 | 可直接用san.se |
| 40-100 | 可接受 | 默认即可,可选做敏感性分析 |
| 20-40 | 有低估风险 | 用Mancl-DeRouen或KC校正 |
| <20 | 严重不稳定 | 考虑混合模型或Bayesian方法,或改用聚类稳健回归配合bootstrap |
这个表格是我自己项目经验的总结,不能当作严格的数学结论,但作为粗略判断很好用。另外注意一点,如果你选择bootstrap做替代,聚类层面的bootstrap(以整个聚类的残差为单位重采样)要比个体层面的bootstrap可靠得多。个体层面的bootstrap会把相关结构打散,等于破坏了数据原有的嵌套信息,结果会高估精度。
4.3 一次实际排错记录:配对数据的"工作相关矩阵"报错
有一回我处理一个配对设计的数据,每个受试者只有两个时间点——基线和随访。方案很简单,GEE拟合应该几分钟跑完。但当我指定corstr="exchangeable"时,geepack报了一个奇怪的错,大意是"correlation matrix not positive definite"。我一度以为是样本量太小导致相关矩阵不可逆,后来仔细检查发现,问题出在部分受试者只有基线没有随访,数据框里这些行虽然存在,但id的聚类内有效观测次数只有1,这会让相关矩阵在填充时出现不完整的行块。
解决办法也直白:要么把这些缺失随访的受试者从GEE分析中剔除(前提是缺失满足MCAR,剔除后不会引入偏倚),要么用unstructured结构在完整配对子集上重新估计。我当时选择了后者,还顺手比较了一下未剔除的数据跑出来的结果和剔除后的差异,发现系数方向没变、幅度有轻微变化,这让我对结论的稳健性有了把握。这类报错在时间点不齐的纵向数据里并不少见,遇到时不用慌,按"先确认聚类内观测次数分布,再决定剔除或改结构"的思路去处理即可。
4.4 缺失数据的处理:GEE最容易被问倒的短板
GEE对缺失机制的容忍度一直是它的软肋。严格来说,GEE的一致性要求数据是完全随机缺失(MCAR),也就是说,某个观测是否缺失,和该观测的取值以及任何其他变量都无关。这个假设在随访研究中几乎不可能自然满足——往往越病重的患者越容易失访,而病重本身就和结局相关。当数据是随机缺失(MAR)时,GEE的表现就取决于缺失概率是否和协变量有关。如果缺失概率能完全由观测到的协变量解释,那么在均值模型里正确纳入这些协变量后,GEE的系数估计可以近似无偏,这被称作"协变量条件可忽略的缺失机制"。但标准误层面依然会受影响。
实用的决策路径是这样的:先做简单的缺失模式描述,看看各时间点的缺失比例、缺失是否与基线特征相关。如果缺失比例小(比如小于10%),GEE结果基本可信;如果缺失比例高且和结局明显相关,就应该认真考虑加权GEE(用逆概率权重给观测加权,IPW-GEE),或者在方法学层面直接投奔混合模型。加权GEE的实现并不复杂,但需要先估计每个观测的缺失概率,这一步本身又是一个建模工作。我通常的建议是,除非缺失情况特别复杂,否则先用完整数据的GEE跑一遍作为基准,再用多重填补后跑GEE作为敏感性分析,两者互相印证,比单一方法更让审稿人放心。
5. 诊断、汇报与项目落地中容易忽略的细节
GEE项目走到"模型跑出来"这一步,其实才走完一半。后一半是验证模型是否靠谱、结果如何呈现、以及实际落地时有哪些容易被忽略的工程性细节。这些内容文档里很少写完整,但项目交付时往往决定成败。
5.1 模型诊断:不只是看一眼系数表
GEE的残差诊断不像线性回归那样有现成的QQ图和残差图可以无脑输出。因为残差之间本来就相关,直接画残差图会误导判断。我常用的思路是构造"边际残差"和"皮尔逊残差",再按聚类单元和时间点做聚合可视化。例如把每个时间点的平均残差画出来,看是否有明显的趋势或周期性;把每个聚类单元的残差均值画出来,看是否存在某个聚类整体偏离。
另一个实用手段是杠杆值诊断。由于sandwich估计器对个别聚类的残差非常敏感,一个极端聚类可能单独拉动整条回归线。R里geepack的influence函数可以输出每个聚类的DFBETA,用来识别影响点。我在一个真实项目里钓到过一条"大鱼"——一个中心的数据录入严重出错,导致该中心所有患者的结局都录反了,这个聚类的DFBETA值明显比其他中心高出一个数量级。如果没有做这个诊断,整个结论都会被带偏。这件事之后,我在任何GEE项目里都把影响点检查列为固定步骤。
5.2 论文和报告中的数据呈现细节
写论文或汇报时,GEE结果的标准呈现方式包括:效应量和置信区间(用稳健标准误)、p值、工作相关结构的说明、以及QIC值。但我在评审一些稿件时发现,很多作者只写了"采用广义估计方程进行分析",连相关结构用的哪种都不说,这其实是不规范的。审稿人看到这句话往往就会追问:"相关系数衰减模式如何?为什么选这个结构?有没有做敏感性分析?"
我的建议是,方法部分至少写三句话:第一句交代聚类单元和重复测量结构;第二句说明所选工作相关结构和理由;第三句报告标准误类型是稳健标准误,并提一句小样本校正如果做了的话。结果部分,除了回归系数和置信区间,最好附一个简单的时间乘组别的交互作用展示,用预测概率曲线或者剂量反应图把模型结果可视化出来。GEE的预测是基于人群平均水平的,画出来的曲线解释起来很自然,就是"平均而言,某组在某个时间点的结局概率是多少"。
5.3 提升模型稳定性的工程细节
前面聊了那么多统计层面的坑,最后补几个工程层面的经验。第一,建模前务必检查id变量的类型和连续性,尤其当id是字符串时,注意有没有重复值或空格之类的小问题,这些在R和Python里都可能静默地引发分组错乱。第二,数据集里时间变量的编码必须是在聚类内有意义的数值,不要用字符型月份或访视代号,否则AR(1)结构的滞后设定会变得不可靠。第三,如果你的数据是大规模电子病历或保险理赔数据,聚类数量可能上百万甚至千万量级,这时候GEE的sandwich估计器计算会成为瓶颈,考虑用分块计算或者降采样后先跑一个子集来调通流程,再全量跑。
第四点是我个人越来越坚持的:任何关键结论,用两种不同的工作相关结构各跑一遍,再决定报告哪一种。这么做不是为了选一个最好看的,而是为了让自己对结论的稳健性心里有数。如果两个结构下结论完全一致,那么读者和审稿人可以放心;如果不一致,那恰恰说明这个发现可能还没稳到能写进结论。稳,比好看重要得多——这句话在统计咨询里适用,在纵向数据分析里尤其适用。
我最后再分享一个个人习惯:会把GEE跑出来的系数和混合模型的输出放在一起对比,哪怕最终报告只用其中一个。两个模型的系数如果方向一致、量级接近,那基本上你可以放心地说这个效应是数据里真实存在的;如果差异大到让人产生困惑,那说明数据里可能存在强影响点、重要交互项遗漏,或者缺失机制的干扰已经到了不可忽视的程度。用对比来验证,远比在单个模型里反复调整参数更靠谱。这个习惯帮我避免了好几次在错误方向上越走越远。