The V Lab

如何使用本教程

本教程把流行病学研究设计看作一条完整的决策链,而不是一张研究类型名词表:

要支持什么决策? →\rightarrow 目标人群与目标效应是什么? →\rightarrow 需要怎样的比较? →\rightarrow 怎样获得具有信息量且合乎伦理的样本? →\rightarrow 如何测量、分析和报告?

完成学习后,你应当能够:

  1. 区分描述性、分析性、观察性、实验性与准实验性研究,并识别常见子类型;
  2. 用 PECO/PICO、目标试验和 estimand(目标效应)定义可回答的研究问题;
  3. 根据发生率、罕见结局、潜伏期、资源、伦理和偏倚风险选择设计;
  4. 明确目标人群、来源人群、抽样框、抽中样本、入组人群和分析样本之间的关系;
  5. 选择概率或非概率抽样方法,规划招募、追访、非应答处理和权重;
  6. 计算常见的初步样本量,并纳入有限总体、聚类设计效应与失访膨胀;
  7. 写出研究方案、数据管理计划与统计分析计划(SAP);
  8. 用透明、可复现且保护参与者权益的方式报告研究。

所有 R 代码均可依次运行,不需要额外分析包。公式给出的是教学用起点;涉及复杂抽样、生存结局、重复测量、多重终点、自适应设计或监管决策时,应由抽样/生物统计专家复核,并用模拟评估操作特征。

本教程不替代研究伦理委员会(IRB/REB)、隐私办公室、原住民或社区数据治理要求、临床试验监管规范及当地法律。只有在适用的伦理与监管批准、有效知情同意或获准的同意豁免,以及相应法律授权允许的范围内,才能接触、链接或二次使用个体健康数据。

一、从决策问题到可估计问题

1.1 先写“为什么”,再写“用什么方法”

设计的目的不是给数据贴标签,而是让所得证据能支持预先说明的决策。例如:

  • 负担决策:某城市成年人目前高血压患病率是多少?
  • 病因决策:长期夜班是否增加新发抑郁症状的风险?
  • 干预决策:短信提醒相对于常规照护能否提高疫苗完成率?
  • 诊断决策:快速检测在拟使用人群中的灵敏度和特异度如何?
  • 政策决策:无烟法规实施后,哮喘住院是否超出原趋势地下降?

“比较 A 与 B 是否有差异”仍不够精确。研究者要说明人群、处理/暴露策略、结局、时间、汇总指标与如何处理干预后事件。

1.2 PECO/PICO(T) 与 estimand

元素 要回答的问题 示例:疫苗提醒试验
P(Population) 结论适用于谁? 尚未完成两剂疫苗的 18–64 岁门诊患者
E/I(Exposure/Intervention) 比较的暴露或策略是什么? 每周一次、共四周的短信提醒
C(Comparator) 与什么比较? 常规通知
O(Outcome) 结局怎样定义和测量? 随机后 90 天内完成第二剂
T(Time) 起点、随访窗和宽限期? 随机日起 90 天

Estimand(目标效应)至少要明确:

  1. 人群:纳入/排除标准和推广范围;
  2. 处理或暴露对比:例如“分配提醒”或“实际收到提醒”;
  3. 结局变量:二分类、连续、时间至事件或计数;
  4. 人群层面的汇总:风险差、风险比、均值差、率比等;
  5. 干预后事件策略:失访、交叉、停药、死亡等如何进入问题定义。

例如,意向治疗效应(ITT)比较“被随机分配到两种策略”的结果,不因依从性改变分组;符合方案效应则试图比较遵循策略时的结果,通常需要更强假设和专门方法。

1.3 目标试验思维

即使研究使用观察数据,也可以先写出理想的目标试验(target trial):资格标准、处理策略、分配程序、随访起点、结局、因果对比和分析方法。随后说明现实数据怎样模拟这些要素。这样能发现常见错误:

  • 暴露定义时间晚于随访起点,造成不死时间偏倚;
  • 用未来信息选择“基线”参与者;
  • 比较组的资格条件或日历时间不同;
  • 把随访中介当作基线混杂因素调整;
  • 结局检测强度因暴露而异。

一句实用检查:对每位参与者,你能否指出同一个清晰的“时间零点”,并在该时点同时确定资格、比较策略和随访开始?

二、研究设计的完整分类

设计可从多个相互独立的维度描述。不要只说“回顾性研究”,而应说清楚抽样依据、时间方向、比较方式、数据来源和分析单位。

2.1 关键维度

维度 常见选项 为什么重要
研究者是否分配暴露 观察性 / 实验性 决定因果解释、伦理和执行要求
主要抽样依据 按人群 / 按暴露 / 按结局 区分队列与病例对照的核心
时间结构 单一时点 / 纵向 / 重复横断面 决定时序、发病率与趋势能否估计
数据获取方向 前瞻 / 回顾 / 双向 影响测量控制、成本与缺失;不是设计本身
分配单位 个体 / 家庭 / 诊所 / 社区 决定聚类、污染和有效样本量
分析单位 个体 / 群体 / 事件 / 地区-时期 决定可做的推断以及生态谬误风险
研究目的 描述 / 病因 / 预测 / 诊断 / 评价 决定目标指标和验证策略

2.2 描述性研究

病例报告与病例系列

详细描述一个或一组异常病例,适合发现新综合征、罕见不良事件和提出假设。通常没有明确来源人群分母或并行对照,因此不能估计风险,也不能证明因果。

生态研究

暴露和结局以国家、地区、学校或时期等群体单位汇总。适合政策、环境暴露和快速假设生成,但群体关联不能直接解释为个体关联,这称为生态谬误。还需警惕地区构成差异、空间相关和时间趋势混杂。

横断面调查

在一个定义时间窗内测量暴露和结局,最适合估计患病率、行为或服务覆盖率。若暴露与结局同时测量,通常难确定先后顺序;病程长短也会影响现患病例被抽中的概率(患病率-发病率偏倚)。重复横断面可比较人群趋势,但不是追踪同一批个体。

2.3 观察性分析研究

队列研究

从处于结局风险中的人群开始,按暴露或其他特征比较未来结局。可估计风险、率、风险差、风险比及时间至事件。

  • 前瞻队列:入组后按计划向前测量;测量控制好但可能昂贵、耗时。
  • 回顾队列:用既有记录重建基线与随访;更快,但受记录目的、完整性和共同可观测时间限制。
  • 双向队列:历史数据建立早期随访,随后继续前瞻追踪。
  • 开放/动态队列:成员可进入退出,通常以人时为分母。

优势是时序清楚、可研究多个结局;局限是罕见结局需要很大样本,长期研究易失访,暴露与混杂会随时间变化。

病例对照研究

先从同一来源人群识别病例,再抽取代表病例发生时该来源人群暴露分布的对照,回看既往暴露。特别适合罕见结局或长潜伏期。

关键不是“病例有病、对照没病”,而是:如果某位对照在研究期间成为病例,他/她应有资格进入病例组。 对照应按来源人群抽取机制选择,而不是单纯找“健康人”。

  • 病例-对照(传统):可用累计抽样、病例密度抽样等;优势比的解释取决于抽样方案。
  • 巢式病例对照:在既定队列的每个病例发生时,从仍处于风险者中抽对照;密度抽样 OR 可估计率比,不要求结局罕见。
  • 病例-队列:从基线队列抽一个子队列,可服务多个结局;分析需要相应权重和方差方法。

匹配用于提高效率或控制强混杂,但匹配变量必须在分析中正确处理;对潜在中介或与暴露高度相关但非混杂的变量过度匹配,可能降低效率或引入选择问题。

