红曲数据分析助手
定位(AI 必读)
本 skill 是 AI 的工作手册,把"一份药学研究 Excel 数据 → 一份药学期刊风格 STROBE 数据分析报告(Word,含三线表+图表)"的全流程固化。它是「药学数据分析助手」的 红曲/血脂康 domain 专用分支,默认按"血脂康 vs 阿托伐他汀治疗老年原发性高脂血症:血脂达标率及安全性"的真实数据结构设计,但脚本顶部留有 CONFIG 适配块,换数据集只需改 CONFIG。
完整工作流(六步,必须按顺序执行):
Step 1 数据体检 缺失率 / 异常值 / 日期格式 / 单位一致性 / 清洗建议清单
↓
Step 2 Table 1 两组基线可比性(连续:均值±SD 或 中位数(IQR);分类:n(%));每行给统计量+ P 值
↓
Step 3 主要结局 达标率 χ²+RR/RD(95%CI);MACE 用 Cox+KM;安全性(肝酶异常);PSM 匹配后平衡性
↓
Step 4 图表(≥4) KM 生存曲线(含 risk table) / 亚组森林图 / 随访轨迹或箱线图 / 相关性热力图 / PSM Love plot
↓
Step 5 中介效应 任务书缺变量时→机制替代变量;Bootstrap 5000 次,报间接/直接/总效应+95%CI
↓
Step 6 结论要点 3–5 条,数据驱动;文末附【图表清单】+【方法学说明】+【需人工确认事项】
通用统计规则(正态性判定、检验选型、PSM、Cox、Bootstrap)继承「药学数据分析助手」,本 skill 仅补充 红曲课题的已知数据陷阱 与 格式铁律。
开工前:材料矛盾核查(红曲课题特有,必须先做)
红曲课题的数据集常被套用错模板,开工前必须核对两项结构性冲突,否则整份报告建立在错误假设上:
| # | 冲突点 | 核查动作 | 处理 |
|---|---|---|---|
| 1 | 分组数不符:任务书常写"两组",但真实数据可能是三组(血脂康单药 / 阿托伐他汀单药 / 血脂康联合) | 跑 value_counts(分组列) 看真实组数 | 与研究者确认主分析分组。默认"两单药组对照",第三组仅作描述+敏感性分析 |
| 2 | 结局变量不存在:任务书常把"认知队列"模板(MoCA/MCI/hs-CRP/HOMA-IR)错贴到高脂血症数据 | 检查数据集列名是否含这些变量 | 不存在则改用真实结局(LDL-C 达标、MACE、肝酶异常),并在报告"研究背景与数据说明"透明披露 |
PII 处理:数据集若含姓名/身份证号/联系电话,分析前必须删除(即使标注为虚构标识),并在体检清单中登记。
单位一致性:高脂血症数据的血脂多为 mmol/L、酶为 U/L、肌酐为 μmol/L。开工前全表扫描"同一指标是否混用两种单位",若混用,必须先换算再分析,并在报告中注明换算关系。
Step 1 · 数据体检
输出内容(写入 results.json 的 qc 键):
- 样本量与中心数:
len(df)、就诊中心.nunique()、分组计数、入组日期跨度。 - 缺失率:对所有列算
isna().mean()*100,仅列出 >0% 的字段。注意区分"真缺失"与"设计性缺失"(如把第三组排除于两组对照导致的 group2 缺失)。 - 异常值:对年龄/BMI/血脂/CK/肌酐按生理合理范围扫描(
outlier_count(s, lo, hi)),超界计为异常。 - 日期格式:所有日期列
pd.to_datetime,检查是否混用YYYY-MM-DD/YYYY/MM/DD/ 含时间。统一为YYYY-MM-DD。 - 变量类型判断表:标识/日期/连续/二分类/有序分类/多中心分类 → 决定后续检验方法。
- 清洗建议清单(表 0):个人标识、缺失值、单位、日期、异常值、变量类型 → 每项给"结果+处理建议"。
Step 2 · Table 1 基线特征三线表
- 连续变量:先
Shapiro–Wilk正态性检验。- 正态 →
均数±标准差+ 独立样本 t 检验(Welch 校正),统计量记t=xx.xx。 - 偏态 →
中位数(四分位距)+ Mann–Whitney U 检验,必须报标准化 Z(见 Pitfalls①),统计量记Z=xx.xx。
- 正态 →
- 二分类:
n(%);理论频数≥5 用 Pearson χ²(记χ²=xx.xx),<5 用 Fisher 精确检验(记Fisher)。 - 有序/多分类(如 ASCVD 危险分层):行×列 χ²,结果写各层
n(%)。 - 每行必须给 统计量 + P 值(P 值格式见格式铁律)。
- 三线表格式:仅 3 条横线(顶线/栏目线/底线),无竖线(实现见
references/format_spec.md)。
Step 3 · 主要结局分析 + PSM
- 主要疗效(二分类达标率):χ² 比较率,计算 RR、RD 及其 95%CI(公式见脚本
risk_ratio/risk_diff)。 - 安全性:肝酶异常(ALT>3×ULN)同法。
- 硬终点(时间-事件):Cox 比例风险回归报 HR + 95%CI,KM 法 + log-rank 检验,KM 必须含 at-risk 表(Pitfalls⑤)。
- PSM(控制混杂):
- Logistic 回归估 PS;协变量含人口学+基线血脂+肝功能+合并用药+中心。
- 1:1 最近邻匹配,卡钳 =
0.2 × SD(logit PS)。 - 必须保留原始索引(Pitfalls②),否则 SMD 错位。
- 报告匹配前后各 n、最大 |SMD|(目标 <0.10),并画 Love plot。
- 匹配后重跑 Table 1(含匹配前失衡的变量)与主要结局。
Step 4 · 图表(≥4 张,图题在图下方)
| 图 | 内容 | 要点 | |---|---|---| | 图 1 | PSM Love plot | 匹配前后 |SMD|,虚线 0.10 参考 | | 图 2 | KM 曲线 | 含 risk table + log-rank P | | 图 3 | 亚组森林图 | 各层 HR(95%CI),含 0.2/2.2 等边标线 | | 图 4 | LDL-C 随访轨迹 / 箱线图 | 均值±SE 或 基线 vs 末次 | | 图 5 | 多重用药相关性热力图 | Spearman,annot 显示系数 |
- 中文图用
SimHei字体(matplotlib.rcParams["font.sans-serif"]=["SimHei",...])。 - 表题在表上方、图题在图下方(Word 汇编时控制)。
Step 5 · 中介效应(Bootstrap 5000)
- 任务书原拟中介变量(HOMA-IR/hs-CRP)在数据中常缺失 → 改用机制对应的可得变量(如 ΔLDL-C 中介 "治疗组→MACE"),并透明说明。
- Bootstrap 5000 次:间接效应
a×b、直接效应c'、总效应c,各报 95%CI(偏差校正百分位数)。 - 稳定性加固(Pitfalls④):① 中介前先落盘已完成结果;② 预构建设计矩阵用
np.linalg.lstsq算 a 路径,避免循环内重复 patsy 解析;③ 每 1000 次gc.collect();④ 整体try/except兜底,异常时跳过且不污染其他结果。
Step 6 · 结论要点 + 清单
- 3–5 条,数据驱动(直接引用率/HR/RR+95%CI),规避禁用词(见下)。
- 文末附【图表清单】(表0/表1/…/图1/图2/…)。
- 附【方法学说明】(可直抄进论文"统计分析"段)与【需人工确认事项】(结局替代、分组、中心数、PSM 后 |SMD| 略超阈值、罕见事件等)。
格式铁律(必须保留)
- 三线表:只有 3 条横线(顶线粗、栏目线、底线粗),禁止任何竖线。表题在表上方。
- P 值格式:
P<0.001/P=0.032(保留 3 位)/P>0.05。绝不写P=0.000。 - 数字精度:正文与表格精确到小数点后 1–2 位。
- 单位换算提醒:单位不统一的变量必须先换算再分析,并在报告"数据体检"或脚注注明换算关系。
- 图题在图下方,图内需含必要标注(KM 的 risk table、森林图的 HR 标签)。
- 禁用词(报告正文绝对禁止出现):
根据数据显示/由此可见/结果表明具有一定/差异较为明显/呈现出一定趋势。
Pitfalls(红曲课题已踩过的 5 个坑,必须规避)
- Mann–Whitney 报标准化 Z:
scipy.stats.mannwhitneyu返回的是 U 统计量,不是 Z。需手算Z=(U−n1·n2/2)/√(n1·n2·(n1+n2+1)/12),再报Z=xx.xx。 - PSM 索引对齐:匹配后如果用
reset_index(drop=True)再按行算 SMD,会与原始X错位导致 SMD 失真。须X.index = ps_df.index并保留iloc选出的原始索引。 - Cox 置信区间:
lifelines的summary中exp(coef) lower/upper 95%列在部分版本不可靠,必须用se(coef)重算HR=exp(coef)、CI=exp(coef±1.96·se)。森林图同样。 - Bootstrap 中介内存崩溃:5000 次循环内反复 patsy 解析公式易触发段错误/内存峰值被杀。预构建设计矩阵 +
lstsq+ 显式gc.collect()+ 预落盘 +try/except。 - KM 必须含 risk table:药学期刊硬要求。在图下方用
plt.figtext逐时点写 at-risk 人数,并给足bottom留白避免与 xlabel 重叠。
适配新数据集(换一份药学研究数据怎么用)
- 复制
scripts/analyze.py,改顶部CONFIG:src/out路径;sheets各逻辑表名;id_col;pii_cols;date_cols。group_col+two_arm_map(你的"两组"映射)+treat_name(trt=1 那组)。primary_var/safety_var/event_var/time_var/ldl_base/ldl_last。covars_cont/covars_cat/psm_vars列表。unit_note(写明单位核对结论)。
- 亚组定义(
build_subgroups)与中介变量(run_mediation)按新数据调整(见脚本注释)。 - 运行
analyze.py→ 生成results.json+figs/*.png。 - 复制
scripts/build_doc.py,按需改标题/封面;运行 → 生成 Word。 - 校验:表格数、图片数、禁用词命中、三线表边框(脚本见
references/format_spec.md)。
环境:用隔离 venv 安装
pandas numpy scipy statsmodels matplotlib seaborn scikit-learn lifelines openpyxl python-docx。详见references/format_spec.md末尾"环境搭建"。
触发词
红曲数据分析 / 血脂康分析报告 / STROBE 数据分析报告 / 高脂血症 RCT 出表 / 基线三线表 / 红曲 vs 他汀 KM 曲线 / 真实世界研究出报告
Scan to join WeChat group