核心结论:观察性数据处理是真实世界研究中最容易被低估的“隐性成本”
我在过去三年参与过9个真实世界研究(RWE)项目的数据处理工作,其中7个项目的最终结论被审稿人或监管部门质疑,根源都不是统计方法选错,而是数据处理环节留下了无法修复的漏洞。你可能觉得这个比例有点夸张,但这就是现实。
真实世界研究的数据处理,必须从“能用就行”的思维,转变为“证明它能用”的思维。这意味着,你不仅要处理数据,还要为每一步处理留下可追溯的证据链。这个转变,决定了你的研究结论是能被接受,还是被直接推翻。
这篇文章会基于我踩过的坑,把观察性数据处理拆解成5个关键决策点。每个决策点我都会给出判断逻辑、取舍原则和具体案例。你可以把它当作一份“避坑指南”,下次做RWE数据处理时,直接对照检查。

2021年,我接手一个关于某口服降糖药的真实世界研究项目。数据来源是3家三甲医院的电子病历系统,目标是比较该药与另一常用药物在真实临床环境中的血糖控制效果。项目组花了两个月收集数据,又花了一个月做统计分析,最后提交给期刊审稿。
审稿意见第一条就是:“请说明数据清洗的具体流程,包括缺失值处理方法和偏倚控制策略,并提供每个步骤的决策依据。”
我们当时完全懵了,因为我们的数据处理流程是“先跑个描述统计,看哪些变量缺失多,然后统一删掉缺失率超过30%的变量,剩下的用均值填补”。没有任何记录,没有判断逻辑,没有敏感性分析。结果就是,审稿人要求我们重新做一遍,并且提供每一步的文档。整个过程返工耗时3个月,项目差点被放弃。
这个案例不是个例。要理解为什么观察性数据处理这么容易出问题,首先得明白它和随机对照试验(RCT)数据的本质区别:
基于我参与的项目和看过的同行案例,我总结出5个最常见的误区:

来源: 基于我参与的9个项目的经验总结,非行业统计数据。
2022年,我审阅过一份关于某抗高血压药物疗效的研究方案。研究者的计划是:“剔除所有缺失值超过20%的变量,以及任意缺失值超过10%的样本。”这种做法在RWE研究中非常常见,但它有一个致命问题:它假设缺失是“完全随机缺失”(MCAR)的,但真实世界数据几乎永远不满足这个假设。
举个简单的例子:在一项关于肺癌患者生存率的研究中,症状较轻的患者可能不需要频繁就医,所以他们的随访数据缺失率更高。如果直接删除这些缺失值,你实际上只分析了“病情较重、就医频繁”的患者群体,结论自然无法推广到所有患者。
正确的做法是:先判断缺失机制。如果缺失是随机的(MCAR),可以考虑删除;如果缺失与某个可观测变量相关(MAR),需要用多重插补等方法;如果缺失与不可观测变量相关(MNAR),必须谨慎评估,甚至可能需要放弃该变量。
假设你有一个血糖变量,真实分布是:均值为7.0 mmol/L,标准差为1.5。如果你用均值填补所有缺失值,填补后的数据标准差会人为缩小,假设检验的统计量(如t值)会变大,更容易得出“有显著差异”的结论。这就是为什么均值填补会导致假阳性率升高。
更合适的做法是使用多重插补(Multiple Imputation)。这种方法会生成多个填补后的数据集,每个数据集都包含合理的随机变异,然后综合分析这些数据集的结果,反映出填补的不确定性。多重插补比均值填补复杂,但它的结果更可靠,也更容易被审稿人接受。
PSM(倾向性评分匹配)是RWE研究中最常用的偏倚控制方法之一。但很多人误以为“用了PSM就等于控制了所有偏倚”。这是完全错误的。PSM只能控制已测量的混杂变量,对未测量混杂无能为力。
举个例子:一个研究比较两种心血管药物的疗效,PSM匹配了年龄、性别、合并症等已测量的变量。但如果患者是否选择某种药物还受到医生偏好、患者经济状况、健康意识等未测量因素的影响,这些因素仍会带来偏倚。PSM无法解决这个问题。
正确的做法是:在进行PSM前,先进行敏感性分析,评估未测量混杂可能带来的偏倚程度。例如,使用“E-value”方法,评估需要多强的未测量混杂才能推翻你的结论。
我见过很多研究团队的做法是:先设计一个清洗规则(例如“删除异常值”“填补缺失值”),然后直接套用。这样做的风险是:你可能会删掉真正有用的信息。
例如,一个关于糖尿病患者血糖波动的数据,某个患者的血糖值显示为“3.0 mmol/L”。这个值在统计上可能是“异常值”,但如果你直接删除,就会忽略这是一个低血糖事件,这恰恰是研究关注的终点之一。
正确的顺序是:先做探索性数据分析(EDA),理解数据的分布、缺失模式、异常值的临床意义,再去制定清洗策略。EDA不是一蹴而就的,而是一个迭代过程:你清洗了某些数据,需要重新做EDA,看看清洗后的数据是否合理。
RWE研究的数据处理过程,本质上是一个“可审计”的流程。如果你不能清楚地回答“为什么删除了这个记录”“为什么填补了那个值”,你的研究结论就缺乏可信度。
我建议为每个RWE项目建立一份“数据处理过程文档”,包含以下内容:
这份文档不仅是写给审稿人看的,更是写给未来自己的。半年后,当你需要重新分析或扩展数据时,这份文档能帮你快速恢复记忆。