分析性横断面研究

在横断面样本中比较暴露组的结局患病率,可估计患病率比或患病率差。它可以检验关联,但对时序、选择和生存偏倚要保持克制。

2.4 实验性研究

个体随机对照试验(RCT)

随机化使已知和未知基线预后因素在期望上平衡;分配隐藏防止招募时预知下一组;盲法减少实施和结局测量差异。

常见结构:

  • 平行组:每人接受一种策略并平行随访;最常见。
  • 交叉试验:每人按随机顺序接受多种策略;适合稳定慢性状态、短效且可洗脱干预,不适合治愈性处理或持久效应。
  • 析因试验:同时随机两个或更多干预,例如 2×22\times2;可高效估计主效应,但需考虑交互与样本量。
  • 非劣效/等效试验:目标不是“有无差异”,而是排除超过预设临床界值的损失;界值、依从性和 ITT/符合方案分析都很关键。
  • 实用性试验:在常规服务条件下评估策略效果,强调真实世界可实施性和广泛资格。

整群随机与阶梯楔形试验

当干预在诊所、学校或社区层面实施,或个体随机会污染时,可随机整群。群内结果相关,需按群数和组内相关系数规划,并在分析中处理聚类。

阶梯楔形设计让群按随机顺序从对照转入干预,最终所有群接受干预。它并不自动更符合伦理;时间趋势与干预效应不可混淆、模型假设和实施能力必须预先评估。

2.5 准实验与自然实验

当随机化不可行时,设计本身仍可创建更可信的反事实比较:

  • 中断时间序列(ITS):用政策前后多个时间点估计水平和斜率变化;需处理季节性、自相关、同期事件和测量变化。
  • 有对照 ITS:加入未受政策影响但趋势可比的系列,增强对共同冲击的控制。
  • 双重差分(DiD):比较干预组与对照组前后变化差;核心是无干预时的平行趋势等假设,事件研究图可检查预趋势但不能证明假设。
  • 回归不连续(RD):分配由连续阈值决定,比较阈值附近个体;估计局部效应,需检查操纵、连续性和带宽敏感性。
  • 工具变量/鼓励设计:工具必须与暴露相关,并满足工具与结局之间的可交换性/独立性以及不经暴露影响结局的排除限制;这些条件往往很强且不可直接验证。若要把结果解释为通常的局部平均处理效应,还需单调性等附加假设。

简单的“干预前一个点 vs 后一个点”很难区分政策效应、自然趋势、回归均值与同期变化,通常不应被称为有说服力的准实验。

2.6 其他常见研究类型

类型 主要问题 核心设计要点
诊断准确性研究 指标检测能否识别目标状态? 连续/代表性疑似人群、独立盲法判读、所有人接受适当参照标准
预后研究 某起点后发生什么? 明确共同时间零点、完整随访、校准与区分度、外部验证
预测模型研究 能否预测个体未来风险? 区分开发与验证;避免按“每变量 10 事件”机械规划;评估过拟合
监测研究 人群事件随时间怎样变化? 稳定病例定义、报告完整性、时效性、分母和系统变更
暴发调查 病因与控制措施是什么? 病例定义、主动搜索、描述流行曲线、假设检验与即时控制并行
定性研究 人们如何理解、经历或实施? 有目的抽样、信息充分性、反思性、可信度与情境描述
混合方法 数量与机制如何结合? 预先说明顺序、权重和整合点,而非简单并列两类数据
系统综述/荟萃分析 全部相关证据总体说明什么? 预注册问题、完整检索、双人筛选、偏倚评估、异质性和发表偏倚
常规数据/EHR 研究 既有数据能回答什么? 数据生成机制、编码变化、可观测性、链接误差与可迁移性

三、怎样选择合适的设计

3.1 设计选择矩阵

研究条件 通常优先考虑 不足与补救
估计某时点患病率 概率抽样横断面调查 非应答、覆盖误差;用追访、权重与敏感性分析
罕见结局、长潜伏期 病例对照 对照选择、回忆偏倚;使用登记病例与客观既往记录
罕见暴露、多个结局 队列 结局数可能不足;扩大人时或链接登记系统
干预可分配且存在不确定性 RCT 成本、依从和推广性;采用实用性流程与代表性场点
群体政策在明确时间实施 有对照 ITS / DiD 同期事件、趋势假设;增加对照系列和安慰剂分析
诊断工具评价 横断式诊断准确性队列 谱偏倚、验证偏倚;连续入组并统一参照标准
快速发现新信号 病例系列/监测 缺少对照;明确仅用于信号生成并启动分析研究
机制与实施情境 定性或混合方法 转移性依赖情境;透明说明抽样、反思性和整合逻辑

3.2 六个实际筛选问题

  1. 需要描述还是因果比较? 描述性问题不必强行套因果模型。
  2. 结局或暴露是否罕见? 罕见结局倾向病例对照,罕见暴露倾向暴露队列。
  3. 时序能否建立? 病因问题需确保暴露先于结局。
  4. 干预可否合乎伦理地随机? 真正的临床/政策不确定性(equipoise)是关键。
  5. 数据生成过程能否观察? “数据库里有变量”不等于变量有效、完整或在所有人中同样可见。
  6. 资源和时间允许什么? 在可行设计内最大化效度,而不是选择无法完成的理想方案。

3.3 设计不是分析模型

回归调整不能修复没有共同来源人群的对照、错误的时间零点、严重差异性测量或完全未覆盖的人群。反过来,一个强设计也需要与抽样、匹配、聚类和删失相匹配的分析。

四、从目标人群到分析样本

4.1 六层人群

  1. 目标人群(target population):希望结论推广到的人群;
  2. 来源人群(source population):实际能够产生研究参与者和病例的人群;
  3. 抽样框(sampling frame):可被抽取单位的可操作列表或机制;
  4. 抽中/邀请样本(selected or invited sample):依照抽样规则被抽中并尝试联系的人;
  5. 入组研究人群(enrolled study population):确认符合资格并同意或依法纳入研究的人;
  6. 分析样本(analytic sample):满足预设分析规则且具有所需数据的人。

例:目标是某省全部成年居民,来源人群可能是有省级医保登记且过去一年居住者,抽样框是去重后的登记名单,抽中样本是随机选出的登记者,入组人群是确认资格并同意问卷者,分析样本是按方案取得有效血压测量者。把这些集合分开,才能分别计算覆盖、联系、应答、留存和进入分析的比例;每一步都可能造成覆盖、选择或缺失偏倚。

4.2 抽样单位、观察单位与分析单位

  • 抽样单位可能是学校;
  • 观察单位可能是学校内学生;
  • 干预分配单位可能是学校;
  • 分析结局可能在学生层面。

这些层级不一致时,样本量和标准误必须考虑聚类。只有 4 所学校、每校 500 名学生,关于学校层面干预的信息量仍主要来自 4 个群,而不是 2,000 个彼此独立的人。

4.3 构建和审计抽样框

在抽样前记录:

  • 纳入范围、快照日期、更新频率和记录所有者;
  • 唯一标识与去重规则;
  • 无资格、死亡、迁出或重复记录的处理;
  • 未被覆盖群体及其可能与结局的关系;
  • 联系方式的完整性与允许用途;
  • 按年龄、地区等与可信总体边际分布比较;
  • 每次清理、排除和抽样的随机种子与审计日志;若使用备用样本,须预先规定规则,不得为拒访者临时寻找方便替代者。

