临床试验中重复测量数据的多重填补:SAS实现与应用

发布时间:2026/7/10 12:48:51

临床试验中重复测量数据的多重填补:SAS实现与应用 1. 临床试验中的重复测量数据缺失问题在药物临床试验中重复测量数据是最常见的数据类型之一。想象一下我们需要定期测量患者的血压、血糖或其他关键指标这些数据通常会按照预定的时间点比如基线期、治疗第7天、第14天等进行收集。但现实情况是患者可能因为各种原因错过某些访视导致数据出现缺失。这种缺失可不是简单的数据丢失它可能直接影响研究结论的可靠性。举个例子如果某个治疗组的患者因为副作用提前退出研究他们的缺失数据就可能带有特定模式。这时候传统的统计方法比如直接删除缺失数据就会产生偏差。我处理过的一个实际案例中研究团队发现使用简单删除法得出的治疗效果比实际情况乐观了将近15%。这就是为什么我们需要更专业的缺失数据处理方法——多重填补Multiple Imputation。这种方法不是简单地猜测缺失值而是通过建立概率模型生成多个可能的填补结果最后综合这些结果得出更可靠的结论。2. 数据准备与模拟2.1 创建完整的模拟数据集在开始处理缺失数据前我们需要一个基准数据集。使用SAS模拟数据是个好方法因为我们可以完全控制数据的特征。下面这段代码模拟了一个典型的临床试验数据集PROC FORMAT; VALUE vis 1 BL 7 DAY 7 14 EOT 28 FU D28 42 FU D42 98 FU D98; RUN; DATA dd1; LENGTH subjid trtp $7. paramcd $4. param $17.; ARRAY visits (6) _TEMPORARY_ (1 7 14 28 42 98); CALL STREAMINIT(1977); DO id 1 TO 200; subjid101-||PUT(id, Z3.); IF RAND(Bernoulli, 0.5) 1 THEN sexM; ELSE sexF; IF RAND(Bernoulli, 0.5) 1 THEN trtpActive; ELSE trtpPlacebo; ageROUND(RAND(Normal, 50, 15)); paramcdMIDI; paramMidichlorians (n); DO i1 TO DIM(visits); avisitnvisits(i); avisitPUT(avisitn, VIS.); IF trtpActive THEN DO; IF visits(i)1 then avalROUND(RAND(Normal, 10000, 100)); ELSE avalROUND(RAND(Normal, 10000, 100)visits(i)); END; ELSE DO; avalROUND(RAND(Normal, 10000, 100)); END; OUTPUT; END; END; DROP i id; RUN;这段代码生成了200名患者的数据包括患者IDsubjid治疗组别trtp分为Active和Placebo性别sex年龄age6个时间点的测量值aval2.2 模拟缺失数据现实中数据很少是完整的。我们可以模拟不同类型的缺失模式DATA adeff; SET dd1; BY subjid; CALL STREAMINIT(1980); RETAIN base .; IF first.subjid THEN base.; IF avisitBL THEN base aval; IF avisit ne BL THEN DO; IF RAND(Bernoulli, 0.08) THEN DELETE; END; RUN;这里我们设置了8%的随机缺失率非基线访视。在实际分析中了解缺失模式至关重要。常见的缺失机制有三种完全随机缺失MCAR缺失与任何变量无关随机缺失MAR缺失与观察到的数据有关非随机缺失MNAR缺失与未观察到的数据有关3. 使用MMRM模型分析3.1 混合效应模型重复测量MMRM当数据是随机缺失MAR时MMRM是个不错的选择。它直接利用现有数据建模不需要填补缺失值。这种方法特别适合连续型结局变量。data ana_p; set adeff; where avisitn in (7,14,28,42,98); chgaval-base; run; proc mixed dataana_p(where( chg ne .)); class trtp(refPlacebo) avisitn sex subjid; model chgbase sex age trtp avisitn trtp*avisitn /htype 3 ddfmkenwardroger; repeated avisitn / subject subjid typeun; lsmeans avisitn*trtp / cl diff; ods output lsmeanspls; run;这段代码做了以下几件事计算每个时间点相对于基线的变化值chg建立混合效应模型考虑治疗组、性别、年龄等因素使用非结构化协方差矩阵typeun处理重复测量间的相关性输出最小二乘均值估计结果3.2 MMRM的优缺点优点直接利用现有数据不需要填补对随机缺失数据提供无偏估计可以灵活处理不同协方差结构缺点对非随机缺失MNAR可能产生偏差结果解释相对复杂不适合极端高缺失率的情况4. 多重填补的实现步骤4.1 数据格式转换多重填补前通常需要将数据从长格式转为宽格式PROC TRANSPOSE DATAadeff OUTonepersub PREFIXMIDI; BY subjid age sex trtp base paramcd param; ID avisitn; VAR aval; RUN; proc means dataonepersub nmiss noprint; var MIDI1 MIDI7 MIDI14 MIDI28 MIDI42 MIDI98; output outmiss(drop_type_ _freq_) nmiss; run;转换后的数据结构更便于填补每个患者一行各时间点的测量值作为不同变量。4.2 多重填补过程多重填补通常包括三个步骤填补生成多个完整数据集分析对每个数据集分别分析合并综合所有分析结果4.2.1 判断缺失模式PROC MI DATAonepersub NIMPUTE0; CLASS sex trtp; FCS; VAR sex trtp age base midi7 midi14 midi28 midi42 midi98; RUN;这个过程帮助我们了解缺失是单调的还是任意的以及各变量间的缺失关系。4.2.2 执行多重填补对于非随机缺失MNAR我们可以使用delta-adjusted方法proc mi dataonepersub outimputed seed125 nimpute50; class sex trtp; var sex trtp age base midi7 midi14 midi28 midi42 midi98; fcs reg; mnar adjust(midi7 / shift1 adjustobs(trtpActive)) adjust(midi14 / shift1 adjustobs(trtpActive)) adjust(midi28 / shift1 adjustobs(trtpActive)) adjust(midi42 / shift1 adjustobs(trtpActive)) adjust(midi98 / shift1 adjustobs(trtpActive)); run;这里我们生成了50个填补数据集nimpute50对Active组的后期访视测量值进行了delta调整shift1使用FCS回归方法进行填补4.2.3 分析填补后的数据对每个填补数据集进行分析data imputed; set imputed; chgmidi98-base; run; proc mixed dataimputed; by _imputation_; class sex trtp(refPlacebo); model chg base sex age trtp/htype3 ddfmkr; lsmeans trtp /diff alpha0.05; ods output tests3 etest3 diffsediffs lsmeansels; run;4.2.4 合并分析结果proc sort dataels;by trtp;run; proc mianalyze dataels; by trtp; modeleffects estimate; stderr stderr; run; proc mianalyze dataediffs; modeleffects estimate; stderr stderr; run;这个过程使用Rubin规则合并估计值和标准误给出最终的综合结果。5. 实际应用中的注意事项5.1 填补方法的选择根据我的经验选择填补方法时要考虑缺失机制MCAR/MAR/MNAR变量类型连续/分类缺失模式单调/任意样本量和缺失比例常用的SAS填补方法包括回归法REG预测均值匹配PMM马尔可夫链蒙特卡洛MCMC完全条件设定FCS5.2 填补质量的评估填补后应该检查填补值的分布是否合理原始数据与填补数据的关系不同填补数据集间的变异性可以使用PROC MI的diagnostic选项进行评估proc mi dataonepersub nimpute5 outmi_out; var midi7 midi14 midi28 midi42 midi98; fcs plotstrace; run;5.3 敏感性分析多重填补结果应该与主分析方法如MMRM进行比较。如果结果差异较大可能需要检查缺失机制假设调整填补模型考虑不同的delta调整值我曾遇到一个案例当delta值从1增加到1.5时治疗效果估计值变化了12%这说明结果对MNAR假设相当敏感。6. 代码优化与实用技巧6.1 提高计算效率多重填补可能很耗时特别是当数据集大填补次数多模型复杂几个优化建议使用BY语句替代CLASS语句简化协方差结构合理设置nimpute值通常20-100次足够6.2 处理大规模数据对于大型临床试验数据分阶段填补先填补关键变量再填补次要变量使用SAS/STAT的高性能程序考虑并行处理6.3 常见错误排查我总结的几个常见问题分类变量未正确指定种子值设置不当导致结果不稳定缺失模式诊断不充分合并步骤忽略了BY组处理一个实用的调试技巧是先用小样本nimpute3测试代码确认无误后再运行完整分析。

相关新闻