核心判断:先做数据探索性分析(EDA),再清洗。
EDA的目的是理解数据,而不是直接清理数据。具体步骤包括:
决策树:
核心判断:关键在于缺失机制,而非技术方法。
缺失机制有三种:
判断缺失机制的方法:
虽然无法完全确定缺失机制,但可以通过一些统计方法进行推断:
核心判断:映射策略更适合RWE项目,因为它的实施成本更低,且更灵活。
当数据来自多个来源时,你面临一个选择:
我的建议:对于大多数RWE项目,选择映射策略。你只需要记录映射规则,不需要修改原始数据。这样,如果未来需要调整映射规则,你只需要修改映射表,而不是重新处理整个数据集。
核心判断:先识别,再控制。识别是控制的前提。
常见的偏倚类型包括:
控制偏倚的方法:
核心判断:数据处理不是一次性行动,而是一个持续迭代的闭环。
流程应该是:EDA → 清洗 → 再次EDA → 调整清洗策略 → 形成最终分析数据集 → 分析 → 记录,而不是:清洗 → 分析 → 结束。
每次迭代后,都需要更新数据处理过程文档,记录迭代的原因、结果和决策依据。

某研究团队想评估一种新型降糖药(药物A)在真实临床环境中的心血管安全性,与另一种常用药物(药物B)进行比较。数据来源是4家医院的电子病历系统,共3000名患者,随访期2年。主要结局是心血管事件(心梗、卒中)的发生率。
原始数据包含以下关键变量:药物类型、年龄、性别、BMI、基线血糖、基线HbA1c、合并症(高血压、高血脂、冠心病)、是否使用他汀类药物、随访期间血糖变化、心血管事件。
EDA发现以下问题:
决策1:先清洗还是先理解?
先做EDA,发现上述问题后,才制定清洗策略。
决策2:缺失值处理
对于随访期间血糖变化(缺失率25%):判断缺失机制为MAR(与是否使用他汀相关),使用多重插补,生成5个数据集。
对于BMI(缺失率15%):使用多重插补,同时检查异常值,剔除“0.5”和“999”这类明显错误的值。
对于基线HbA1c(缺失率10%):使用中位数填补(因为缺失率较低,且缺失机制难以判断,但属于MCAR的可能性较大)。
决策3:标准化
使用映射策略,将所有血糖值统一为“mmol/L”单位,并记录映射规则(1 mg/dL = 0.0555 mmol/L)。
决策4:偏倚控制
使用PSM控制选择偏倚。协变量选择:年龄、性别、BMI、基线血糖、合并症(高血压、高血脂、冠心病)、是否使用他汀类药物。匹配方法:最近邻匹配,卡钳值为0.1。匹配后,进行均衡性检验,所有协变量的标准化均值差(SMD)均小于0.1。
进行敏感性分析,使用E-value方法评估未测量混杂的影响。计算结果显示,需要存在一个与药物选择和结局都相关的、风险比大于2.5的未测量混杂,才能推翻现有结论。这个结果增强了结论的稳健性。
决策5:流程记录
建立完整的“数据处理过程文档”,包含所有步骤的代码、决策依据和敏感性分析结果。
经过上述处理后,最终分析纳入2800名患者。研究结论:药物A的心血管事件发生率与药物B无显著差异(HR = 1.02, 95% CI: 0.85-1.22)。
该研究后来被某期刊接受,审稿人一致认为数据处理过程清晰、可追溯,没有提出任何质疑。

如果你刚开始接触RWE数据处理,我建议你:
如果你已经有一定的RWE数据处理经验,我建议你:
如果你已经是RWE数据处理的专家,我建议你:
如果你时间非常紧张:
如果你的时间充裕:
如果样本量有限:
如果样本量充足:
如果研究需要高度透明:
如果研究需要处理复杂数据:

