跳转至

16.1   医学临床试验分析

社区诊所里,小率陪家人做随访。柜台上有两盒彩色信封:一组患者会拿到新方案,另一组会拿到标准方案。均哥提醒他:“真正难的不是算一个平均值,而是让两组人尽量可比,再判断差异是不是来自治疗。”

随机对照试验(Randomized Controlled Trial, RCT)就是医学研究里最重要的设计之一。它用随机分组减少偏差,用统计推断衡量疗效的不确定性。

均哥和小率在社区诊所理解随机对照试验

16.1.1   先把疗效问题改写成可比较的两组

临床试验的核心问题通常是:

新治疗是否比对照治疗更有效、更安全?

最基本的比较可以写成:

\[ \Delta = \bar{Y}_{\text{treat}} - \bar{Y}_{\text{control}} \]

其中 \(Y\) 可以是血压下降值、症状评分改善值、复发率或生存时间。随机分组的作用,是让年龄、基础病、生活习惯等因素在两组中尽量平衡。

患者 分组 治疗前评分 治疗后评分 改善值
A 新方案 8 4 4
B 对照 7 5 2
C 新方案 6 3 3

随机对照试验流程讲解图

16.1.2   随机化之前先定义终点

临床试验最怕“做完以后再挑好看的结果”。所以在正式开始前,研究方案里要写清楚:

  • 主要终点:最核心的疗效指标,例如 12 周后的症状评分改善。
  • 次要终点:辅助指标,例如复发率、生活质量评分、不良反应。
  • 分析人群:按意向治疗(Intention-to-Treat, ITT)还是按实际完成治疗者分析。
  • 样本量:预期效应多大、允许多大误差、希望检验有多大把握。

样本量不是越大越好,而是在伦理、成本和统计功效之间平衡。太小看不出真实疗效,太大可能把微小但无临床意义的差异也做成“显著”。

16.1.3   差异要同时看大小和不确定性

如果结局是连续变量,可以用两组均值差的置信区间:

\[ (\bar{Y}_1-\bar{Y}_0) \pm t_{\alpha/2}\sqrt{\frac{s_1^2}{n_1}+\frac{s_0^2}{n_0}} \]

如果结局是“是否康复”,常比较风险差、相对风险或优势比。若关注“多久后复发/死亡/流失”,就进入生存分析,本章 16.4 会展开。

临床显著不等于统计显著

p 值小只说明在零效应假设下观察到这种差异不太常见;它不自动说明疗效足够大、足够安全、足够值得推广。

16.1.4   脱落和缺失会改变结论

临床试验中,患者可能中途退出、忘记随访、换药或发生不良反应。处理这些情况时,要区分两种分析思路:

分析方式 怎么做 优点 风险
ITT 按最初随机分组分析 保留随机化优势,更接近真实推广 治疗依从性差时效应被稀释
Per-protocol 只分析按方案完成者 更接近“按要求治疗”的效果 可能破坏随机化,产生选择偏差

均哥的小提醒

试验报告里不要只找“显著”的子组。子组越多,偶然显著的机会越大。若子组分析不是事先计划好的,应当标注为探索性结果。

16.1.5   用模拟数据做一次两组检验

import numpy as np
from scipy import stats

rng = np.random.default_rng(42)

new_plan = rng.normal(loc=4.2, scale=1.4, size=60)
standard = rng.normal(loc=3.3, scale=1.5, size=60)

t_stat, p_value = stats.ttest_ind(new_plan, standard, equal_var=False)
diff = new_plan.mean() - standard.mean()

print("mean difference:", round(diff, 3))
print("t:", round(t_stat, 3))
print("p:", round(p_value, 4))

这段代码只演示推断逻辑。真实临床试验还要事先注册方案、定义主要终点、处理缺失与脱落、监测不良反应,并遵守伦理审查。

16.1.6   把结果写成人能读懂的话

一份合格的试验摘要,不应该只写“p=0.03”。更好的写法是:

新方案组平均改善 4.2 分,对照组平均改善 3.3 分,均值差为 0.9 分。95% 置信区间为 0.2 到 1.6 分,提示新方案可能带来额外改善;但仍需结合不良反应、费用和患者可接受性判断是否推广。

这句话同时交代了效应方向、效应大小、不确定性和决策边界。

小率的笔记本

医学试验先靠设计减少偏差,再靠统计量化不确定性。结论不能只看 p 值,还要看效应大小、置信区间、安全性、样本代表性和临床意义。