Baidu
map

真实世界研究中,如何获得“靠谱”的科研结论?这个SAS实操讲解,科研小白都能学会!

2022-09-23 烤鸭小笼包 MedSci原创

在昨天的这篇文章这波「真实世界研究」热一定要赶上!学会这两个方法=研究成功了一半(纯干货)中,小编向大家介绍了真实世界研究中的混杂因素及其常用的校正方法,特别是倾向性评分匹配和逆概率加权

这篇文章我们通过一个具体的例子来展示SAS中的实现方法。
 
我们用的数据来源是荷兰格罗宁根市肾脏和血管终末期疾病预防(PREVEND)的队列研究(Joosten, 2014)
 
原数据含有较多变量,小编自己对数据进行了简化。其中RFFT是结局指标,是一个连续型变量;我们想要研究的自变量是是否使用他汀类药物(Statin)。此外,还包括了年龄(Age),性别(Gender),种族(Ethnicity),教育(Education),心血管疾病(CVD)糖尿病(DM),吸烟情况(Smoking)高血压(Hypertension)这些协变量。其中,除了Age是连续型变量外,其他均为分类变量。
 
数据共有4,095名患者,其中904名在治疗组(statin =1),3,190名在对照组 (statin=0)。以下是数据的部分截图:
图片
图1. 原数据部分截图
SAS中,倾向性评分匹配和逆概率加权都可以在PROC PSMATCH下实现,所以放在一起说。
 
倾向性评分匹配
 
图片
PROC PSMATCH data = statin region = cs;
CLASS statin gender ethnicity education cvd dm hypertension smoking;
PSMODEL statin(treated='1') = age gender ethnicity education cvd dm hypertension smoking;
MATCH distance = lps method = greedy(k=1) exact = (gender) caliper = 0.25 weight = none;
ASSESS ps var = (age gender rfft cvd dm hypertension) /stddev = treated stdbinvar = yes
plots = (boxplot(display = (RFFT)) barchart(display = (gender)) cloudplot(display = (age)) stddiffplot(ref=0.1));
OUTPUT out(obs = match) = psm_output;
RUN;
这是实现倾向性评分匹配部分的完整代码,我们一步步来看。
 
/* PROC PSMATCH data  = statin region = cs; */
 
👆这一条是调用PSMATCH这个procedure。
 
data= 告诉SAS我们要分析的数据文件是statin; region= 是明确匹配的数据范围。这里的“cs”代表common support,就是我们之前提到的重叠区域。这里除了cs外还可以改成allobs,这样匹配范围就是所有个体了。
 
/* CLASS statin gender ethnicity education cvd dm hypertension smoking;*/
 
👆这一步定义了分类变量statin, gender等。
 
/* PSMODEL statin(treated='1') = age gender ethnicity education cvd dm hypertension smoking; */
 
👆这一步就是根据我们选定的协变量计算每个个体相应的PS值。
 
PSMODEL默认使用的模型是logistic regression。等号左侧是我们的分组变量statin or not,括号里treated = ‘1’ 告诉SAS当statin = 1表示治疗组。等号右侧是协变量,注意这里我们不能把结局变量 (RFFT) 也纳入模型。
 
/* MATCH distance = lps method = greedy(k=1) exact = (gender) caliper = 0.25 weight = none; */
 
👆上一步中我们计算出了PS,而MATCH这一步就是实施匹配的具体细则。
 
Distance = 选定指定距离,可选值有ps, lps, mah,分别表示PS, logit PS, 和马氏距离(对PS进行的某种处理)。这里我们选择了lps。
 
Method = 则选定匹配方法,greedy表示贪婪算法也即我们之前所述的最近邻匹配,k = 1表示治疗组与对照组按照1:1匹配,若k = 2则表示按照1 : 2匹配etc。除了greedy外,还有optimal, full, 和varratio等方法。
 
Exact = 指定必须精确匹配的变量,这里我们选择了gender,即要求匹配对象的性别必须是完全一致的,exact = 可以指定多个变量。
 
Caliper = 定义了卡钳值,我们之前提到过,即匹配对象PS或LPS的差值不能超过某个数,一般默认值是0.25。
 
Weight = 是权重,在1:1的匹配情况下,每个个体所占权重是等价的,即都等于1。
/* ASSESS ps var = (age gender rfft cvd dm hypertension) /stddev = treated stdbinvar = yes
plots = (boxplot(display = (RFFT)) barchart(display = (gender)) cloudplot(display = (age)) stddiffplot(ref=0.1)); */
 
👆ASSESS statement是评估匹配效果的。

“/”之前的psvar = 明确了想要评估的对象,“/”之后则告诉SAS我们想要以怎样的方式对这些对象进行评估。SAS会自动生成一个表格,显示匹配前后的PS值和变量组间差异的平均值、方差和标准均值差 (SMD) 等。
 
Stddev = 明确了在计算SMD时用到的方差是所有个体pooled还是仅治疗组treated的方差。
 
Stdbinvar = yes表明对二分类变量的SMD进行标准化。
 
plots = 里,我们可以根据自己的需求生成箱线图、条形图和云图。Stddiffplot (ref=0.1)描述了各变量SMD的分布,然后将推荐范围限定为±0.1。
 