五、概率抽样:让入样概率可知

概率抽样要求每个抽样单位有已知且大于零的入样概率 πi\pi_i。基础权重为 wi=1/πiw_i=1/\pi_i。概率机制支持设计型总体推断,但仍会受框覆盖、非应答和测量误差影响。

5.1 简单随机抽样(SRS)

从 NN 个单位无放回等概率抽 nn 个,每人的 πi=n/N\pi_i=n/N,权重 N/nN/n。适合完整且规模可管理的抽样框。

set.seed(1001)

frame <- data.frame(
  id = sprintf("P%04d", 1:1200),
  region = sample(c("北", "中", "南"), 1200, replace = TRUE,
                  prob = c(0.25, 0.45, 0.30)),
  age = sample(18:85, 1200, replace = TRUE)
)

srs_index <- sample.int(nrow(frame), size = 120, replace = FALSE)
srs <- frame[srs_index, ]
srs$inclusion_probability <- 120 / 1200
srs$base_weight <- 1 / srs$inclusion_probability

head(srs)
table(srs$region)
##
## 中 北 南
## 55 27 38

使用稳定的 ID 保存抽样结果,不要只保存行号;抽样框排序或更新后,行号可能指向不同的人。

5.2 系统抽样

随机选择起点后,每隔 k=N/nk=N/n 个单位抽一个。执行简单并能在有序名单上分散样本,但若名单存在与间隔同步的周期结构会偏倚。必须随机起点,不能总从第一条开始。

set.seed(1002)

N <- 1200
n <- 120
interval <- N / n
random_start <- sample(seq_len(interval), size = 1)
systematic_index <- seq(from = random_start, by = interval, length.out = n)
systematic_sample <- frame[systematic_index, ]

c(random_start = random_start, interval = interval,
  selected = nrow(systematic_sample))
## random_start     interval     selected
##            9           10          120

若 N/nN/n 不是整数,应使用分数间隔或适当的系统 PPS 算法,不能简单四舍五入后假装等概率。

5.3 分层抽样

先按地区、年龄或风险层分组,再在每层独立抽样。分层能确保小但重要群体有样本,并在层内同质时提高精度。

  • 比例分配:nh=nNh/Nn_h=nN_h/N,通常自加权;
  • 不等比例/过度抽样:为小群体分配更多样本,分析需用权重;
  • Neyman 分配:nh∝NhShn_h\propto N_hS_h,把样本更多给规模大且变异大的层;成本不同可进一步调整。
set.seed(1003)

# 演示对较小的“北”层过度抽样。
allocation <- c("北" = 60, "中" = 60, "南" = 60)
frame_by_region <- split(frame, frame$region)

stratified_parts <- lapply(names(allocation), function(h) {
  population_h <- frame_by_region[[h]]
  chosen <- sample.int(nrow(population_h), allocation[[h]], replace = FALSE)
  out <- population_h[chosen, ]
  out$N_h <- nrow(population_h)
  out$n_h <- allocation[[h]]
  out$base_weight <- out$N_h / out$n_h
  out
})

stratified_sample <- do.call(rbind, stratified_parts)
row.names(stratified_sample) <- NULL

with(stratified_sample,
     unique(data.frame(region, N_h, n_h, base_weight)))

5.4 整群与多阶段抽样

整群抽样先抽学校、社区、家庭或诊所,再纳入群内全部或部分个体。它降低旅行和建框成本,但同群个体相似会降低有效样本量。

多阶段例子:按省分层 →\rightarrow 以人口规模概率抽社区 →\rightarrow 每社区系统抽家庭 →\rightarrow 每户随机抽一名成年人。每阶段概率相乘:

πi=πcluster×πhousehold∣cluster×πperson∣household,wi=1/πi\pi_i=\pi_{\mathrm{cluster}}\times \pi_{\mathrm{household}\mid\mathrm{cluster}}\times \pi_{\mathrm{person}\mid\mathrm{household}},\qquad w_i=1/\pi_i

以规模成比例概率(PPS)抽取初级单位可减少大小不等群造成的权重变异,但无放回 PPS 的精确入样概率和方差估计应使用专门抽样软件。

set.seed(1004)

clinic_sizes <- sample(45:140, 24, replace = TRUE)
clinic_frame <- data.frame(
  clinic = sprintf("C%02d", 1:24),
  eligible_patients = clinic_sizes
)

# 等概率抽 6 家诊所,再在每家简单随机抽最多 20 人。
selected_clinics <- clinic_frame[
  sample.int(nrow(clinic_frame), 6, replace = FALSE),
]
selected_clinics$within_clinic_n <- pmin(20, selected_clinics$eligible_patients)
selected_clinics$pi_clinic <- 6 / 24
selected_clinics$pi_person_given_clinic <-
  selected_clinics$within_clinic_n / selected_clinics$eligible_patients
selected_clinics$overall_pi <-
  selected_clinics$pi_clinic * selected_clinics$pi_person_given_clinic
selected_clinics$base_weight <- 1 / selected_clinics$overall_pi

selected_clinics

5.5 两阶段随机抽取一名家庭成员

若家庭等概率入样、再从每户随机选一名成年人,则大家庭中的个人条件入样概率更小;权重必须包含家庭内选择概率 1/Mj1/M_j。让“最先接电话的人”参加不是户内随机抽样。

六、非概率抽样:何时可用、不能声称什么

非概率样本中个体入样概率未知,传统抽样误差和总体推广不能仅靠大样本保证。它仍可用于可行性、机制探索、难接触人群、定性研究或内部比较,但必须透明说明限制。

方法 做法 适用情形 主要风险
便利抽样 招募容易接触者 试点、流程测试 严重自选与覆盖偏倚
连续入组 一段时间纳入所有符合者 临床诊断/预后研究 机构与就诊选择;需记录漏纳
配额抽样 按已知特征填满配额 快速市场/意见调查 配额内仍非随机,未测因素不平衡
有目的抽样 选取信息丰富、最大差异或关键案例 定性研究、实施研究 不以统计代表性为目标
滚雪球抽样 参与者推荐参与者 隐匿或难接触人群 网络同质性、种子依赖
受访者驱动抽样(RDS) 带限额的同伴招募并记录网络规模 某些难接触人群 依赖网络、招募与报告假设;估计敏感
志愿网络面板 在线邀请自愿者 快速重复测量 数字鸿沟、职业答题者、自选

“样本在人口学边际上看起来相似”不等于所有与结局有关的选择因素都已平衡。后分层和倾向加权可能改善已测变量差异,无法自动修复未测选择或完全没有覆盖概率的人群。

七、招募、非应答与留存

7.1 招募方案的必要元素

  • 筛选路径:谁在何时依据什么资料判断资格;
  • 接触方式:信件、电话、现场或电子邀请,以及次数、间隔和时段;
  • 统一材料:不同语言、无障碍格式和健康素养水平;
  • 同意流程:能力评估、翻译、代理同意、撤回与再次同意;
  • 补偿原则:补偿时间与成本,避免对脆弱人群造成不当影响;
  • 隐私保护:最少披露敏感主题,使用批准渠道,不在语音留言泄露诊断;
  • 拒绝与失联代码:区分无资格、无法联系、拒绝、语言障碍和其他原因;
  • 公平监测:按预设群体查看覆盖、邀请、同意和完成率,不在结果已知后任意调整。

7.2 画出参与者流程

