agentsclimarketplace

Paper reproduce

Skill BioTender-max/awesome-bio-agent-skills/skills/medgeclaw/paper-reproduce

A curated collection of AI agent skills for biomedical research, covering genomics, proteomics, single-cell analysis, clinical AI, and protein design.

Install
npx -y skills add BioTender-max/awesome-bio-agent-skills --skill paper-reproduce

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.

What its author says it does

Copied from the file, not written here

Systematic methodology for reproducing published academic papers using provided data. Use when the user asks to reproduce, replicate, or verify results from a published paper, including sample selection, descriptive statistics, regression analyses, and generating reproduction reports (Markdown + LaTeX PDF). Covers the full pipeline: data exploration, variable identification/mapping, sample filtering, variable construction, statistical analysis, result comparison, and documentation. Applicable to any observational study, clinical cohort, or survey-based research paper.

SKILL.md

8.2 KB, as published. Nobody here has run it

Paper Reproduce — 论文复现方法论

核心原则

  1. 先探索后建模 — 永远不要假设变量名和编码,必须从数据中验证
  2. 逐步筛选逐步核对 — 每一步样本量都要和论文对比
  3. 容忍偏差但记录偏差 — harmonized 数据集和原始数据必然有差异,关键是记录和解释
  4. 边干边说 — 每完成一步立即输出中间结果,不要等全部跑完才汇报

复现流程(6 阶段)

Phase 1: 任务理解 + 数据探索