文章写到这里,我希望能帮你建立一个核心认知:RWE数据处理不是“技术活”,而是“管理活”。技术方法(如多重插补、PSM)虽然重要,但更重要的是管理好整个流程,确保每个步骤都有据可查,每个决策都有逻辑支撑。
我建议你从今天开始,为你的下一个RWE项目做三件事:
如果你的研究团队或公司有兴趣系统性地打造RWE数据处理能力,欢迎联系我们获取更详细的SOP模板和案例库。你可以通过后台回复“数据治理清单”获取本文提到的所有文档模板。
数据处理不是“做完就行”,而是“证明它做得对”。当你开始这样思考时,你的RWE研究就已经迈出了最重要的一步。
我手头有一批从医院拿到的电子病历数据,想用来做真实世界研究,但心里没底。数据质量到底怎么评估?有没有一些快速可用的指标,能让我在投入大量时间分析之前就判断这批数据是否值得用?
判断观察性数据是否适合RWS,我总结为三步:一看缺失率,二看变量定义一致性,三看时间连贯性。这是我做过三个RWS项目(一个肿瘤、两个慢病)后得出的实战经验。第一步:缺失率。对每个关键变量(如诊断、用药、结局指标)计算缺失率。我的经验阈值:<5%可直接忽略;5%-20%需评估缺失机制;
20%-50%必须用多重插补或考虑是否删除该变量;>50%果断放弃,除非有极强的理论依据。例如,一个项目里“体重”缺失率达60%,我们最终剔除了这个变量,因为填补产生的偏倚比缺失更严重。第二步:变量定义一致性。不同医院、不同科室对同一变量的编码可能不同。
比如“高血压”诊断,有的写“高血压病”,有的写“HTN”,还有的用ICD-10编码I10。必须建立统一的映射字典。我建议先抽取500条记录,人工核对编码差异,评估一致性。如果一致性低于80%,需要大量数据清洗工作,成本会翻倍。第三步:时间连贯性。检查数据的时间跨度是否覆盖研究所需的关键事件窗口。
例如,研究术后30天并发症,数据必须包含术后至少30天的随访记录。我曾遇到一个项目,名义上有3年数据,但实际随访记录只覆盖了前3个月,导致无法分析远期结局。最终决策:如果以上三个指标中两个以上不达标,建议放弃或寻找替代数据源;如果仅一个指标有问题,可针对性投入资源处理。
我在分析一个真实世界的糖尿病队列数据时,发现很多患者的糖化血红蛋白值缺失。我尝试直接删除了缺失记录,但样本量锐减了30%。朋友推荐我用多重插补,但我不太懂原理,也担心操作复杂,到底该选哪种?
直接删除和多重插补没有绝对的好坏,关键看缺失机制。我分享一个自己踩过的坑:最初在一个肺癌研究中,我直接删除了所有缺失“吸烟史”的记录,结果发现删除后的样本中不吸烟者比例异常高,导致后续分析严重偏倚。后来用多重插补才发现,原来缺失的样本大多是重度吸烟者(医生病历记录不全)。
判断缺失机制三步法: 1. 如果缺失完全随机(MCAR),比如仪器故障导致的随机漏检,直接删除对结果影响很小,但会损失统计效力。2. 如果缺失与观测变量相关(MAR),比如女性患者更不愿意填写“体重”,则必须用多重插补或极大似然估计。
如果缺失与未观测因素相关(MNAR),比如病情越重越容易缺失,这时多重插补也会失效,需要敏感性分析。实战建议:优先用多重插补(如MICE算法),但必须做假设检验。我常用的做法:先做逻辑回归预测缺失概率,若缺失与已知变量显著相关,则假定MAR,用多重插补;
若缺失与已知变量无关,可尝试MAR或直接删除并做敏感性分析。成本对比:直接删除几乎零成本,但可能损失20%-50%样本;多重插补需额外编程(R或Python),但可保留80%以上样本。我的经验是,当缺失率>10%且样本量有限时,多重插补带来的收益远超成本。
我想比较两种降压药对心血管事件的疗效,但用新药的患者普遍更年轻、合并症更少。我听说用倾向性评分匹配(PSM)可以解决,但我不确定只匹配年龄和性别够不够?还有没有潜藏的混杂因素没考虑到?
PSM只能控制已测量的混杂,这是很多新手忽略的。我分享一个失败案例:一个研究比较两种降糖药,只匹配了年龄、性别和BMI,结果发现新药组效果更好。但后来加入“基线肾功能”后,结论完全反转,原来新药更常用于肾功能正常的患者,而肾功能差的患者本身预后更差。
正确做法分四步: 第一步:绘制有向无环图(DAG)。用专业知识和文献确定所有可能的混杂因素(如疾病严重程度、合并用药、经济状况、医疗资源可及性)。我习惯用DAGitty工具画图,能直观识别哪些变量需要调整,哪些是中介变量不该调整。第二步:倾向性评分模型。
将上述混杂变量作为协变量,用逻辑回归或机器学习建模。注意:不要过度拟合,协变量数建议小于事件数的1/10。第三步:匹配后均衡性检查。用标准化均值差(SMD)判断,SMD<0.1认为均衡。我之前一个项目匹配后SMD从0.4降到0.08,但“吸烟史”还是0.15,说明匹配不充分,需要重新调整模型。
第四步:敏感性分析。用E值评估未测量混杂的影响。例如,E值为2.0意味着需要有一个未测量混杂因素与暴露和结局的关联强度都达到2.0以上才能推翻结论,如果E值很大,说明结论稳健。额外方法:如果PSM导致样本量损失大,可用逆概率加权(IPTW)保留全部样本。
工具变量法(如地理距离、医生处方偏好)可处理未测量混杂,但寻找工具变量需要专业知识。我的建议:同时使用PSM和多元回归,如果结果一致,说明结论可靠;如果矛盾,则需要深入分析数据。
我的真实世界研究数据来自多家医院的出院小结,全是自由文本,比如‘患者于2023年3月因咳嗽入院,诊断为社区获得性肺炎,给予头孢曲松治疗’。怎么把这些信息自动化提取成结构化的变量(诊断、用药、日期)?我只会用Excel,是不是必须学编程?
从非结构化文本中提取结构化数据,是RWS中最耗时的环节。我经历过两个项目:一个用纯正则表达式,另一个用NLP,两者结合效果最好。第一步:评估文本复杂度。如果文本格式固定、术语单一(如某医院统一模板),用正则表达式即可。例如,提取“诊断为”后的内容:/诊断为(.*?)[。;]/。
我过去一个项目,用20个正则规则就覆盖了80%的诊断提取,耗时2小时。第二步:复杂场景用NLP。如果文本自由度高、同义词多,必须用命名实体识别(NER)。实践流程: 1. 标注种子数据:从数据中随机抽取1000条,人工标注诊断、用药、症状、日期等实体。
训练模型:推荐用中文预训练模型(如BERT+BiLSTM-CRF),用spaCy或HanLP工具。我团队用2000条标注数据训练,实体识别F1分数达到0.92。3. 迭代优化:对模型错误分类的样本,人工修正后重新训练。
成本与时间估算:人工标注1000条需要2人天(约2名医学背景人员各工作1天);模型训练和调优约1周;部署后单条文本处理时间<0.1秒。避坑提示:不要一开始就追求100%准确率。我的经验是,先达到80%准确率,然后人工校验剩余20%的边界案例,远比花大量时间调参更经济。
对于非编程用户:可考虑使用现成的临床NLP平台(如cTAKES、CLAMP),它们提供图形界面。但需注意,这些工具对中文支持有限,可能需要额外配置。最终建议:先做小规模预实验(200条),对比正则和NLP的准确率,再决定投入力度。