recruitment <- data.frame(
  stage = c("抽样框记录", "抽中", "确认符合资格", "同意参加",
            "完成基线", "完成 12 月随访", "进入主要分析"),
  n = c(5200, 900, 760, 612, 598, 521, 509)
)
recruitment$proportion_from_previous_stage <-
  c(NA, recruitment$n[-1] / recruitment$n[-nrow(recruitment)])
recruitment$proportion_of_sampled <-
  c(NA, recruitment$n[-1] / recruitment$n[2])

recruitment

分母必须与报告术语匹配:联系率、合作率、应答率和留存率不是同一指标。调查项目可采用 AAPOR 等标准定义;试验按 CONSORT 流程图报告筛选、随机、随访与分析。

7.3 降低非应答,而不是只在分析时补救

  1. 让邀请来自可信组织并清楚解释价值;
  2. 缩短不必要问卷,提供多语言和多模式选择;
  3. 在不同星期和时段重复联系,但遵守停止联系要求;
  4. 使用合适、预先批准的补偿;
  5. 记录每次联系和最终状态;
  6. 用抽样框变量比较应答者与非应答者;
  7. 预先规划非应答权重、校准和敏感性分析。

7.4 权重的构成

常见最终权重可写为:

wi=wibase×ainonresponse×gicalibrationw_i=w_i^{base}\times a_i^{nonresponse}\times g_i^{calibration}

  • 基础权重反映抽样概率;
  • 非应答调整在合理的同质调整单元或应答模型内补偿;
  • 校准使加权样本与可信总体边际一致;
  • 极端权重可截尾以改善方差,但会引入偏倚,规则和敏感性分析应预设。

加权、分层和聚类必须同时进入方差估计。把权重交给普通 lm() 或只复制高权重记录,并不能得到正确的设计型标准误。

7.5 分层样本的加权患病率示例

下面创建一个有限总体,故意对三个地区各抽相同人数。简单样本均值会把三个地区各算三分之一;设计权重恢复各地区在总体中的比例。

set.seed(1005)

population <- data.frame(
  id = 1:6000,
  region = rep(c("北", "中", "南"), times = c(1200, 3000, 1800))
)
region_risk <- c("北" = 0.08, "中" = 0.15, "南" = 0.24)
population$outcome <- rbinom(
  nrow(population), 1, prob = region_risk[population$region]
)

sample_parts <- lapply(split(population, population$region), function(d) {
  d[sample.int(nrow(d), 180), ]
})
survey_sample <- do.call(rbind, sample_parts)
row.names(survey_sample) <- NULL

Nh <- table(population$region)
nh <- table(survey_sample$region)
survey_sample$weight <-
  as.numeric(Nh[survey_sample$region] / nh[survey_sample$region])

unweighted <- mean(survey_sample$outcome)
weighted <- with(survey_sample, sum(weight * outcome) / sum(weight))
truth <- mean(population$outcome)

c(unweighted_sample = unweighted,
  design_weighted = weighted,
  finite_population_truth = truth)
##       unweighted_sample         design_weighted finite_population_truth
##                  0.1389                  0.1422                  0.1635

可在仅用于教学的 SRS 近似下计算权重有效样本量:

neff,w=(∑iwi)2∑iwi2n_{eff,w}=\frac{(\sum_iw_i)^2}{\sum_iw_i^2}

with(survey_sample, {
  c(actual_n = length(weight),
    weight_effective_n = sum(weight)^2 / sum(weight^2),
    min_weight = min(weight),
    max_weight = max(weight))
})
##           actual_n weight_effective_n         min_weight         max_weight
##            540.000            473.684              6.667             16.667

这不是完整的复杂抽样方差。正式分析应使用能表示 strata、cluster、有限总体校正和权重的调查分析软件,并明确单单位层与重复权重的处理。

八、样本量与精度规划

8.1 样本量不是单一公式的输出

样本量规划需要同时说明:

  • 主要 estimand、检验方向和显著性水平;
  • 具有决策意义的最小效应或目标精度;
  • 基线风险、标准差、组内相关或事件率的依据与不确定性;
  • 分配比例、有限总体、聚类、重复测量和权重变异;
  • 失访、拒绝、无资格、交叉与缺失;
  • 多个主要终点、期中分析或多重比较;
  • 实际可用群数、招募速度、预算和伦理负担。

最好对乐观、中间、保守场景做敏感性表,而不是报告一个虚假精确的整数。

8.2 估计单个比例

在 SRS、大样本正态近似下,为使双侧 (1−α)(1-\alpha) 置信区间半宽约为 dd:

n0=z1−α/22p(1−p)d2n_0=\frac{z_{1-\alpha/2}^2p(1-p)}{d^2}

若总体有限且无放回:

nFPC=Nn0N+n0−1n_{FPC}=\frac{Nn_0}{N+n_0-1}

再考虑设计效应 DEFFDEFF 和预期有效应答率 rr:

ninvite=⌈nFPC×DEFFr⌉n_{invite}=\left\lceil\frac{n_{FPC}\times DEFF}{r}\right\rceil

若没有可信的 pp,取 p=0.5p=0.5 给出最大方差,但仍应展示其他合理情景。

n_prevalence <- function(p = 0.5, margin = 0.05, confidence = 0.95,
                         population_size = Inf, design_effect = 1,
                         usable_response = 1) {
  stopifnot(length(p) == 1L, is.finite(p), p > 0, p < 1,
            length(margin) == 1L, is.finite(margin), margin > 0,
            length(confidence) == 1L, is.finite(confidence),
            confidence > 0, confidence < 1,
            length(population_size) == 1L,
            population_size == Inf ||
              (is.finite(population_size) && population_size >= 1 &&
                 population_size == floor(population_size)),
            length(design_effect) == 1L, is.finite(design_effect),
            design_effect > 0,
            length(usable_response) == 1L, is.finite(usable_response),
            usable_response > 0, usable_response <= 1)
  z <- qnorm(1 - (1 - confidence) / 2)
  n0 <- z^2 * p * (1 - p) / margin^2
  n_fpc <- if (is.finite(population_size)) {
    population_size * n0 / (population_size + n0 - 1)
  } else {
    n0
  }
  required_invitations <- ceiling(n_fpc * design_effect / usable_response)
  data.frame(
    srs_required_complete = ceiling(n_fpc),
    required_invitations = required_invitations,
    exceeds_sampling_frame = is.finite(population_size) &&
      required_invitations > population_size,
    assumptions = sprintf("p=%.2f, d=%.3f, DEFF=%.2f, usable=%.2f",
                          p, margin, design_effect, usable_response)
  )
}

n_prevalence(p = 0.20, margin = 0.03,
             population_size = 10000,
             design_effect = 1.5, usable_response = 0.75)

这里的 usable_response 应包含预期的无资格、拒绝和无法使用记录,且不能把一个阶段的 80% 错当作总体 80%。若资格 90%、同意 70%、完成 90%,总比例是 0.9×0.7×0.9=56.7%0.9\times0.7\times0.9=56.7\%。分层等设计有时可使 DEFF<1DEFF<1,因此函数接受任意正设计效应;若 exceeds_sampling_frame 为 TRUE,说明当前精度、应答与设计假设要求邀请的人数超过可用抽样框,不能靠抽取不存在的单位解决,应重新评估精度、设计、覆盖或实施方案。

8.3 比较两个独立比例

对等分配的近似样本量常由两比例正态近似得到。下面函数还允许实验组与对照组样本比 k=n1/n0k=n_1/n_0。p1−p0p_1-p_0 应来自临床/公共卫生最小重要差异,而不是直接采用小型先导研究的乐观点估计。

