mcpField
A
analyze-stats

analyze-stats

github.com/aperivue数据与数据库353143 次安装1 天前更新
代码仓库

关于 analyze-stats

面向医学研究者的 Claude Skill,可生成并运行可复现的 Python 或 R 分析代码,并据此产出论文表格、图表和结果文本。它把数据隐私检查、分析计划审批和代码质量检查纳入工作流。

主要功能

  1. 01生成并执行 Python 或 R 分析代码
  2. 02输出论文表格、图表与结果文本
  3. 03执行 PHI 检查和变量评估
  4. 04检查分离问题与代码质量

适用场景

  1. 01分析去标识化的医学研究数据
  2. 02生成可复现的统计结果与图表
  3. 03准备论文结果段落和方法描述

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/aperivue/medsci-skills --skill analyze-stats

安装后在 Claude Code 中输入/analyze-stats确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
analysis_run_workflow.md
references/analysis_guides/
agreement_reliability.md
burden_decomposition_forecasting.md
calibration.md
diagnostic_accuracy.md
health_economic_evaluation.md
mediation.md
mendelian_randomization.md
meta_analysis.md
missing_data.md
multiplicity.md
network_meta_analysis.md
nhis_icd10_mapping.md
polygenic_risk_score.md
propensity_score.md
regression.md
repeated_measures.md
survey_weighted.md
survival.md
test_selection.md
references/style/
figure_style.mplstyle
theme_publication.R
references/table-standards/
table-standards.md
references/table-standards/journal-profiles/
ajr.yaml
european_radiology.yaml
jama.yaml
lancet.yaml
nejm.yaml
radiology.yaml
references/table-standards/table-types/
agreement.md

详细介绍

统计分析技能

为医学研究分析生成可复现的代码(优先使用 Python,必要时使用 R), 运行代码,并根据输出制作可用于发表的表格和图表。

数据隐私检查

读取任何数据文件前,检查其中是否可能包含受保护健康信息(PHI):

  1. 如果工作目录中存在 *_deidentified.* 文件,请使用这些文件。
  2. 如果只有原始 CSV/Excel 文件,请询问用户数据是否包含患者身份标识信息 (姓名、国民身份证号 / RRN、联系方式);如果包含,请先让用户使用 /deidentify 对数据进行去标识化。
  3. 用户确认数据已去标识化或不含 PHI 后,再继续。
  4. 绝不在输出中显示原始 PHI 值(姓名、电话号码、RRN),因为控制台 输出会被复制到记录和草稿中。如果遇到此类信息,请提醒用户并建议使用 /deidentify。

参考文件

  • ${CLAUDE_SKILL_DIR}/references/templates/ — 可复用的分析脚本;生成代码前,请先阅读匹配的模板。
  • ${CLAUDE_SKILL_DIR}/references/analysis_guides/ — 方法指南;Phase 2 表格会说明需要阅读哪些指南。
  • ${CLAUDE_SKILL_DIR}/references/table-standards/ — table-standards.md(通用和 AMA 规则、脚注顺序、gtsummary 工作流)、journal-profiles/(各期刊的 YAML 文件:radiology、jama、nejm、lancet、european_radiology、ajr)、table-types/(每种表格类型各有一个模板)、tool-comparison.md(R/Python 表格工具)。
  • ${CLAUDE_SKILL_DIR}/references/style/figure_style.mplstyle — 图表样式。

工作流

阶段 1:数据评估
  1. 读取数据文件(CSV、Excel、TSV 或其他表格格式)。
  2. 向用户报告:数据形状(行数 × 列数);列名及推断出的类型(连续型、 分类型、有序型、二元型、日期时间型);每列的缺失值(数量和百分比); 前 5 行;分类列的唯一值计数。
  3. 确定分析单位:患者、检查、病灶、图像、评估者、研究等。
  4. 如果不确定变量名称或编码,请写入 [VERIFY: variable_name],并请用户根据 数据字典确认;切勿猜测列名或编码。
第 2 阶段:分析计划