/* OUTPUT out(obs = match) = psm_output; */
👆最后将匹配成功的数据输出,命名为psm_output。
下面我们来看一看这一通操作下来结果长什么样:
 
图片
这是一个对PSM结果总结的表,告诉我们输入和输出表格的基本情况。可以看到我们限定匹配区域CS后,重叠区域的上限和下限分别是0.03和0.96,共匹配成功了720对,匹配前后PS的均值和均值差。
 
图片
图片
这两张图和表其实说的是一件事,展示了匹配前后PS值以及我们选定的各变量的均值差及其方差,以及SMD。我们可以看到匹配后所有变量和PS值的差值都在±0.1范围内,说明我们的匹配效果很好。
图片
 
这些就是部分变量的箱线图条形图云图,同样是对其匹配前后的分布进行可视化。总体上看来,匹配后的两组达到了非常好的平衡。
 
逆概率加权
 
下面简单说一说SAS中逆概率加权的实现。大致上和PSM非常像,只是把MATCH statement换成了PSWEIGHT,语句也更加简单。
weight = 明确了加权方式,分为atewgt和attwgt两种,根据逆概率加权的权重定义(研究组权重为1/PStreatment,对照组,权重为1/(1- PStreatment)),应选择atewgt。在ASSESS statement中,我们在plots里又加了一个wgtcloud即权重的云图。最后output里,注意这里我们没有做match,所以无法output matched sets,要把obs = 换成all,输出全部观察值。
图片
PROC PSMATCH data = statin region = cs;
CLASS statin gender ethnicity education cvd dm hypertension smoking;
PSMODEL statin(treated='1') = age gender ethnicity education cvd dm hypertension smoking;
PSWEIGHT weight = atewgt;
ASSESS ps var = (age gender rfft cvd dm hypertension) /stddev = treated stdbinvar = yes
plots = (boxplot(display = (RFFT)) barchart(display = (gender)) cloudplot(display = (age)) stddiffplot(ref=0.1) wgtcloud);
OUTPUT out(obs = all) = ipw_output;
RUN;
生成的结果也和之前大同小异,这里不再赘述。
 
图片
这里可以看到输出的数据里多了一列atewgt,即每个个体被赋予的权重。我们看一下权重云图:
 
图片
可以看到无论是治疗组还是对照组,其权重分布几乎都在推荐的limit (两条灰色虚线)以内,表明我们的weighting没有太大问题。
通过以上学习我们发现,SAS中PSMATCH Procedure功能强大,可以非常完整地完成倾向性评分匹配和逆概率加权,并且根据我们的需求设定不同参数和计算方法,语言简洁直接,很好上手。
 
在下一篇文章中,我们将继续为大家介绍如何用R来实现倾向性评分的相关分析,敬请期待。

版权声明:
本网站所有内容来源注明为“梅斯医学”或“MedSci原创”的文字、图片和音视频资料,版权均属于梅斯医学所有。非经授权,任何媒体、网站或个人不得转载,授权转载时须注明来源为“梅斯医学”。其它来源的文章系转载文章,或“梅斯号”自媒体发布的文章,仅系出于传递更多信息之目的,本站仅负责审核内容合规,其内容不代表本站立场,本站不负责内容的准确性和版权。如果存在侵权、或不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。
在此留言
评论区 (1)
#插入话题
  1. [GetPortalCommentsPageByObjectIdResponse(id=2143475, encodeId=cddc21434e54d, content=前辈您好,执行到这一步“PSWEIGHT weight = atewgt;“”老报错,实在是找不到原因 PSWEIGHT weight = atewgt; -------- 180 ERROR 180-322: 语句无效或未按正确顺序使用。 , beContent=null, objectType=article, channel=null, level=null, likeNumber=82, replyNumber=0, topicName=null, topicId=null, topicList=[], attachment=null, authenticateStatus=null, createdAvatar=/v1.0.0/img/user_icon.png, createdBy=72446462907, createdName=地球超人, createdTime=Sun Jun 18 10:08:01 CST 2023, time=2023-06-18, status=1, ipAttribution=广东省)]
    2023-06-18 地球超人 来自广东省

    前辈您好,执行到这一步“PSWEIGHT weight = atewgt;“”老报错,实在是找不到原因 PSWEIGHT weight = atewgt; -------- 180 ERROR 180-322: 语句无效或未按正确顺序使用。

    0

相关资讯

免费回放:临床研究中常用统计方法

中国医学科学院阜外医院

中国长期科研投入换来回报,自然指数涨幅领先全球,与美国差距进一步缩小

近年来,中国的科研经费一直在稳定而持续地增长~

新一年国自然害怕陪跑?这有一份锦囊给你

有机会获得标书评估报告、科研会员等丰厚的奖品!不要错过!

陆麒教授:科研课题申报和伦理审查指南全概括

陆麒教授—上海交通大学医学院附属仁济医院

CSA&TISC 2022:王拥军教授谈「临床医学科学家应该具备的基本素质」

中国卒中学会第八届学术年会暨天坛国际脑血管病会议(CSA&TISC 2022)于8月5—7日采用线下+线上的会议形式隆重召开。在8月5日的「CSA卒中综合培训Ⅰ」论坛上,正式启动了

Baidu
map
Baidu
map
Baidu
map