n_two_proportions <- function(p0, p1, allocation_ratio = 1,
                              alpha = 0.05, power = 0.80) {
  stopifnot(p0 > 0, p0 < 1, p1 > 0, p1 < 1,
            allocation_ratio > 0, alpha > 0, alpha < 1,
            power > 0, power < 1, p0 != p1)
  k <- allocation_ratio
  p_bar <- (p0 + k * p1) / (1 + k)
  z_alpha <- qnorm(1 - alpha / 2)
  z_power <- qnorm(power)
  null_variance_factor <- p_bar * (1 - p_bar) * (1 + 1 / k)
  alt_variance_factor <- p0 * (1 - p0) + p1 * (1 - p1) / k
  n0 <- ((z_alpha * sqrt(null_variance_factor) +
          z_power * sqrt(alt_variance_factor)) / abs(p1 - p0))^2
  n1 <- k * n0
  data.frame(control = ceiling(n0), intervention = ceiling(n1),
             total = ceiling(n0) + ceiling(n1))
}

n_two_proportions(p0 = 0.30, p1 = 0.22,
                  allocation_ratio = 1, power = 0.90)

对基线风险 30%、希望检出绝对下降 8 个百分点的试验,函数给出每组需要的可分析个体数。随后应按聚类、失访和不依从对真正目标效应的影响调整,而不是机械加 10%。

8.4 比较两个均值

在等方差、等分配、独立观察的近似下,每组:

n≈2(z1−α/2+z1−β)2σ2Δ2n\approx\frac{2(z_{1-\alpha/2}+z_{1-\beta})^2\sigma^2}{\Delta^2}

n_two_means <- function(sd, difference, alpha = 0.05, power = 0.80) {
  stopifnot(sd > 0, difference != 0, alpha > 0, alpha < 1,
            power > 0, power < 1)
  z_alpha <- qnorm(1 - alpha / 2)
  z_power <- qnorm(power)
  per_group <- 2 * (z_alpha + z_power)^2 * sd^2 / difference^2
  ceiling(per_group)
}

c(per_group = n_two_means(sd = 12, difference = 5, power = 0.90),
  standardized_difference = 5 / 12)
##               per_group standardized_difference
##                122.0000                  0.4167

8.5 病例对照研究

给定对照组暴露比例 p0p_0 和期望检出的优势比 OROR,可换算病例组预期暴露比例:

p1=OR×p01−p0+OR×p0p_1=\frac{OR\times p_0}{1-p_0+OR\times p_0}

再使用两独立比例公式。对照:病例超过约 4:1 后,新增对照的边际效率通常很小;具体仍取决于成本、匹配和分析。

n_case_control <- function(control_exposure, odds_ratio,
                           controls_per_case = 1,
                           alpha = 0.05, power = 0.80) {
  p0 <- control_exposure
  p1 <- odds_ratio * p0 / (1 - p0 + odds_ratio * p0)
  # n1/n0 在通用函数中;这里 1=病例,0=对照。
  result <- n_two_proportions(
    p0 = p0, p1 = p1,
    allocation_ratio = 1 / controls_per_case,
    alpha = alpha, power = power
  )
  names(result)[1:2] <- c("controls", "cases")
  cbind(result, assumed_case_exposure = round(p1, 3))
}

n_case_control(control_exposure = 0.20, odds_ratio = 1.75,
               controls_per_case = 2, power = 0.90)

这是假定独立、未匹配、无测量误差的近似。匹配对设计的影响取决于病例-对照对内暴露不一致概率,不能用这个函数直接声称足够把握度。

8.6 聚类设计效应

若每群平均 mm 人、组内相关系数 ρ\rho(ICC)近似相同:

DEFF=1+(m−1)ρDEFF=1+(m-1)\rho

群大小不等时,一个常用近似为:

DEFF≈1+{[1+CVm2]m‾−1}ρDEFF\approx1+\{[1+CV_m^2]\bar m-1\}\rho

其中 CVmCV_m 是群大小变异系数。

cluster_design_effect <- function(mean_cluster_size, icc,
                                  cluster_size_cv = 0) {
  stopifnot(mean_cluster_size >= 1, icc >= 0, icc < 1,
            cluster_size_cv >= 0)
  1 + (((1 + cluster_size_cv^2) * mean_cluster_size) - 1) * icc
}

deff_equal <- cluster_design_effect(30, icc = 0.03)
deff_unequal <- cluster_design_effect(30, icc = 0.03,
                                      cluster_size_cv = 0.50)

c(equal_cluster_sizes = deff_equal,
  unequal_cluster_sizes = deff_unequal,
  individual_equivalent_of_600_people = 600 / deff_unequal)
##                 equal_cluster_sizes               unequal_cluster_sizes
##                               1.870                               2.095
## individual_equivalent_of_600_people
##                             286.396

整群试验不能只把个体样本量乘 DEFF 后随意决定群数。自由度、基线群数不平衡、干预层次和可实现的最少群数都很关键;很少的群需要小样本修正,功效主要受群数约束。

8.7 生存结局的事件数思维

在比例危险假设下、两组分配比例为 qq 与 1−q1-q 时,检出危险比(hazard ratio, HRHR)所需事件数的常见近似:

E≈(z1−α/2+z1−β)2q(1−q)[log⁡(HR)]2E\approx\frac{(z_{1-\alpha/2}+z_{1-\beta})^2} {q(1-q)[\log(HR)]^2}

required_events <- function(hazard_ratio, allocation_fraction = 0.5,
                            alpha = 0.05, power = 0.80) {
  stopifnot(hazard_ratio > 0, hazard_ratio != 1,
            allocation_fraction > 0, allocation_fraction < 1)
  z_alpha <- qnorm(1 - alpha / 2)
  z_power <- qnorm(power)
  ceiling((z_alpha + z_power)^2 /
            (allocation_fraction * (1 - allocation_fraction) *
               log(hazard_ratio)^2))
}

required_events(hazard_ratio = 0.75, power = 0.90)
## [1] 508

事件数需再结合累积入组、基线风险、竞争事件、随访期和失访转成总人数。若比例风险不成立或目标是固定时点风险差/限制平均生存时间,应按相应 estimand 重新规划。

8.8 用敏感性表代替单点假设

scenarios <- expand.grid(
  prevalence = c(0.10, 0.20, 0.30),
  response = c(0.60, 0.75, 0.90),
  design_effect = c(1.0, 1.5)
)

scenarios[["required_invitations"]] <- mapply(
  function(p, r, d) {
    n_prevalence(p = p, margin = 0.03,
                 population_size = 10000,
                 design_effect = d,
                 usable_response = r)[["required_invitations"]]
  },
  scenarios[["prevalence"]],
  scenarios[["response"]],
  scenarios[["design_effect"]]
)

scenarios[with(scenarios,
               order(design_effect, prevalence, response)), ]

九、偏倚、混杂与因果结构

9.1 用选择图思考,而不是列清单

偏倚是估计系统性偏离目标量,不等于随机误差。常见来源:

  • 选择偏倚:进入、留在或进入分析的机制同时与暴露和结局有关;
  • 信息偏倚:暴露、结局或协变量误分类/测量误差;
  • 混杂:暴露组与对照组在共同原因上不可比;
  • 时间相关偏倚:不死时间、时间变化混杂、日历时间或检测机会差异;
  • 模型/分析偏倚:函数形式错误、数据驱动删变量、多重选择后只报告显著结果。

9.2 DAG:决定调整什么

考虑 CC 为吸烟,EE 为职业粉尘,YY 为肺病,MM 为炎症中介,SS 为因 EE 或 YY 影响的入院选择:

C→E,C→Y,E→M→Y,E→S←YC\rightarrow E,\quad C\rightarrow Y,\quad E\rightarrow M\rightarrow Y, \quad E\rightarrow S\leftarrow Y

nodes <- data.frame(
  # 图内使用变量代号,避免不同操作系统缺少中文绘图字体;正文解释含义。
  name = c("C", "E", "M", "Y", "S"),
  x = c(1, 2, 3, 4, 3),
  y = c(2, 3, 3, 2, 1)
)

plot(nodes$x, nodes$y, type = "n", axes = FALSE,
     xlab = "", ylab = "", xlim = c(0.5, 4.5), ylim = c(0.6, 3.4))
edges <- rbind(
  c(1, 2), c(1, 4), c(2, 3), c(3, 4), c(2, 5), c(4, 5)
)
for (i in seq_len(nrow(edges))) {
  from <- edges[i, 1]
  to <- edges[i, 2]
  arrows(nodes$x[from], nodes$y[from], nodes$x[to], nodes$y[to],
         length = 0.09, col = "#0b6b66", lwd = 1.7)
}
points(nodes$x, nodes$y, pch = 21, cex = 5.2,
       bg = "#e8f5f1", col = "#17365d", lwd = 1.5)
text(nodes$x, nodes$y, labels = nodes$name, cex = 0.82)
一个教学用因果图:C 是混杂因素,M 是中介,S 是碰撞点/选择变量。

一个教学用因果图:C 是混杂因素,M 是中介,S 是碰撞点/选择变量。

  • 估计粉尘的总效应时,需阻断后门路径 E←C→YE\leftarrow C\rightarrow Y,所以考虑调整 CC;
  • 不应为总效应常规调整中介 MM;
  • 限制在住院者或调整 SS 可能打开 E→S←YE\rightarrow S\leftarrow Y 的碰撞路径;
  • DAG 编码的是学科知识和时间顺序,数据不能单独告诉你正确图。

9.3 在设计阶段优先预防

威胁 设计阶段对策 分析/报告阶段对策
混杂 随机化、限制、匹配、采集充分基线共同原因 预设调整集、标准化/加权/回归、未测混杂敏感性
选择偏倚 同一来源人群、主动追访、降低负担 失访权重、界值/情景分析、报告流程和原因
结局误分类 统一盲法判定、验证工具、重复测量 概率偏倚分析、改变定义的敏感性分析
暴露误分类 在结局前测量、客观记录、校准 重复/校准子研究、定量误差分析
检测偏倚 同样随访和检测频率 使用一致观察窗,调整接触机会需谨慎定义目标量
报告偏倚 注册方案、时间戳 SAP、定义主要结局 报告所有预设分析并标明探索性偏离

9.4 负对照与定量敏感性

负对照暴露或结局在理论上不应存在目标因果效应;出现关联提示残余混杂或测量/选择结构,但“无关联”也不能证明无偏。定量偏倚分析应给偏倚参数合理范围并传播不确定性,而不是只写“可能存在偏倚”。

十、伦理、公平与数据治理

10.1 基本原则

  • 社会价值与科学有效性:无效设计让参与者承担无意义负担,本身是伦理问题;
  • 风险最小化与比例性:只采集回答问题所需数据和样本;
  • 尊重自主:清楚、可理解、可撤回的同意,不夸大直接受益;
  • 公平选择:纳入与排除应由科学和安全理由支持,而非便利;
  • 独立审查:在招募/数据访问前取得适当伦理与机构批准;
  • 持续监督:不良事件、方案偏离、隐私事件和停止规则;
  • 结果回馈:预先决定个体偶然发现与总体结果如何、何时返回。

10.2 隐私不是简单“去掉姓名”

日期、邮编、罕见诊断与多个数据源组合仍可能重新识别。方案应说明:数据最小化、访问角色、加密、密钥分离、保留/销毁时间、链接环境、导出检查、审计日志和事件响应。

10.3 社区与原住民数据治理

研究者应尽早与受影响社区共同确定问题、收益、治理、解释和传播。法律上的数据访问许可不等同于社区信任或社会许可。适用时遵循当地原住民族的数据主权原则和社区协议,不把“参与咨询”写成一次性审批步骤。

10.4 公平性检查

评估:谁不在抽样框中?谁难以使用招募语言或数字工具?谁更可能失访?测量工具在哪些群体中未验证?总体平均效应是否掩盖重要异质性?亚组分析既要有科学依据和交互检验,也要避免污名化和过度解释小样本。

十一、从研究想法到完整方案

11.1 方案开发的十二步

  1. 说明决策和知识缺口:谁会用结果做什么;
  2. 综合现有证据:系统地检索,避免重复无价值研究;
  3. 与患者、社区和执行者共同设计:确认结局和负担是否重要;
  4. 定义 PECO/PICO 与 estimand:包括时间零点和干预后事件;
  5. 画因果结构与数据生成流程:明确混杂、选择、测量机会;
  6. 选择设计和比较组:写明为什么优于现实替代方案;
  7. 定义人群与抽样/招募:框、概率、备用样本或不替补规则、非应答和权重;
  8. 操作化变量:来源、工具、时间窗、单位、盲法和质量控制;
  9. 规划精度/功效和可行性:敏感性场景、群数、事件数、招募速度;
  10. 预写统计分析计划:主要模型、缺失、诊断和敏感性分析;
  11. 完成伦理、治理和数据管理:同意、权限、保留、共享与结果回馈;
  12. 注册、试点并冻结版本:记录版本、日期、责任人和偏离处理。

11.2 研究方案模板

可复制以下骨架:

标题与方案版本:
研究团队、职责与利益冲突:
背景与决策需求:
主要/次要目标与假设:
PECO/PICO(T):
主要 estimand:人群、策略、结局、汇总、干预后事件
研究设计与理由:
场景、来源人群和研究时间:
纳入/排除标准与共同时间零点:
抽样框、抽样阶段、入样概率与预设备用样本/不替补规则:
招募、同意、补偿和留存:
暴露/干预、对照和防污染措施:
结局与协变量:来源、时间窗、效度、盲法
样本量:公式/模拟、假设来源、情景、膨胀
数据流程:采集、验证、去重、链接、质控
统计分析计划摘要:
伦理、公平、隐私和社区治理:
安全监测与停止规则(如适用):
注册、传播、数据/代码共享与结果回馈:
进度、预算、可行性指标与风险缓解:

11.3 操作性定义字典

每个变量至少记录:

字段 示例
概念/角色 主要结局:90 天住院
数据源 省级出院摘要数据库
原始字段 admit_date, facility, diagnosis_code
算法 基线后 1–90 日任何急性住院
时间锚点 入组/随机日为第 0 日
缺失/不适用 无链接权限不等于“未住院”
单位与范围 日期;逻辑检查为基线后
盲法 结局算法在揭示分组前冻结
验证证据 在相似系统中的阳性预测值/灵敏度

十二、统计分析计划(SAP)

SAP 应在查看分组结局或主要关联之前定稿并加时间戳。它比方案统计部分更具体,使另一位分析师可以重现决策。