观察性研究设计(队列、病例对照、横断面、登记、调查):在制定计划前,查找来自 /define-variables 的 variable_operationalization.md(或由代码本支持的等效定义表)。如果不存在,应提醒用户并建议先运行 /define-variables,因为根据数据字典临时编造暴露、结局、协变量定义和截点,是审稿人拒绝观察性研究的常见原因。这是提醒,不是阻止:在用户明确确认后继续,并记录该文件不可用。

提出分析计划;由用户决定研究问题和终点。对于你无法确认的任何临床定义、截点、诊断标准或指南声明,标记为 [VERIFY]。

  1. 检测分析类型:根据“特定分析指南”中的表格检测,或接受用户指定的类型。

  2. 列出要进行的具体检验。

  3. 确定主要和次要终点。

  4. 说明将检查的假设(正态性、方差齐性、独立性)。

  5. 指出所需的数据清理(重新编码、异常值处理、缺失数据策略)。

  6. 使估计目标与研究问题相匹配。

    • 交互作用、协同作用或效应修饰:主要估计目标是交互作用参数本身(对交互项进行似然比检验,或在明确指定的尺度上报告交互作用 OR/HR),而不是根据其置信区间将主效应 OR 解读为“无协同作用”。公共卫生或生物学上的协同作用应采用加法尺度:报告 RERI、AP 或 S,并为每项提供置信区间(R interactionR / epiR;Knol 和 VanderWeele 的报告规范),而不能只报告乘法积项,因为乘法交互作用不显著可能与很大的加法交互作用并存(反之亦然)。联合类别(高/高对比低/低)显示的是联合关联,而非交互作用;根据分别估计的分层结果声称“A 中的效应强于 B”属于显著性差异谬误——应报告正式的交互项。
    • 等效性或非劣效性:应预先声明界值(采用 TOST 程序,或将置信区间与预先声明的 MCID 进行比较);没有界值时,差异不显著并不代表等效。
  7. 在拟合任何模型前,筛查每个分类/二元预测变量是否存在分离。 完美预测结局的预测变量没有有限的 MLE,而且这种失败不会显式报错:glm 会返回接近 0(或极大)的优势比、p ≈ 0.99,以及最终出现在表格中的 AUC。特征性影像征象(T2-FLAIR mismatch、string sign、halo sign)经常导致这种情况:100% 的特异度意味着必然存在空单元格。

    python3 "${CLAUDE_SKILL_DIR}/scripts/check_separation.py" \
      --data cohort.csv --outcome idh_mutant --auto --strict
    

    COMPLETE_SEPARATION(空单元格)和 QUASI_SEPARATION(单元格低于稀疏度下限)都会中止计划。存在两个或更多预测变量时,脚本还会联合检验它们(即使没有任何单个预测变量能分离结局,线性组合也可能做到);该检验需要 scipy,如果没有 scipy,报告会注明未运行联合检查。补救措施是在计划中做出的设计决策:Firth 惩罚似然可保留单一模型;而两阶段规则——直接判定征象阳性病例,仅对征象阴性的剩余病例建模——通常是针对特征性征象在临床上更有意义的选择,因为征象阳性患者已经得到诊断。

提交计划,并在执行前等待用户批准。

第 3 阶段:执行

生成并运行 Python(优先)或 R 脚本。你报告的每个数值都必须来自脚本的实际执行输出,绝不能估算或手动输入,因为脚本无法复现的数值就无法验证。

脚本结构

每个脚本都应以可复现性标头开头:

"""
Analysis: {description}
Date: {YYYY-MM-DD}
Random seed: 42
Python: {version}
Key packages: {package==version, ...}
"""
import numpy as np
import pandas as pd
np.random.seed(42)
执行规则
  1. 随机种子:始终使用 np.random.seed(42) 或 set.seed(42)。
  2. 图形样式:始终加载 matplotlib 样式文件:
    import matplotlib.pyplot as plt
    style_path = os.path.join(os.environ.get('CLAUDE_SKILL_DIR', '.'), 'references/style/figure_style.mplstyle')
    if os.path.exists(style_path):
        plt.style.use(style_path)
    
  3. 输出文件:保存到输入数据所在目录,或用户指定的输出目录。
  4. 表格:保存为 CSV,并打印 Markdown 版本(见输出约定);图形保存为 PDF(矢量)和 PNG(300 DPI)。
  5. 控制台输出:提供摘要,涵盖正文中会出现的每个数值,格式便于直接复制粘贴到结果部分。
