ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

医学审稿防数据注水:从p值、标准差到快速复核方法

医学审稿防数据注水:从p值、标准差到快速复核方法 医学审稿这些年我见过最让我后背发凉的稿件不是结论互相矛盾的那种而是数据“漂亮”到不像真的那种。前阵子审到一篇随机对照试验两组基线表堪称完美年龄均值几乎一样标准差精确到小数点后两位都相同各组脱落人数整整齐齐所有次要结局的p值都落在0.01到0.05之间没有一个“多余”的阳性或阴性结果。我当时的第一反应不是“这研究做得真好”而是“这数据怕是掺了水”。这里先说明一下我写这篇东西不是说审稿人要当侦探更不是说所有可疑数据都等于学术不端。现实中大量所谓“造假”其实是录入错误、统计软件误用、图表缺省设置造成的偏差甚至只是作者不小心把标准误写成了标准差。但不管是故意还是无意审稿人都有责任在能力范围内识别这些“水分”把问题挡在发表之前。这篇文章就把我这些年积累的、用来甄别医学数据可疑信号的方法和工具一次性梳理出来给同样在审稿的同行、正在写论文的科研新人和被数据折磨的医学研究生做个参考。1. 数据“指纹”检查先从描述性统计里找破绽1.1 均数与标准差的组合是否“物理上可能”我在审稿时看一篇论文的第一件事不是看p值而是翻基线特征表在脑子里快速做一道算术题。临床研究的人群特征很少是均匀分布的如果一张表上写着“年龄23.5 ± 1.2岁n100”我马上就会警觉这意味着几乎所有受试者的年龄都落在22.3到24.7岁之间。除非入组标准限定得极其狭窄——比如只收某校大一新生、出生月份都限定在同一个季度——否则这在现实中几乎是不可复现的。快速检验的方法很简单如果数据近似正态分布那么99.7%的观测值应该在均值±3个标准差的范围内。换句话说均值23.5岁、标准差1.2岁时理论上应有约99个样本的年龄落在20.1到26.9岁之间。你只要对照入组标准和时间跨度想一想就会明白这个分布的合理性存疑。我常跟年轻审稿人说的一句话是先不急着算统计量先问自己“这个数据在物理世界里长什么样”。一个连续3年招募受试者的多中心试验年龄标准差通常不会小到1岁以内除非样本量极小或者入组人群高度同质。还有更隐蔽的版本作者报了一组收缩压“128.3 ± 3.1 mmHg”但正常成年人的收缩压波动范围通常是110到140以上标准差3.1意味着几乎每个人都在125到131之间——单中心、同一天、同一台血压计、静息状态下连续测量可能接近但只要是多天、多中心测量这个离散度就异常低。审稿时不需要做正式检验靠“现实感”就能圈出可疑项。1.2 基线表的标准差“整齐得诡异”第二个常被我盯上的信号是两组或多组标准差的相似程度。真实数据里干预组和对照组的基线标准差当然可能接近但如果连小数点后一位都完全一致尤其是年龄、病程、评分这类变异度本应不同的人群指标就需要留个心眼。把数据“制造”出来的人很容易不小心把同一列标准差复制到多个组里更常见的操作是先用软件生成一组数据再手动微调均数此时标准差往往原样保留。这种“复制痕迹”是数据指纹的一部分。你可以把连续变量的标准差按行排列如果出现大量重复值或者SD与均数之间的比例在所有变量间保持一致往往说明这些数字不是从原始病例记录表里录进去的。还有一个我特别在意的细节所有连续变量的标准差都不为零且大小都刚好在均数的5%到10%之间。真实数据不是这样的。有的指标变异度可以小到接近零比如体温有的则大到接近均数的30%比如某些炎症指标全表整齐划一的离散度是手工编造数据的典型特征之一。1.3 分类变量的百分比暴露出的“整数偏好”二进制变量和分类变量的百分比也值得多看两遍。真实研究中受试者的性别比例、并发症比例基本不会出现整整齐齐的数字。一篇300人的试验报告说男性占比“50.0%”另一个分组里“高血压病史40.0%”这种整数百分比在一两个变量上出现还可以解释为巧合但如果多个分类变量的百分比都精确成整数就很可能是先设定了比例再反向填充样本。更敏感的信号是所有分类变量的阳性率都恰好落在“好看”的区间比如基线均衡性检验的p值全都大于0.5——这不是不可能但整张表十几行的均衡性p值没有一个小于0.2也没有一个大于0.9那就需要多问一句“数据到底怎么来的”。真实的随机化分组不会把每一条基线特征都平衡得这么“圆满”偶尔出现一两个p值是0.03、0.04才更像抽样的随机波动。2. p值的统计学陷阱整齐的显著性本身就是异常2.1 为什么“所有结果都显著”反而可疑科研论文里最常见的造假痕迹不是伪造原始数据而是“调整”统计分析结果让无差异的组间比较变得“漂亮”。正常情况下一篇探索性研究做了二十次比较能有两三个p值小于0.05就已经不错如果一篇论文的次要结局全部显著且p值集中在0.01到0.045之间你就要怀疑是否有人在报告前筛选过结果。这里涉及一个基本概率直觉当原假设为真时p值在0到1之间是均匀分布的即使部分原假设为假也不会出现所有p值都齐刷刷挤在0.01到0.05区间的情况。真实研究里次要结局的p值序列通常是混合的0.21、0.046、0.003、0.67、0.089、0.031这种参差不齐的分布才是常见的。所以我在审稿时会把论文里所有p值列成一张表观察它们的分布形态。如果所有“显著”结果都集中在0.01到0.05的窄带里没有任何小于0.001的结果而样本量明明很大也没有任何大于0.2的结果那这份数据就存在明显的“人为打磨”痕迹。这不是统计学检验而是基于p值真实分布规律的经验推断但非常有效。2.2 用均数、标准差和样本量反向复算t值比看分布更硬核的一招是根据论文报告的两组均数、标准差和样本量自己动手复算t值和p值再和原文给出的p值对照。具体公式是两独立样本t检验的基础形式[ t \frac{\bar{x}_1 - \bar{x}_2}{\sqrt{\frac{s_1^2}{n_1} \frac{s_2^2}{n_2}}} ]拿到这个t值后再根据自由度近似等于 n1n2-2查t分布表或者用在线t分布计算器得到p值。如果作者报告“p0.03”你复算出来的p值却是0.40那说明原始均数、标准误和报告结果之间至少有一个是假的。这个方法对审稿人来说性价比极高因为你不需要原始数据只要论文正文里的描述性统计完整就能在十分钟内完成复算。我实际审稿时遇到过一次作者报告干预组与对照组均数差异的p值为0.04但我用报告的两组均数和标准差反推算出来的t值只有0.8左右对应p值0.42。后来编辑要求作者提供原始数据作者最终撤回了稿件原因是“统计分析文件版本弄混了”——至于是不是真的弄混我不能替编辑下结论但至少这道复算程序证明了我最初的怀疑是有道理的。2.3 标准误与标准差的混用最常见的“注水”根源还有一种情况非常普遍也是很多论文“神秘显著”的来源作者把标准误SEM当成标准差SD用或者在图表里给误差条标注成标准差实际上画的是标准误。标准误等于标准差除以样本量的平方根当n100时SEM只有SD的十分之一。有些图表里的误差条看起来非常“苗条”你以为变异很小其实只是作者用错了公式。审稿时看到一个诡异的小误差条我会先看它的数值是否等于“报告的标准差除以根号下样本量”。如果是那最小的修改建议是请作者统一使用SD因为SEM反映的是抽样分布的离散度不是个体变异在描述样本特征时通常会误导读者。这里要强调一点混用SD和SEM不一定是造假但在很多情况下足以改变对结果的解读。你复算时用错了参数结论自然就跑偏了。3. 图表的逆向验证一张图能暴露比表格更多的问题3.1 误差条的长度和形态反映“数据底稿”论文图表是最容易露馅的地方因为很多造假者只精心设计了表格数字没意识到图里每个点的位置、误差条的长短都可以被审稿人反算出来。拿到一张柱状图我先看误差条顶端标注的是SD还是SEM如果图表没有说明我倾向于默认它是SD但会检查它是否与正文表格一致。然后我会用PDF阅读器或图片处理软件放大图上的坐标轴数像素长度估算误差条对应的数值再与表格中的SD逐一对齐。这个方法听起来笨但在无法获取原始数据时是有效的交叉验证手段。真实数据制成的图表误差条长短不会一模一样手工拼接的图误差条可能整齐划一、比例失调甚至出现同一个误差条在不同分组间复制粘贴的痕迹。还有一种需要警惕的图形信号是所有误差条都刚好画到坐标轴刻度线的位置误差条上限或下限正好压在某条网格线上。真实统计图中误差条的端点位置是由数据决定的几乎不可能“恰巧”和视觉网格对齐那么多次。3.2 散点图上的点“分布太完美”也是问题临床论文里最常见的散点图是表现两组连续变量分布或相关性的图。真实观测数据的散点图是有“毛边”的点与点之间疏密不均回归线两侧会有些异常点个别点会偏离整体趋势相当远。如果你看到一张散点图上所有点都紧贴回归线距离几乎一致且没有任何离群值大概率是人为生成了符合“理想关系”的数据。更隐蔽的是聚类分布异常。比如某个生物标志物与预后评分的散点图真实数据通常会出现明显的簇状聚集——某个区间里密密麻麻另一个区间稀稀拉拉。而人为构造的数据往往设计得“均匀覆盖”让每个区域都差不多密。这种过度均匀本身就是不自然的。3.3 生存曲线和森林图的“形状直觉”生存分析图也经常被动手脚因为曲线形状会给评审者很强的视觉冲击。真实的Kaplan-Meier曲线通常有阶梯状结构尤其是样本量不太大的时候事件发生时间越分散曲线上的阶梯越细碎而且在随访后期由于失访和事件堆积曲线尾部会变得不稳定置信区间明显变宽。如果一条生存曲线的两条组别曲线分开得“干净利落”每个随访时间点两组累积生存率差异几乎同步增加并且置信区间的带宽没有在后期拉开这不符合真实的删失模式。我经常会问自己一个问题如果100个人里在随访第30天、第60天、第90天各死亡了若干人那么生存概率在每个时间点的下降应该是离散的跳跃。如果图上曲线是平滑的圆弧下降那说明作者要么用了参数生存模型但没说明要么数据本身就是拟合出来的。森林图的检查更简单亚组分析里各个效应量的置信区间宽度应该随样本量变化。小样本亚组的置信区间通常极宽如果某个亚组只有40人但置信区间窄到和1000人的主分析差不多那就违反了基本的抽样误差规律。4. 快速复核工具用Excel和R把可疑数据“拆开”看4.1 在Excel里重建数据分布检验合理性不需要高级统计软件Excel就能做很多复核工作。比如文章报告某量表得分“48.6 ± 5.2n80”你可以用Excel的随机数生成功能模拟一组同均值、同标准差的数据看看它的最小值和最大值是否落在合理范围内。操作方法是在一个空白列输入公式NORM.INV(RAND(), 48.6, 5.2)然后向下填充80行。这样生成的随机数大致符合正态分布你可以看FREQUENCY分布、最小值、最大值、负值出现的次数。模拟结果如果让你觉得“这个变量在实际临床里不可能出现这么小的离散度”那就是第一层怀疑的佐证。比如心理量表得分理论上应该在0到100之间如果你模拟出的数据出现了大量负值或超过100的值但作者报告的数据范围看起来全在合理区间内这并不说明作者数据真实反而说明真实人群的分布几乎不可能恰好避开所有极端值。审稿时我不会用模拟结果给数据“定罪”但会用模拟来帮自己判断某个统计量的现实合理性。4.2 用R语言做快速的组间差异复算如果你装了R复核速度会更快。下面这段代码可以让你根据论文提供的两组均数、标准差和样本量计算出t值、自由度和p值。把数据换成你正在审的论文即可# 从论文中提取的数据 n1 - 45; mean1 - 52.7; sd1 - 6.4 n2 - 45; mean2 - 49.5; sd2 - 5.9 # 合并标准误 se - sqrt(sd1^2 / n1 sd2^2 / n2) t_stat - (mean1 - mean2) / se # 自由度韦尔奇近似 df - (sd1^2 / n1 sd2^2 / n2)^2 / ((sd1^2 / n1)^2 / (n1 - 1) (sd2^2 / n2)^2 / (n2 - 1)) # 双侧p值 p_value - 2 * pt(-abs(t_stat), df df) t_stat df p_value运行后得到的p值如果和原文报告的大相径庭你就有底气在审稿意见里写出“经使用作者提供的数据复核两组的均数差异与报告结果不一致请作者提供统计分析代码与原始数据”这类要求。R的另一个用途是检查分布形状。比如用rnorm()模拟出与原文同均值、同标准差的数据再用summary()看最小值、最大值或者画一个简单直方图就能看出这个参数设置在真实采样时会出现多少“异常值”。如果模拟数据中出现了临床上不可能的值而原始论文里没有任何异常值记录那审稿人完全有理由怀疑原始数据经过了筛选或改写。4.3 在线计算器与统计补充材料的使用不熟悉R的审稿人也可以用在线t检验计算器把均数、标准差、样本量填进去十秒钟就能得到复算结果。这类工具很多随便搜索“two sample t-test calculator”就能找到关键是要注意选择Welchs t-test还是Students t-test因为两者在方差不等时p值略有差别。为了避免误判我通常两种都算一遍只要论文报告的结果与其中一种方法无法对应就说明需要解释。现在的很多期刊也鼓励作者提交统计补充材料包括分析代码、软件版本、输出清单。如果论文的核心结论完全依赖于某个复杂统计模型而补充材料里却没有代码或过程文件这个缺失本身就是一个值得指出的问题。我的习惯是凡是p值出现异常集中的论文都要在评审意见里明确要求作者补充统计分析文件和原始数据的筛选过程。5. 如果只有十分钟给审稿人的快筛清单5.1 一张表快速过一遍高风险信号下面这张表是我在真正动笔写审稿意见之前会给自己过一遍的清单。不需要精细计算每项看一眼就能对上号检查项怎么检查需要注意的危险信号基线特征表的SD模式把各组SD逐行比对SD高度重复、与均数比例整齐、标准差过小分类变量百分比看是否为整数多个百分比精确到整数位且分布“干净”p值序列分布把所有p值列成一条线集中在0.01~0.05缺乏高p值和极低p值均数、SD、样本量复算用t检验公式反推复算p值与报告值差异巨大误差条标注看图注是否说明SD/SEM未注明、或SEM被当作SD描述样本变异生存曲线形状看台阶结构和CI带宽曲线过度平滑、CI尾部没有增宽森林图亚组CI对比亚组样本量与CI宽度小亚组CI窄得和主分析一致四舍五入偏好看小数位数分布大量数值保留两位且末位集中在0和5列完这张表我已经能在大概十分钟内对一篇稿子的数据面形成基本判断。如果同时命中三项以上我会直接建议编辑要求作者提供原始数据、统计分析代码和病例报告表然后再进入实质性的科学评审。不是所有命中清单的论文都有问题但绝大多数有问题的论文都能在清单上留下痕迹。5.2 拿到可疑信号后的下一步动作如果快筛出了问题我不建议立刻在审稿意见里写“作者涉嫌数据造假”。这种指控措辞太重而且容易给真正严谨但操作失误的作者带来伤害。更合理的做法是把“数据自洽性不足”作为主要问题列出要求作者补充第一原始数据表或可复现的统计代码第二对标准差来源、误差条类型、p值计算方法的澄清第三如果在复核中出现明显不一致请作者逐一解释差异来源。很多情况下作者的回复会暴露问题的根本有人会承认“标准差复制错了列”有人会说“p值是单尾检验但没写清楚”也有人会在补充材料中提供完整的数据集届时复核全部通过。也有少数情况作者直接失联、不再回复这时候编辑通常会启动撤稿程序。我的经验是审稿人最有力的武器不是“指控”而是“提问”——你只要提出清晰、具体、可复算的问题绝大多数真假数据都会露出原形。6. 写在最后审稿人的任务不是当侦探而是当守门员说句掏心窝的话我刚开始审稿时也走过弯路一看到数据可疑就肾上腺素飙升想立刻把作者“绳之以法”。但审得多了我发现这种做法既不明智也不公正。医学研究的数据链很长从病房里的原始记录到统计软件里的数据集再到论文里的表格和图表任何一个环节都可能出错。我要做的是守住统计逻辑与报告透明度的底线而不是扮演福尔摩斯。我的常用做法是在审稿意见里先写“作者报告的数据存在若干不一致之处具体如下”然后用条目把每一个可疑点列出最后请作者提供相应材料加以解释。这个流程既保护了作者的正当权益也尽了审稿人的职责。对一个可疑论文最好的结果不是被扣上“造假”帽子而是通过复核她/他的数据让大家看到真相——即使真相是撤回一篇不严谨的论文。最后分享一条实操经验适用于刚入门的审稿人给自己建一个“审稿复核模板”把所有需要手动计算的小工具写清楚包括t值复算、标准误与标准差的换算、p值分布观察表。坚持每次审稿都走一遍这套流程用不了多长时间你就能练出对数据“水分”的敏感度。这种敏感度不是来自天赋而是来自一次次对数字的较真。
返回列表