千笔-AIWritePaper · https://www.aiwritepaper.com方法章里关于研究对象的那一段常见写法是一句话「按常规纳入与排除标准筛选最终纳入 N 例」。读者看完不知道筛了多少人每一步排掉多少排除的理由能不能复算最终的 N 和流程图上的数字是不是一回事。审稿人如果认真会拿流程图上的人数逐级相减减不回最终样本量这篇稿子的可信度就先打了折扣。这篇延续前面几篇的双版本烟测写法。先用三列表把每一条纳入排除标准落到一个可以打开的产物上再写两个版本对照。A 版是常见的一句带过B 版每一条标准都对应一个人数变化排除原因可以复算时间窗和方法章一致。另外构造三种伪 B它们表面上有数字、有流程图实际上各藏一个问题。脚本和数据都是虚构的放在_w/inclusion-exclusion-ab/。图上排为虚构队列 1200 人的逐条排除链下排为五个版本的烟测结果。目标说明读完你应能独立完成四件事。用三列表把每一条纳入或排除标准对应到写法动作和可核对产物。写出 B 版的研究对象段让人数链能逐级相减回到最终样本量。识别三种伪 B人数加不回、锁定数据后改标准、把探索性亚组写成预注册条款。跑脚本对自己的稿件做一次烟测并把结果存成 CSV。适用与边界适合观察性队列、回顾性病历研究、系统综述的文献筛选、问卷研究的有效样本筛选。只要有「从多少人筛到多少人」的过程这套方法就用得上。不该指望它判断标准本身合不合理。年龄下限定在十八岁还是十六岁结局窗口取十二个月还是二十四个月那是研究设计的问题。脚本只检查你写下来的标准和数字能不能对上。失败含义要分开理解。人数链断了多半是笔误或流程图没更新改掉就行。锁定后改标准就严重得多它意味着结果可能是看过数据之后挑出来的需要在正文里明确说明并做敏感性分析。三列表标准条款写法动作可核对产物人群定义年龄、诊断写明阈值与诊断依据流程图该步排除人数暴露或干预写明最短暴露期与起算点筛查日志中暴露期字段结局窗口写明随访起止与时长方法章与流程图同一窗口排除病种与用药列出具体病种与药物排除原因表数据完整度门槛写明缺失比例阈值缺失统计表与排除人数每一行最后一列都要能被读者打开或复算。写不出产物的条款就是一句结论不是方法。A/B 两版对照A 版原文「研究对象按常规纳入与排除标准筛选最终纳入 808 例。」B 版原文「共筛查 1200 例。排除年龄小于 18 岁者 64 例暴露期不足 6 个月者 151 例结局窗口入组后 12 个月外者 88 例合并慢性肾病者 37 例关键变量缺失超过 20% 者 52 例最终纳入 808 例。全部标准于数据锁定日前在研究方案中登记。」B 版并没有多用华丽的词多出来的只是五个数字、一个时间窗和一句登记说明。这几样东西让读者可以自己验算。烟测结果A 常规一句 问题4 FAIL | 无筛查总数; 无逐条排除人数; 无最终样本量; 流程图无结局窗口 B 可核对 问题0 PASS | 1200 筛查→808 纳入五条可复算 伪B1 人数加不回 问题1 FAIL | 人数链断:1200-392808≠836 伪B2 事后改线 问题2 FAIL | 锁定后改标准:[暴露期9月]; 时间窗不一致:12 个月/18 个月 伪B3 亚组当预注册 问题2 FAIL | 锁定后改标准:[非男性]; 未预注册条款:[性别] CSV rows: 5A 版报了「无最终样本量」是因为脚本读的是结构化字段正文里那个 808 没有出现在流程图数据里。这正是一句话写法的问题数字孤零零地挂在句尾和筛查过程没有任何连接。伪 B1 最常见。流程图改过一次排除条件最终人数更新了中间某一步没更新相减差 28 人。伪 B2 最危险。暴露期从 6 个月改成 9 个月修改日期在数据锁定之后结局窗口也从 12 个月悄悄变成了 18 个月。这两处单独看都能找理由放在一起就很像在调结果。伪 B3 把一个探索性亚组只看男性写成了纳入标准。它的人数链完全对得上所以只靠相减是查不出来的要和预注册条款逐条比对。失败含义与验收表版本问题失败含义修改动作A无人数链读者无法复核补流程图与逐条人数伪B1相减不等流程图未同步从筛查日志重新汇总伪B2锁定后改线结果可能被挑选恢复原标准改动放敏感性分析伪B3条款未登记探索性当验证性移到亚组分析并标注探索性B无可复核保留脚本与 CSV 作为附件伪 B2 改成合规写法长什么样确实需要在锁定后调整标准时正确的做法是公开它不是藏起来。以暴露期为例可以这样写。「主分析沿用方案登记的暴露期不少于 6 个月纳入 808 例。数据锁定后考虑到药物起效时间追加暴露期不少于 9 个月的敏感性分析纳入 726 例该分析为事后决定。」两组结果都报告读者自己判断结论是否稳健。结局窗口同理主分析用登记的 12 个月延长到 18 个月的结果放进补充材料。系统综述的文献筛选也能套用系统综述的筛选流程本质上是同一回事。检索得到多少篇去重后剩多少按题名摘要排除多少全文排除多少并列出原因最终纳入多少。把这几层写进同一种 JSON脚本照样能查人数链和标准修改日期。区别在于预注册的对象换成综述方案修改日期对应的是方案的修订记录。全文排除原因最好细到每一篇至少细到每一类「不符合纳入标准」这种笼统写法在综述里一样站不住。脚本判定逻辑脚本只做五件事。检查筛查总数、逐条人数、最终人数和流程图时间窗是否存在用总数减去各步排除数看是否等于最终人数比较每条标准的修改日期和数据锁定日比较方法章和流程图的时间窗把实际使用的条款和预注册条款求差集。每一项都是几行代码你可以按自己的研究加检查比如排除原因中「其他」的占比是否超过一成。当天最小实验10 分钟把自己稿件的筛查过程整理成脚本里的 JSON 格式筛查总数、每步排除人数、修改日期都填上。5 分钟跑inclusion_exclusion_ab.py看人数链能不能闭合。5 分钟把研究方案里登记的条款列表填进prereg再跑一次确认没有多出来的条款。5 分钟对比方法章和流程图里的结局窗口两处必须一字不差。常见误区「流程图画了就算写了」。流程图里的数字要和正文、表一的样本量三处一致。「排除原因写个其他就行」。其他类超过总排除数的一成就该拆开写。「改标准没关系结果更合理」。改可以但要写明改动时间、理由并保留原标准下的结果。「亚组分析也算纳入标准」。亚组是在纳入之后切分的写进纳入标准会改变研究的解释范围。一份稿件里的三处同步点人数信息至少出现在三个地方摘要、方法章研究对象段、流程图。表一的总样本量算第四处。改任何一处四处都要一起改。实操上最省事的办法是只维护一份筛查日志四处数字都从日志里生成手改任何一处都算违规。脚本里的 JSON 就可以充当这份日志。时间窗也有同样的问题。方法章写「随访 12 个月」流程图写「入组后一年」结果表写「随访期内」三种说法读者要自己判断是不是同一个窗口。统一成同一个写法并在第一次出现时写清起算点。总结纳入与排除标准写得好不好检验办法很朴素读者能不能拿流程图上的数字自己算回最终样本量能不能在研究方案里找到每一条标准的登记记录。三列表把条款落到产物A/B 对照让差距一眼可见三种伪 B 提醒你人数对上了也不一定过关。脚本和 JSON 可以直接复用改字段名就能跑在自己的稿件上。整理筛查日志和方法章的对照时也可以借助千笔-AIWritePaper 把几处数字放在一起核对。