假设检验

根据研究设计和分布选择摘要统计量与检验,而非根据初步检验选择:

  • 分布形状:使用 QQ 图/直方图和偏度;对于表 1,若 |skewness| > 1,则使用中位数(IQR)和秩检验;否则使用均值(SD)(table-types/table1_demographics.md)。切勿根据 Shapiro-Wilk 或 KS 的 P 值来决定:样本量大时,它会标记无关紧要的偏离;样本量小时,它会漏掉真实偏离;先检验再选择检验还会增加 I 类错误率(Rochon et al. 2012)。
  • 方差不齐:默认使用 Welch's t 检验/Welch ANOVA,而不是以 Levene 检验作为门槛;Mann-Whitney 检验针对的是不同假设,也不能解决方差不齐问题。请在方法部分说明选择及理由。
分层与有序趋势报告
  • 分层互斥性门槛(在进行任何有序趋势检验之前)。在进行 Cochran-Armitage 趋势检验(或任何将层级视为有序划分的分析)之前,断言各层互斥且穷尽总体:sum(n per stratum) == unique N 且 sum(events per stratum) == total events。对存在重叠或未穷尽总体的分层进行趋势检验无效。打印各层 N/事件数表及核对结果(即 /self-review check_cohort_arithmetic.py PARTITION_OVERLAP 在分析端的对应检查)。
  • 次要分层 HR/OR:每项均须报告:(a) 参照对比(参照类别);(b) 各层的事件数;(c) 任一层事件数较少时(< 10 即不稳定)的稀疏分层注意事项。若未说明参照类别和事件数,仅报告“瘦型参与者中 HR 1.55”则无法解读。
  • 比例 CI 下限截断:将每个下限截断为 max(0, lower)。零事件的 Wilson/score 区间可能给出负数或极小的指数形式下限(例如 3.47e-16),这属于显示伪影;应报告 0(或 0.0%),对于零值或接近零值的单元格,优先使用精确(Clopper-Pearson)区间。
输出清单

所有分析完成后,按照 references/analysis_run_workflow.md 中规定的格式,在输出目录中保存 _analysis_outputs.md,以便 /make-figures 和 /write-paper 无需询问即可找到输出文件。

对于独立单位上的预先指定二元预测,请使用该文件中打包的 scripts/run_analysis.py run 工作流:它会在同一份清单中嵌入数据/配置/代码/输出哈希、精确计数、各指标的分母以及复现命令(audit 会检查记录的版本而不重写它们;compare 会将声明的上下文与数值相等性和字节差异区分开来)。它不会选择阈值,也不会确定研究有效性、隐私许可或再利用权利。合成示例: python3 ${CLAUDE_SKILL_DIR}/scripts/demo_analysis_run.py --out demo-project

阶段 3.5:生成代码质量门槛

在将任何脚本报告为最终版本前,请对每个生成的 .py/.R 文件进行 lint:

python3 ${CLAUDE_SKILL_DIR}/scripts/check_generated_code.py {script.py} --strict
# or scan a whole output directory:
python3 ${CLAUDE_SKILL_DIR}/scripts/check_generated_code.py --code-dir {analysis_dir} --strict

在报告脚本前修复所有 Major:MISSING_SEED(随机操作未设置种子)、 HARDCODED_DATA_LITERAL(手动输入的表格形数据,而非使用 read_csv()/read.csv() + 子集筛选)、 HARDCODED_ABS_PATH(不可移植且存在 PII 风险)以及 INPLACE_SOURCE_OVERWRITE(写入作为输入读取的路径——绝不修改原始数据;应将派生输出写入新 路径)。整理代码时修复 DEBUG_LEFTOVER 和 UNUSED_IMPORT 标记。 次要问题,仅限 Python:API_DEFAULT_STUDENT_T(不指定 equal_var 的 scipy ttest_ind 使用 Student t 检验;请注明使用 Welch 检验或说明采用 Student 检验的理由)以及 API_DEFAULT_PENALIZED_OR(文件中对 coef_ 求指数时,LogisticRegression 未设置 penalty、C、l1_ratio 中的任何一项)。R 的 t.test() 默认使用 Welch 检验。