12.1 SAP 最低内容

  1. 数据版本、分析软件与可复现环境;
  2. 人群集:全部入组、ITT、安全性、符合方案等;
  3. 每个 estimand 和对应的主要效应量/置信区间;
  4. 暴露、结局、时间尺度、删失、竞争事件和协变量编码;
  5. 描述性表格与流程图,不用基线显著性检验决定调整;
  6. 主要模型、链接函数、方差方法、分层/聚类/权重和匹配;
  7. 非线性、交互与比例风险等假设的检查和替代方案;
  8. 缺失数据的主要策略及其假设;
  9. 多重主要终点、重复观察和期中分析的错误率控制;
  10. 预设亚组与效应修饰,以交互和不确定性解释;
  11. 敏感性分析、负对照、定量偏倚分析;
  12. 偏离方案的记录和探索性分析标签。

12.2 缺失数据不是一种方法名称

先区分变量未测、失访、行政删失、结构性不适用与数据链接失败。完整病例分析有效需要具体条件;“缺失比例低”并不能保证无偏。多重插补模型应包含分析变量、与缺失有关变量及设计信息,并与 estimand 和实质模型兼容。对可能非随机缺失,应做模式混合、选择模型或界值情景等敏感性分析。

12.3 一个可复现的模拟队列分析

这个例子展示如何先定义数据生成和目标量,再估计粗关联与调整关联。它用于教学,不代表任意观察队列只需一个 logistic 回归就能得出因果结论。

set.seed(1006)
n_cohort <- 1500

cohort <- data.frame(
  age = round(runif(n_cohort, 30, 75)),
  smoker = rbinom(n_cohort, 1, 0.28)
)

# 年龄和吸烟影响暴露;年龄、吸烟、暴露共同影响结局。
cohort$exposed <- rbinom(
  n_cohort, 1,
  plogis(-2.0 + 0.018 * cohort$age + 0.85 * cohort$smoker)
)
cohort$outcome <- rbinom(
  n_cohort, 1,
  plogis(-4.2 + 0.035 * cohort$age +
           0.70 * cohort$smoker + 0.65 * cohort$exposed)
)

with(cohort, table(exposed, outcome))
##        outcome
## exposed   0   1
##       0 919 116
##       1 363 102
crude_model <- glm(outcome ~ exposed, data = cohort,
                   family = binomial())
adjusted_model <- glm(outcome ~ exposed + age + smoker, data = cohort,
                      family = binomial())

extract_or <- function(model, term) {
  estimate <- coef(model)[term]
  standard_error <- sqrt(diag(vcov(model)))[term]
  c(OR = exp(estimate),
    lower_95 = exp(estimate - qnorm(0.975) * standard_error),
    upper_95 = exp(estimate + qnorm(0.975) * standard_error))
}

rbind(
  crude = extract_or(crude_model, "exposed"),
  adjusted = extract_or(adjusted_model, "exposed")
)
##          OR.exposed lower_95.exposed upper_95.exposed
## crude         2.226            1.662            2.982
## adjusted      1.703            1.253            2.315

逻辑回归系数是条件优势比;结局不罕见时不应称为风险比。若 estimand 是边际风险差,可从已拟合模型对每个人分别设 E=1E=1 和 E=0E=0 后标准化:

data_exposed <- transform(cohort, exposed = 1)
data_unexposed <- transform(cohort, exposed = 0)

risk_if_exposed <- mean(predict(adjusted_model,
                                newdata = data_exposed,
                                type = "response"))
risk_if_unexposed <- mean(predict(adjusted_model,
                                  newdata = data_unexposed,
                                  type = "response"))

c(risk_if_exposed = risk_if_exposed,
  risk_if_unexposed = risk_if_unexposed,
  standardized_risk_difference = risk_if_exposed - risk_if_unexposed,
  standardized_risk_ratio = risk_if_exposed / risk_if_unexposed)
##              risk_if_exposed            risk_if_unexposed standardized_risk_difference
##                      0.18791                      0.12212                      0.06578
##      standardized_risk_ratio
##                      1.53868

这个点估计仍依赖无未测混杂、一致性、正值性和模型正确等假设;正式分析还需适当置信区间(例如 bootstrap 或影响函数方法)及敏感性分析。

十三、质量保证、开放科学与报告

13.1 试点与质控

  • 用真实流程而非只在研究团队电脑上试点;
  • 验证资格、随机化/抽样、同意、随访和紧急升级路径;
  • 设定范围、逻辑、一致性和重复记录检查;
  • 监测按场点/群体的入组、缺失、协议偏离和结局判定;
  • 对人工抽取或判读做培训、盲法复核和一致性评估;
  • 将数据修订记录为可追溯查询,不直接覆盖原始值;
  • 先冻结原始数据,再由脚本创建分析数据集。

13.2 可复现项目最低标准

  1. 原始数据只读,清洗和派生全部由脚本完成;
  2. 不在代码里写真实姓名、密钥或本机私有路径;
  3. 固定随机种子并保存抽中的稳定 ID;
  4. 记录数据字典、来源、版本、包版本与运行顺序;
  5. 表格和图直接由分析对象生成,避免手工复制;
  6. 对公开仓库使用合成/脱敏示例数据,并在分享前做披露风险审查;
  7. 用独立人员复核主要结局、样本流与主要分析。

13.3 按设计选择报告规范

研究 常用规范
随机试验 CONSORT 2025;方案使用 SPIRIT 2025
观察性研究 STROBE;常规健康数据研究可参考 RECORD
诊断准确性 STARD 2015;使用 AI 时加入适用的 STARD-AI 2025
系统综述 PRISMA 2020
回归或机器学习预测模型 TRIPOD+AI 2024 及适用扩展
非随机行为或公共卫生干预评价 TREND(并结合具体准实验要求)
定性研究 SRQR 或 COREQ

报告清单不是设计质量评分,也不能在写作阶段修复设计缺陷;应在方案阶段使用。

十四、三个完整设计案例

14.1 案例 A:估计社区未诊断高血压患病率

问题:2026 年某城市 18 岁以上常住居民中,按标准化测量定义的高血压患病率是多少?

  • 设计:分层两阶段横断面调查;按区域与贫困程度分层,抽社区后抽家庭,再户内随机一人;
  • 抽样框:更新后的地址/家庭框,审计集体住所和无固定地址居民的覆盖;
  • 测量:验证设备,静坐后重复血压,记录药物;
  • 样本量:按目标半宽、预期患病率、DEFF 和总可用应答率;
  • 分析:阶段权重 ×\times 非应答调整 ×\times 年龄性别校准,使用设计型方差;
  • 偏倚:未覆盖、拒访、白大衣效应;报告测量与非应答敏感性;
  • 伦理:异常高值安全转介,不承诺临床诊断。

14.2 案例 B:罕见职业癌症的病因研究

问题:既往溶剂暴露是否与某罕见癌症发病相关?

  • 设计:基于人口癌症登记的病例对照或在职业队列中的巢式病例对照;
  • 病例:新发、统一组织学定义、明确诊断期;
  • 对照:来自病例的同一来源人群;密度抽样可在每个病例发生时从风险集中选取;
  • 暴露:优先工作记录/工作暴露矩阵,判读者对病例状态盲法;
  • 混杂:预设年龄、日历时间、吸烟及共同职业暴露的因果调整集;
  • 分析:匹配/风险集抽样对应的条件方法;解释匹配后的 OR;
  • 偏倚:若只访谈存活病例,注意生存与回忆偏倚;
  • 样本量:由可获得病例数、对照暴露率、最小 OR 和病例:对照比共同决定。

14.3 案例 C:评估区域无烟政策