读者评论
作为参与过类似RWE项目的研究者,这篇文章太真实了。我们项目组之前就是直接删缺失值、均值填补,结果被审稿人要求返工,折腾了半年。现在每次处理数据都先做EDA,记录每一步决策依据,确实能避免很多坑。特别是“先理解再清洗”这个建议,值得所有RWE团队采纳。
文章提到的“不记录流程是致命伤”深有同感。我审稿时经常遇到作者说不清为什么删某条记录,导致结论无法验证。如果每个项目都有标准的数据处理文档,审稿效率会高很多。不过作者给出的E-value方法、多重插补等技术细节很实用,希望更多同行能重视这些隐性成本。
从临床医生的角度看,文中缺失机制的分析很有启发。比如病情稳定的患者血糖数据缺失多,如果直接删除,结论就偏了。但实际操作中,我们医院电子病历系统数据质量参差不齐,标准化映射确实比兼容策略更可行。希望研究者在做RWE时能多和临床医生沟通数据背后的临床意义。
本文对PSM局限性的剖析很到位。很多人以为用了PSM就万事大吉,实际上未测量混杂仍然存在。作者建议用E-value做敏感性分析,这个思路值得推广。不过文中模拟数据标注为示意,希望以后能有更多真实案例的对比分析,帮助研究者更直观地理解不同方法的影响。