重复测量数据多重填补 SAS code
临床试验长期随访数据中,缺失数据的利用和处理是经常遇到的问题,本文将围绕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 missingdata 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相关推荐
- 方差分析 球形检验_重复测量数据的方差分析
重复测量资料是同一受试对象的同一个观察指标在不同时间点上进行多次测量所得的资料,常用来分析该观察指标在不同时间点上的变化特点.这类资料在临床试验和流行病研究中较常见.重复测量的方差分析模型仍然应用方差 ...
- 箱式图 分组_小白学R(三):重复测量数据的箱式图上的p值如何改大小呢?
上一期分享了重复数据箱式图的使用条件和数据格式小白学R(二):重复测量数据/连续数据的箱式图(ggplot包)(1),今天就奉上箱式图的代码和以及如何改箱式图上的p值大小. 画箱式图 1.1 先看数据 ...
- 多选题spss相关分析_【医学问卷分析】使用SPSS多重响应对医学问卷多选题进行统计分析——【杏花开医学统计】...
杏花开生物医药统计 一号在手,统计无忧! 关 注 [医学问卷分析] 使用SPSS多重响应对 医学问卷多选题进行统计分析 关键词:SPSS.问卷分析 导 读 前几期,我们介绍了量表的制作及信效度分析的 ...
- SPSS,SAS,stata等多种统计软件对比
EViews 是美国GMS公司1981年发行第1版的Micro TSP的Windows版本,通常称为计量经济学软件包.EViews是Econometrics Views的缩写,它的本意是对社会经济关系 ...
- 一文看懂数据清洗:缺失值、异常值和重复值的处理
https://www.toutiao.com/a6711212131125035534/ 导读:在数据清洗过程中,主要处理的是缺失值.异常值和重复值.所谓清洗,是对数据集通过丢弃.填充.替换.去重等 ...
- 广义典型相关分析_重复测量数据分析及结果详解(之二)——广义估计方程
上一篇文章主要介绍了重复测量方差分析的基本思想是什么.它能做什么.怎么做.结果怎么解释,这几个问题.最后同时指出重复测量方差分析还是有一定局限,起码不够灵活.所以本文在上一篇文章基础上继续介绍医学重复 ...
- 缺失数据填补基础方法(3)——Multiple Imputation by Chained Equations (MICE)
目录 一.MICE方法介绍 二.数据集介绍 2.1 数据集来源 2.2 类别属性 2.3 下载链接 三.代码实现 3.1 读取数据 3.2 检查数据类型 3.3 检查相关性 3.4 检查缺失值 3.5 ...
- 一文看懂数据清洗:缺失值、异常值和重复值的处理
01 数据列缺失的4种处理方法 数据缺失分为两种:一种是行记录的缺失,这种情况又称数据记录丢失:另一种是数据列值的缺失,即由于各种原因导致的数据记录中某些列的值空缺. 不同的数据存储和环境中对于缺失 ...
- 三因素方差分析_重复测量方差分析的操作教程及结果解读
内容来自:"小白学统计"微信公众号,感谢作者授权. 重复测量数据是指对同一个体在不同时间点的测量,这种数据在医学研究中较为常见,比较典型的数据形式如: 对一组人群分别在干预前后不同 ...
最新文章
- Nginx-1.6.2更改端口
- [Swift]LeetCode1051.高度检查器 | Height Checker
- 真正的云主机到底是什么样的?转发
- WPS广告弹窗永久关闭
- CSU2020期中测试题(2)WOWO爬水井
- bilibili源代码泄露,go-common
- 【C语言】#文件操作#有5个学生,每个学生有3门课程的成绩,从键盘输入以上数据(包括学号、姓名、3门课成绩),计算出平均成绩,将原有数据和计算出的平均分数存放在磁盘文件stud中。
- 第二次作业,制作调查问卷
- 短视频App开发方案IOS架构
- C语言编程学习不难学,是你没找对方法!
- 将qlv类型的视频转换mp4格式的最新做法
- [Go]获取当前时间戳秒/毫秒/纳秒 转成字符串string
- 如何用网络管理软件灵活管理复杂庞大的网络
- 苹果邮箱 android设置字体,如何更改Mac OS X中的邮件字体大小?
- 【C 语言基础】C 世界函数的故事(1)
- 本科、硕士研究生毕业论文字体、段落格式参考
- 推荐系统常用的评价指标
- 2010 前端工程师的笔试题
- STM32玩矩阵开关(输入和输出)
- 服务器和数据库哪一个更重要
热门文章
- 【第89期】推荐几本电商必读书
- win7旗舰版安装telnet,报错:打开程序包 Telnet Client 的更新 TelnetClient 失败。状态为: 0x80073712。解决方案
- 红米note7找android,红米Note 7
- 如何修改MySQL数据库的密码?
- [全网最细]接口测试一般怎么测?接口测试的流程和详细步骤
- 【大数据技术基础系列】列式数据库与基于行的数据库存储数据结构
- 转:mbedtls学习3.mbedtls_API分析
- ruid+oracle,Timmy Trumpet《Oracle》[高品质音乐下载]
- 一文看懂语音技术商业化逻辑:对品牌意味着什么 | 综述
- word 全部更新域