问题:政策是否减少每月哮喘住院率?

  • 设计:有对照的中断时间序列,至少有充分政策前后月数;
  • 单位:地区-月份,分母用同期人群或覆盖人时;
  • 对照:未同期实施政策、数据系统和政策前趋势相近地区;
  • 模型:水平/斜率变化、季节、长期趋势、自相关和过度离散;
  • 检查:政策前趋势、安慰剂日期、其他同期政策、编码/就医变化;
  • estimand:例如实施后 12 个月观察率与反事实预测率的差或比;
  • 公平性:预设不同贫困地区的效应异质性,但避免小样本过度解释。

十五、设计决策与执行清单

15.1 设计冻结前

15.2 招募与随访期间

15.3 分析与报告前

十六、练习题

练习 1:识别设计

研究者从癌症登记中找出 2020–2025 年所有新发病例,并从同地区人口登记按病例诊断时仍处于风险者抽取对照,再查阅十年前职业记录。这是什么设计?为什么“回顾性”不是充分答案?

练习 2:选择设计

要估计某省中学生当前电子烟使用率,并比较城乡差异。学校名单完整,学生名单只在学校内可得。提出抽样方案、权重组成和至少三种偏倚来源。

练习 3:样本量

预期患病率 25%,希望 95% 置信区间半宽为 4%,目标总体 N=5,000N=5{,}000;预计 DEFF=1.4,总可用应答率 70%。需要邀请多少人?用本教程函数计算。

n_prevalence(p = 0.25, margin = 0.04,
             population_size = 5000,
             design_effect = 1.4,
             usable_response = 0.70)

练习 4:DAG 调整

在 C→EC\rightarrow E、C→YC\rightarrow Y、E→M→YE\rightarrow M\rightarrow Y 的图中,要估计 EE 对 YY 的总效应,应优先考虑调整哪些变量?为什么不常规调整 MM?

练习 5:发现时间错误

数据库研究把“开始药物后 6 个月仍在用药”定义为暴露,然后从首次处方日比较这组人与停药者一年的死亡。指出主要时间偏倚并提出目标试验式修正。

练习 6:非应答

在线调查有 50,000 人自愿作答,年龄和性别经加权后与全省一致。是否因此可以无偏估计心理健康患病率?还需要哪些证据与敏感性分析?

练习 7:整群试验

计划随机 8 家诊所,每家 200 人。为什么不能把它等同于 1,600 名独立个体?你还想知道哪些参数?

练习 8:SAP

研究者看到数据后才把主要结局从 30 天改为 90 天,并只报告显著亚组。应如何透明处理?今后怎样预防?

十七、练习答案

展开参考答案

答案 1

这是基于来源人群、按病例发生时风险集选择对照的病例对照研究;若对照逐病例按诊断时点抽取,更具体是密度抽样。“回顾性”只说明使用既往资料,不能说明按结局抽样、对照来源或 OR 的解释。

答案 2

可按地区和城乡分层,以规模概率抽学校,再在校内从完整学生名单简单随机/系统抽学生。总体入样概率是学校概率乘校内概率,基础权重取倒数,再做非应答调整与可信学生总数校准。偏倚包括失学/缺勤学生未覆盖、学校拒绝、学生自报误分类、家长同意造成选择,以及不同学校应答差异。

答案 3

运行代码得到 SRS 下所需完整样本及膨胀后的邀请数。计算顺序为比例公式 →\rightarrow 有限总体校正 →\rightarrow 设计效应 →\rightarrow 除以 0.70。实际还需确认 70% 是否包含学校/个人各阶段损耗,并受可抽学校数约束。

答案 4

为阻断 E←C→YE\leftarrow C\rightarrow Y 的后门路径,应考虑调整基线共同原因 CC。MM 位于目标因果路径上;估计总效应时调整它会阻断部分效应,并可能引入中介-结局未测混杂导致的偏倚。若目标是直接效应,需要重新定义 estimand 和更强识别条件。

答案 5

“6 个月仍用药”要求参与者先存活并被观察到 6 个月,但随访却从首次处方开始,形成不死时间和用未来信息分类。可在基线随机/模拟分配策略并设宽限期,用克隆-删失-加权等适当方法;或在 6 个月做 landmark 分析,只对届时存活且符合资格者估计条件效应,明确改变后的目标人群。

答案 6

不能。大样本只降低随机误差;自愿参加可能与未测的症状、数字接入、求助行为等有关。需比较抽样框/行政辅助变量、说明覆盖和邀请机制、评估不同招募模式,使用校准或选择模型,并对未测选择做情景/界值分析。结论应限定于假设可支持的范围。

答案 7

同诊所患者共享团队、地区和流程,结果相关;干预也只有 8 个独立分配单位。需要 ICC、群大小及其变异、群基线率、分配层/匹配、群数、预期失访、分析模型和小样本修正。即使增加每群人数,群数太少仍可能功效不足且随机化不平衡。

答案 8

应同时报告原 30 天主要结果,将 90 天和亚组标为事后/探索性,说明何时、为何改变,并避免选择性强调。今后在查看分组结果前注册方案和时间戳 SAP,定义主要结局、亚组、交互检验及多重性策略,保留所有偏离记录。

十八、术语表

中文 English 简明定义
目标人群 Target population 希望结论适用的人群
来源人群 Source population 实际产生参与者/病例的人群
抽样框 Sampling frame 可操作的抽样单位列表或机制
入样概率 Inclusion probability 某单位通过全部阶段进入样本的概率
设计权重 Design/base weight 入样概率的倒数
有限总体校正 Finite population correction 无放回抽取较大比例总体时的方差修正
设计效应 Design effect, DEFF 实际设计方差与同样本量 SRS 方差之比
组内相关 Intracluster correlation, ICC 同群观察相似程度
目标效应 Estimand 研究要估计的精确定义量
时间零点 Time zero 资格、策略分配与随访同时对齐的起点
目标试验 Target trial 希望观察数据模拟的理想随机试验方案
选择偏倚 Selection bias 选择机制使比较偏离目标关系
信息偏倚 Information bias 测量误差或误分类造成系统性偏离
混杂 Confounding 共同原因造成暴露组不可比
碰撞点 Collider 接收两个变量箭头的共同结果;条件化可开路径
中介 Mediator 位于暴露到结局因果路径上的变量
正值性 Positivity 每类协变量下各策略都有非零可能
意向治疗 Intention-to-treat 按随机分配策略比较,不按实际依从重分组
非应答调整 Nonresponse adjustment 利用辅助信息修正不同应答概率
校准 Calibration 使加权样本边际匹配可信总体总量
统计分析计划 Statistical analysis plan, SAP 在结果揭示前规定分析细节的文件

十九、权威资源与延伸阅读

19.1 研究设计与因果推断

19.2 伦理、试验与方案

19.3 观察性、诊断与证据综合报告

19.4 调查抽样与应答

建议阅读顺序:先用本教程把问题、目标效应、设计和抽样连成一条线;再按自己的研究类型查阅相应方法教材、伦理规范和报告清单。具体项目应同时吸收主题专家、统计学家、数据管理人员以及受影响患者或社区的意见。

结语

高质量流行病学研究不是从“选哪个回归模型”开始。它从明确决策、目标人群、时间零点和目标效应开始,用合适设计创建可信比较,用透明抽样与招募理解谁进入研究,用现实样本量规划保证足够信息,再把偏倚、伦理、治理、分析与报告写进可执行方案。

最值得反复追问的四句话是:

  1. 分母和来源人群是谁?
  2. 我要估计的量究竟是什么?
  3. 什么机制可能让比较失真?
  4. 另一位研究者能否从方案和代码复现全部决策?

当这些问题有清楚答案时,研究类型不再只是名词,而会成为可辩护、可执行并真正服务公共卫生决策的证据设计。