admin管理员组文章数量:1660166
临床试验长期随访数据中,缺失数据的利用和处理是经常遇到的问题,本文将围绕MMRM模型和delta法多重填补进行举例
文章目录
- 前言
- `本文主要介绍多重填补的操作步骤,对相应原理不进行介绍:`
- 一、模拟生成数据集
- 1. 生成无缺失值的数据集
- 2.模拟存在访视缺失数据集
- 二、MMRM模型
- 1.数据库整理
- 2.MMRM模型分析
- 三、delta方法多重插补
- 1.数据格式转换
- 2.多重填补思路
- (1) 判断缺失情况并进行数据填补
- (2)数据分析
- (3)合并结果
- 总结
- Reference
前言
本文主要介绍多重填补的操作步骤,对相应原理不进行介绍:
一、模拟生成数据集
1. 生成无缺失值的数据集
代码如下:
*Format for visit;
PROC FORMAT;
VALUE vis 1 = 'BL'
7 = 'DAY 7'
14= 'EOT'
28= 'FU D28'
42= 'FU D42'
98= 'FU D98';
RUN;
/* Core data simulation */
DATA dd1;
LENGTH subjid trtp $7. paramcd $4. param $17.;
*Visit structure;
ARRAY visits (6) _TEMPORARY_ (1 7 14 28 42 98);
*Sets seed for all rand functions ;
CALL STREAMINIT(1977);
*Data simulation loop;
DO id = 1 TO 200;
*Assign subject id;
subjid='101-'||PUT(id, Z3.);
*Assign gender;
IF RAND('Bernoulli', 0.5) = 1 THEN sex='M';
ELSE sex='F';
*Assign treatment group;
IF RAND('Bernoulli', 0.5) = 1 THEN trtp='Active';
ELSE trtp='Placebo';
*Assign age;
age=ROUND(RAND('Normal', 50, 15));
*Assign result name and short code;
paramcd='MIDI';
param='Midichlorians (n)';
*Simulate results;
DO i=1 TO DIM(visits);
avisitn=visits(i);
avisit=PUT(avisitn, VIS.);
IF trtp='Active' THEN DO;
*Produces advancing treatment effect over time;
IF visits(i)=1 then aval=ROUND(RAND('Normal', 10000, 100));
ELSE aval=ROUND(RAND('Normal', 10000, 100)+visits(i));
END;
ELSE DO;
*Produces no treatment effect for placebo patients;
aval=ROUND(RAND('Normal', 10000, 100));
END;
OUTPUT;
END;
END;
DROP i id;
RUN;
生成的完整数据集变量如下:
trp、sex为分类变量,age为连续性变量,共进行了6次访视, aval为每次访视得到的连续变量值。
2.模拟存在访视缺失数据集
代码如下:
*Derive baseline and simulate missing data;
DATA adeff;
SET dd1;
BY subjid;
CALL STREAMINIT(1980);
*Derive baseline value;
RETAIN base .;
IF first.subjid THEN base=.;
IF avisit='BL' THEN base= aval;
*Simulate arbitrary missing data pattern;
IF avisit ne 'BL' THEN DO;
IF RAND('Bernoulli', 0.08) THEN DELETE;
END;
RUN;
生成的数据存在访视时点数据的缺失,研究目的为比较最后一次访视相比基线(avisitn=98-base)的变化情况
二、MMRM模型
对于连续纵向变量,当数据随机缺失时,混合效应模型重复测量(MMRM)提供稳定的的估计值,无需特定处理
主要有效性终点较基线变化的分析模型将包括固定效应治疗、性别、年龄、访视和治疗-访视交互作用,以及作为连续固定协变量的基线值。
1.数据库整理
代码如下:
*MMRM for post-baseline;
data ana_p;
set adeff;
where avisitn in (7,14,28,42,98) ;
chg=aval-base;
run;
2.MMRM模型分析
proc mixed data=ana_p(where=( chg ne .));
class trtp(ref="Placebo") avisitn sex subjid;
model chg=base sex age trtp avisitn trtp*avisitn /htype = 3 ddfm=kenwardroger;
repeated avisitn / subject = subjid type=un ;
lsmeans avisitn*trtp / cl diff;
ods output lsmeans=pls; /*change from baseline to last week**/
run;
最终可得到两组从基线至最后一次访视的最小二乘估计变化
三、delta方法多重插补
1.数据格式转换
代码如下:
*Transpose to horizontal structure;
PROC TRANSPOSE DATA=adeff OUT=onepersub PREFIX=MIDI;
BY subjid age sex trtp base paramcd param;
ID avisitn;
VAR aval;
RUN;
/*检查数据中每个变量的缺失个数*/
proc means data=onepersub nmiss noprint;
var MIDI1 MIDI7 MIDI14 MIDI28 MIDI42 MIDI98;
output out=miss(drop=_type_ _freq_) nmiss=;
run;
数据格式由长转为宽,且可见各次访视存在的缺失情况
2.多重填补思路
多重填补考虑要点如上图,主要包括:
- 判断缺失状态:缺失假设方面MAR、MNAR、MCAR;缺失类型:单调缺失、任意缺失;缺失变量:连续、分类、计数、有序;依据缺失 变量情况采用的填补方法
- 依据缺失变量(连续、分类等)确定相应的填补方法进行填补
- 基于填补好的数据进行分析
- 最终进行汇总分析
整体多重填补思路如下
(1) 判断缺失情况并进行数据填补
/* Multiple Imputation - 3-step process */
*Step 1a - check missing data pattern (arbitrary vs monotone);
PROC MI DATA=onepersub NIMPUTE=0;
CLASS sex trtp;
FCS;
VAR sex trtp age base midi7 midi14 midi28 midi42 midi98;
RUN;
属于任意缺失,且所研究的变量为连续性变量
相应变量的填补方法见下图
其中 fully conditional specification (FCS) 方法对须填补的连续型变量处于任意缺失、协变量包括分类变量和连续型变量效果较好。
假设该变量为非随机缺失 (MNAR).,采用delta-adjusted pattern imputation:结合FCS方法对数据进行填补
代码如下:
*Step 1b - select appropriate method given missing
data pattern and variables to be imputed;
proc mi data=onepersub out=imputed seed=125 nimpute=50;
class sex trtp;
var sex trtp age base midi7 midi14 midi28 midi42 midi98;
fcs reg;
mnar
adjust(midi7 / shift=1 adjustobs=(trtp="Active"))
adjust(midi14 / shift=1 adjustobs=(trtp="Active"))
adjust(midi28 / shift=1 adjustobs=(trtp="Active"))
adjust(midi42 / shift=1 adjustobs=(trtp="Active"))
adjust(midi98 / shift=1 adjustobs=(trtp="Active"));
run;
(2)数据分析
填补后的数据基于ANCOVA方法对访视最后一次相比基线变化进行分析
data imputed;set imputed;chg=midi98-base;run;
*Step 2 - Analysis step;
/*ANCOVA*/
proc mixed data=imputed;
by _imputation_;
class sex trtp(ref="Placebo") ;
model chg =base sex age trtp/htype=3 ddfm=kr;
lsmeans trtp /diff alpha=0.05;
ods output tests3 = etest3 diffs=ediffs lsmeans=els;
run;
(3)合并结果
最终得出分析结果
*Step 3 – Pooling step;
proc sort data=els;by trtp;run;
proc mianalyze data=els;
by trtp;
modeleffects estimate;
stderr stderr;
run;
proc mianalyze data=ediffs;
modeleffects estimate;
stderr stderr;
run;
最终两组结果如下
总结
临床试验中`多次测量数据常采用MMRM模型直接估计缺失值,不进行缺失值填补;
多重填补后的数据可用于敏感性分析以验证结果的稳健性
Reference
- Multiple Imputation: A Statistical Programming Story
- Using SAS® for Multiple Imputation and Analysis of Longitudinal Data
- SAS® V9.4 MNAR statement for multiple imputations for missing not at random in longitudinal clinical trials
版权声明:本文标题:重复测量数据多重填补 SAS code 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1729850935a1215400.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论