输入: 论文 PDF/任务文档 + 数据文件
输出: 变量映射表 (variable_mapping.json)
  1. 精读任务文档,提取:

    • 样本筛选流程(每步的 n 和排除条件)
    • 因变量、自变量、协变量的定义和编码
    • 统计方法(回归类型、标准误类型、标准化方式)
    • 期望的表格数值(用于验证)
  2. 探索数据结构:

    df = pd.read_stata('data.dta')  # 或 read_csv/read_sas
    print(f"维度: {df.shape}")
    print(f"变量: {df.columns.tolist()}")
    # 按前缀分组查看变量
    # 检查是否有 wave/time/year 标识
    
  3. 变量识别四步法(最关键的步骤):

    • 精确匹配: 搜索论文提到的变量名(如 dc009s1
    • 语义搜索: 搜索关键词(如 mem, recall, orient
    • 范围验证: 检查候选变量的值域是否匹配论文描述(如 0-10)
    • 交叉验证: 用已知关系验证(如 total = sub1 + sub2 + sub3

经验教训: harmonized 数据集的变量名与原始问卷变量名通常完全不同。 不要假设 dc009s1 存在,要搜索语义等价的变量。

Phase 2: 变量构建 + 验证

输入: variable_mapping.json
输出: 构建好变量的 DataFrame
  1. 逐个构建变量,每个变量构建后立即验证

    • 值域是否在期望范围内
    • 缺失率是否合理
    • 均值/比例是否接近论文报告值
  2. 组合变量的验证技巧

    # 验证 total = sub1 + sub2 + ... + subN
    calc = df['sub1'] + df['sub2'] + df['sub3']
    diff = (df['total'] - calc).abs()
    match_rate = (diff < 0.01).mean()
    print(f"吻合率: {match_rate:.1%}")
    
  3. 分类变量编码注意事项

    • Stata/SPSS 导入的 category 变量通常是中文标签
    • value_counts() 检查所有可能值
    • 论文说的"未婚"可能包含离异、丧偶、分居等多种状态
    • 论文说的"低于初中"教育,在 harmonized 数据中可能对应不同的分类变量

经验教训: 当变量均值与论文偏差大时(如 MS 均值 7.11 vs 论文 5.73), 优先怀疑变量构成定义有误,而非数据问题。尝试不同的子变量组合。

Phase 3: 样本筛选

输入: 构建好变量的 DataFrame
输出: 分析用的最终样本
  1. 严格按论文的顺序逐步排除
  2. 每一步都输出并对比
    Step N: 描述 → 保留 XXXX [论文: YYYY, 差 ZZZ]
    
  3. 如果某步偏差大(>10%),停下来排查
    • 检查变量缺失率:哪个变量贡献了最多缺失?
    • 如果是认知/生理测量变量缺失率高,考虑放宽定义
    • 对比论文的排除人数确定偏差来源

经验教训: 要求多个变量同时不缺失会导致排除量远超预期。 如果论文未说明如何处理缺失,尝试:(a) 只要求核心变量不缺失, (b) 分步排除而非一次性 dropna(subset=all_vars)

Phase 4: 统计分析

输入: 最终样本
输出: Table 1, Table 2, Table 3 等

描述统计 (Table 1)

# 连续变量: M(SD) + t 检验
t_stat, p_val = stats.ttest_ind(group1[var], group2[var])

# 分类变量: % + 卡方检验
ct = pd.crosstab(grouping_var, category_var)
chi2, p_val, dof, expected = stats.chi2_contingency(ct)

回归分析 (Table 2/3)

# 标准化所有变量(因变量和自变量都标准化 → 得到标准化 beta)
from sklearn.preprocessing import StandardScaler
df_std = df[all_vars].copy()
for col in df_std.columns:
    df_std[col] = (df_std[col] - df_std[col].mean()) / df_std[col].std()

# OLS + 稳健标准误 (HC3)
model = smf.ols('y ~ x1 + x2 + ...', data=df_std).fit(cov_type='HC3')

交互项处理

# 标准化后再构建交互项
df_std['interaction'] = df_std['var1'] * df_std['var2']

分层分析

# 对每个子群体分别标准化后回归(不要用全样本的标准化参数)
for subset_name, subset in subsets.items():
    sub_std = subset[vars].copy()
    for col in sub_std.columns:
        sub_std[col] = (sub_std[col] - sub_std[col].mean()) / sub_std[col].std()
    model = smf.ols(formula, data=sub_std).fit(cov_type='HC3')

经验教训:

  • 标准化beta要求因变量和自变量都标准化
  • HC3 是最常用的稳健标准误,但不同软件默认不同(SPSS 用 HC0)
  • 分层分析时去掉分层变量(如按性别分层时不控制性别)
  • 分层分析对每个子群体独立标准化

Phase 5: 结果对比 + 偏差分析

逐项核对论文报告值,使用三级标记:

标记含义标准
验证数值接近(允许末位四舍五入差异),显著性一致
⚠️趋势一致方向相同,但显著性不同(通常因样本量差异)
未复现方向相反或差距太大

对每个 ❌ 和 ⚠️ 给出可能原因。

Phase 6: 输出文档

同时生成两种格式:

  1. Markdown 文档: 完整的复现报告,包含方法、结果、对比表、偏差讨论
  2. LaTeX → PDF: 专业排版的 PDF 报告

LaTeX 编译注意事项:

  • 中文用 ctex 包 + xelatex 编译
  • 流程图用 tikz
  • 表格用 booktabs(三线表)
  • \checkmark 需要 amssymb
xelatex -interaction=nonstopmode report.tex  # 第一遍
xelatex -interaction=nonstopmode report.tex  # 第二遍(交叉引用)

输出目录结构

reproduce_<study>/
├── scripts/
│   └── full_analysis.py      # 主分析脚本(可独立运行)
├── figure1.json               # 筛选流程数据
├── table1.csv                 # 描述统计
├── table2.csv                 # 回归结果
├── table3.csv                 # 分层/补充分析
├── analysis_output.txt        # 完整控制台输出
├── 复现报告.md                # Markdown 报告
├── 复现报告.tex               # LaTeX 源文件
├── 复现报告.pdf               # PDF 报告
└── data files...              # 原始数据(不修改)

常见陷阱

陷阱表现解决
harmonized vs 原始数据变量名不同、缺失模式不同、编码不同基于语义+范围搜索变量,不要硬编码变量名
组合变量定义错误均值偏差大(>1SD)用 total = sum(parts) 验证;尝试不同的子变量组合
缺失值级联多变量同时要求非缺失 → 排除量远超论文分步排除;先排核心变量缺失,再排协变量缺失
分类变量编码中文标签多义("未婚"的范围)value_counts() 全部列出,逐一确认
标准化方式β系数方向对但数值偏大/偏小确认是全变量标准化还是只标准化连续变量
稳健标准误类型p 值略有差异HC0/HC1/HC3 选择;SPSS 默认 HC0
Docker 文件同步脚本修改后容器内仍是旧版每次修改后 docker cp 同步

参考

详细的调查数据库特定操作,参见对应的数据库 skill(如 charls-reproduce)。

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.