阶段 4:报告

执行后,根据脚本输出生成可直接用于稿件的文本:

  1. 结果段落:3-8 句话,包含具体数字,格式如下:
    • 连续变量:“均值 +/- 标准差”或“中位数(IQR)”
    • 比例:“n/N(XX.X%)”
    • 检验结果:“统计量 = X.XX,p = 0.XXX”
    • 效应量:“Cohen's d = X.XX(95% CI:X.XX-X.XX)”
    • AUC:“AUC = 0.XXX(95% CI:0.XXX-0.XXX)”
  2. 表格/图注:起草图注,并注明表格/图片编号。
  3. 方法片段:用 2-3 句话描述统计方法,供 Methods 部分使用。仅引用经 /search-lit 确认 DOI/PMID 的文献;其他文献请标记为 [UNVERIFIED - NEEDS MANUAL CHECK]。

报告统计结果;临床意义的判断留给用户。对于本技能不涵盖的设计(自适应或贝叶斯试验、复杂多层模型或因果中介模型),请说明这一点,并建议在报告结果前请生物统计学家审查。

统计报告规则(始终执行)

  1. 精确 p 值:报告精确数值(例如,p = 0.034),不要使用不等式;低于 0.001 时,报告 p < 0.001。
  2. 置信区间:主要终点始终报告 95% CI。
  3. 效应量:每个 p 值都要同时报告一个效应量(如适用,可报告 Cohen's d、eta-squared、优势比、风险比等)。
  4. 多重比较:对同一数据集进行 3 项或更多检验时,应用 Bonferroni 或 Benjamini-Hochberg 校正,说明所用方法,并同时报告未校正和校正后的 p 值。
  5. 样本量:说明每个组/分析的 n。
  6. 缺失数据:报告排除了多少个病例以及排除原因。
  7. 小数位数:p 值保留 3 位小数,比例保留 1 位小数,均值/SD 按测量精度报告。
  8. 设计/效能统计必须来自代码输出,不得手工计算。 稿件中出现的任何最小可检测效应(MDE)、先验效能或所需样本量,都必须由已提交的脚本打印,并同时注明方法和输入值(每组 n、alpha、效能、分配比例、单侧/双侧);不得使用辅助工具(G*Power、在线计算器)计算后粘贴,因为脚本无法复现的稿件数值就无法核验。全过程使用同一类方法(例如,通过 statsmodels 的 TTestIndPower 计算精确非中心 t 分布,或使用 scipy 的 nct);不要对部分数值使用正态近似、对其他数值使用精确 t 分布。不要报告事后(观察到的)效能:它是 P 值的函数,并无额外价值(Hoenig & Heisey 2001);应报告效应的 CI。
  9. 估计目标与 CI 输出约定。 每个主要点估计——包括分位数估计目标(T25、事件发生时间中位数)、合并比例和亚分布 HR,而不仅仅是 OR/HR/AUC——都必须附带其 95% CI,因为 /self-review 会将缺少 CI 的主要指标视为缺陷。输出 CSV 中应将区间设为显式列(estimate, ci_lower, ci_upper),或以 est (lo–hi) 格式放在一个文本列中;绝不能只提供点估计而不附带区间。OR/HR/sHR 保留 2 位小数,AUC/C 统计量保留 3 位小数。
效应量的现实场景解读

只要主要结果是相关系数、标准化系数、回归斜率、OR/HR/RR 或 Cohen's d,就要在报告效应量(规则 3)的同时,将其转化为非统计学专业人士可以据此采取行动的通俗单位变化,而不是用它取代效应量。这适用于连续暴露—结局关联(Spearman's rho、Pearson's r、标准化斜率)、需要了解绝对风险的受众所关注的相对指标,以及读者研究或专家引导研究、临床效用框架、摘要和图注。

  1. 选择暴露变量上的锚定对比,而不是变化 1 个单位。默认采用第 25 百分位数到第 75 百分位数(IQR),两个端点均使用原始单位。
  2. 转换为结局量表上的变化。
    • 斜率 b 使用原始单位时:delta_outcome = b * (x_p75 - x_p25)。保留正负号:b 为负表示下降。
    • 每 SD 斜率(暴露变量已标准化):delta_outcome = beta * (x_p75 - x_p25) / SD_x;完全标准化的 beta 还要乘以 SD_outcome。
    • 相关系数不是斜率。Pearson r 可转换为同一数据的简单回归斜率(b = r * SD_outcome / SD_x),只有在关系呈线性时,该斜率才表示每单位的平均变化;Spearman's rho 不能转换为结局单位上的变化。应拟合结局对暴露变量的回归模型,并转换该斜率(若使用 Spearman 是因为存在离群值,则采用 Theil-Sen 斜率);对于单调但呈曲线的关联,则报告 x_p25 和 x_p75 对应的拟合结局值。
    • 报告格式:「从 {x_p25} 变为 {x_p75} {units},平均而言与约 {delta_outcome} {outcome units} 的变化相关」,并说明其背后的线性假设。
  3. 限定结论的范围:报告对比、假设和系数的 CI;不要根据粗略或未经调整的估计暗示因果关系。

输出要求(临床效用为默认要求,而非可选附加项):

  • OR/HR/RR 为主要结局 → 报告相对指标以及指定基线下的绝对风险、绝对风险差和 NNT = 1/ARR(或 NNH = 1/ARI),并明确说明基线风险。只报告相对指标的标题并不完整。
  • 连续结局 → 在效应量下方添加 IQR/临床锚定的「现实场景解读」内容。
  • 预测/分类(包括医疗 AI)模型 → 除区分度外,还要报告校准情况(Brier 分数、校准图或校准斜率/截距),因为仅报告 AUC 不够;在相关阈值下进行决策曲线/净获益评估是标准输出。增量效用声明应报告新变量项的增量检验(嵌套模型中的似然比检验/Wald 检验)、ΔC-statistic 及其 CI,以及相较于已有临床模型的Δnet benefit,而不能只报告新模型的 AUC;NRI 仅采用分类的、按事件/非事件分层的版本,IDI 应谨慎使用。参见 references/table-standards/table-types/incremental_value.md 和 make-figures 中的 decision_curve 示例(以及绘制曲线的 render_core_figures.py)。

错误处理

  • 如果脚本运行失败,应诊断可能原因(缺少软件包、数据格式不匹配、列名错误),并提供修复方法。修改脚本或征求用户意见之前,不要重复运行同一脚本。
  • 如果 R 软件包不可用,建议运行 install.packages(),并等待用户确认。

输出规范

代码、表格、图表和控制台输出均使用英文。

表格

生成任何投稿表格之前,请先加载:

  1. ${CLAUDE_SKILL_DIR}/references/table-standards/journal-profiles/{journal}.yaml,如果已知目标 期刊(其中设定脚注标记、P 值和 CI 格式、标题与缩写顺序)
  2. ${CLAUDE_SKILL_DIR}/references/table-standards/table-types/{type}.md,用于指定表格类型
  3. 如果未指定期刊,则默认采用 AMA 样式(Radiology 配置)

输出格式(始终生成以下三种):CSV 文件(供下游使用和归档)、控制台 Markdown 渲染(供用户审阅)以及 R gtsummary 代码(用于导出 Word/LaTeX)。阅读 ${CLAUDE_SKILL_DIR}/references/table-standards/table-standards.md,了解 gtsummary 流程和脚注排列顺序(一般说明、缩写、具体说明、概率说明)。

验证清单(完成任何表格之前运行):

  • 不使用竖线——仅使用水平线(顶部、表头下方、底部)
  • 二元变量仅显示一个水平(例如,仅显示 Male)
  • 单位写在表头中,不写在单元格中;每列小数位数一致
  • 注明变异度量:均值(SD)或中位数(IQR)
  • 注明统计检验方法(脚注或一般说明);提供精确的 P 值,绝不写“NS”
  • 效应量按具有临床意义的单位计算(每 10 年,而非每 1 年)
  • 注明分类预测变量的参照类别
  • 在脚注中定义缩写;每张表均应自成一体
图

PDF(矢量)+ PNG(300 DPI),使用 figure_style.mplstyle 设置样式(Arial、色盲安全调色板);宽度为 3.5 英寸(单栏)或 7.0 英寸(双栏);坐标轴标签注明单位。

特定分析指南

为任意一行生成代码前,请先阅读该行列出的文件(相对于 ${CLAUDE_SKILL_DIR} 的路径);这些文件包含本文档未重复说明的方法规则。

分析类型生成代码前阅读模板
表 1(人口统计学特征)references/table-standards/table-types/table1_demographics.mdreferences/templates/table1_demographics.py
诊断准确性(Se、Sp、PPV、NPV、AUC)references/analysis_guides/diagnostic_accuracy.mdreferences/templates/diagnostic_accuracy.py
超越基线模型的增量价值(ΔAUC、NRI/IDI、净获益)references/table-standards/table-types/incremental_value.md—
阅片者研究(MRMC)references/table-standards/table-types/reader_study.md—
预测模型(输出用于决策的风险值)references/analysis_guides/calibration.md—
评定者间一致性(kappa、ICC、Bland–Altman)references/analysis_guides/agreement_reliability.md、references/table-standards/table-types/agreement.mdreferences/templates/agreement_analysis.py
Meta 分析(成对、单臂比例、DTA)references/analysis_guides/meta_analysis.mdreferences/templates/dta_meta_analysis.R(DTA)
网络 Meta 分析(≥3 种干预)references/analysis_guides/network_meta_analysis.md—
卫生经济学评价(CEA、CUA、预算影响)references/analysis_guides/health_economic_evaluation.md—
调查/Likert 量表(有序评分量表)下方的调查/Likert 量表部分references/templates/likert_summary.py
生存分析、竞争风险、区间删失事件references/analysis_guides/survival.md、references/table-standards/table-types/survival_results.mdreferences/templates/survival_analysis.py(嵌套单位使用 --cluster <id>)
组间比较、相关性references/analysis_guides/test_selection.md—
Logistic 或线性回归references/analysis_guides/regression.mdreferences/templates/regression.py(regression_type = "logistic" 或 "linear")
倾向评分(PSM、IPTW、SIPTW、重叠加权)references/analysis_guides/propensity_score.mdreferences/templates/propensity_score.py
调查加权分析(KNHANES、NHANES、KCHS)references/analysis_guides/survey_weighted.mdreferences/templates/survey_weighted_analysis.py
基于 NHIS 理赔数据的研究(ICD-10 定义)references/analysis_guides/nhis_icd10_mapping.md—
重复测量(LMM、GEE、RM ANOVA)references/analysis_guides/repeated_measures.md;缺失数据请参阅 references/analysis_guides/missing_data.md(在 MAR 假设下,LMM 已使用所有观测到的结局,因此仅结局缺失并不需要使用 MICE)references/templates/repeated_measures.py
中介分析references/analysis_guides/mediation.md—
多重检验、多暴露扫描(ExWAS/EWAS)references/analysis_guides/multiplicity.md—
孟德尔随机化references/analysis_guides/mendelian_randomization.md—
多基因风险评分references/analysis_guides/polygenic_risk_score.md—
疾病负担、分解、预测references/analysis_guides/burden_decomposition_forecasting.md—

比较模型:对于同一批患者的两个独立评分,使用配对 DeLong 检验。对于在同一数据上拟合并评估的嵌套“基线 + 新项”模型,DeLong 检验不能用于检验增量价值;应检验该项(似然比),并报告 ΔAUC 及其置信区间。

以下规则没有单独的指南。

调查/李克特量表
  • 每个条目的描述性统计:中位数、四分位距、频数分布。组间比较:Mann-Whitney 或 Kruskal-Wallis 检验(有序数据)。可视化:发散型堆叠条形图。
  • 内部一致性:Cronbach's alpha 和条目-总分相关性。
  • 反向计分防护(在信度分析前运行):在计算量表总分或 Cronbach's alpha 之前,先对每个负向表述的条目 重新编码:(min+max) - x。未重新编码的反向条目会产生负的条目-其余条目相关性,并可能使 alpha 为负——这是编码错误, 并非构念具有多维性的证据;不要据此将其辩解为多维构念。likert_summary.py 会输出每个条目的条目-其余条目相关性,将负值标记为疑似反向计分条目,并在 alpha 为负时发出警告,还可通过 --reverse-items E3 ... 进行重新编码。若要在清理数据时筛查,请运行 python3 "${CLAUDE_SKILL_DIR}/../clean-data/scripts/check_reverse_coding.py"。
协变量陷阱:结构性零值与剂量/时长变量

适用于任何包含以分类暴露为参照的剂量/时长变量(如吸烟状态对应的包年数、饮酒量对应的每周克数、既往吸烟者对应的戒烟时长)的多变量调整(logistic/linear/Cox/倾向评分/调查加权):

  • 结构性零值防护(不要插补):从不吸烟者的 pack_years 是结构性零值——根据类别定义,其值已知为 0,而非缺失。对其进行插补(MICE/MNAR)会为未暴露受试者虚构剂量,并扭曲暴露对比。在插补剂量/时长列之前,明确设置推定的零值(IF status == 'never' THEN dose = 0),且仅插补暴露人群中确实缺失的剩余值。/clean-data 会标记剂量为 NULL 的 never 行(scripts/check_structural_zero.py)。
  • 完整病例分析样本骤减(调整状态,而非剂量):如果完整病例模型中的剂量变量将零值存储为 NULL,就会整体剔除未暴露层,导致 n 骤减(通常为 40–60%),并扭曲亚组估计。应调整分类状态(从不/既往/当前);连续型剂量仅用于暴露人群的次要分析。报告模型拟合前后的 n,并确认分母没有在不知情的情况下骤减。
协变量选择:横断面结局模型中的过度调整

适用于任何横断面/单次访视结局回归(未观察到时间顺序)。应基于因果关系而非统计结果选择协变量:

  • 不要调整结局的后果或中介变量——这会造成过度调整/碰撞偏倚,并去除部分正在研究的效应。典型情况:以 eGFR 为结局时,血清尿酸经肾脏排泄(eGFR 降低会升高尿酸),因此它是结局的后果,而不是混杂因素;血压和 HbA1c 通常也同样处于下游。根据 DAG 将每个候选协变量归类为混杂因素/中介变量/结局后果/碰撞变量,并且仅在主模型中保留混杂因素。
  • “表 1 中存在差异”不是选择混杂因素的标准。 不平衡只能作为考虑某个变量的理由;无论中介变量或结局后果变量有多么不平衡,都不应纳入模型。
  • 报告可疑协变量敏感性分析 + VIF。 主模型应简约,并基于既往研究/研究设计;将更完整的模型作为敏感性分析,纳入或剔除可疑协变量,并展示主要估计值是否变化。打印 VIF 和实际拟合的 n。如果剔除该协变量会导致估计值发生实质性变化,应在摘要和结论中说明。
  • 在相同分析样本中比较调整前后结果。 扩展调整加入存在缺失值的协变量时,分析样本量会缩小(例如,从 84 个事件降至 49 个事件);将该估计值与全样本的未调整估计值比较,会混淆调整的影响和被排除对象的影响。应在缩小后的完整病例样本中重新拟合未调整模型,并在该样本中并列报告未调整和调整后的结果,以及全样本估计值;切勿根据不同分析样本之间的比较描述“调整改变了估计值”(也可以使用多重插补,使所有模型使用相同的分析样本)。

评论

支持 Markdown