# Multifactor Correction Ppt

> 临床剂量优化多因素校正分析并生成PPT报告。Use when: 用户需要对临床数据做剂量优化分析，包括PFS生存分析、亚组分析、基线比较、KM曲线、逐步Cox回归、Logistic回归、PSM倾向性评分匹配、IPTW逆概率加权、敏感性分析，并将结果整合为PPT幻灯片。关键词：多因素校正、Cox回归、KM曲线、PFS、ORR、亚组分析、PPT报告、生存分析、临床统计、PSM、IPTW、倾向性评分、剂量优化、dose optimization。

- Skill: `irislin7/multifactor-correction-ppt` (Agent Skill, multi-file: 5 files)
- Install (CLI): `npx skillmds@latest add irislin7/multifactor-correction-ppt`
- Raw SKILL.md: https://api.skillmd.com/api/skills/irislin7/multifactor-correction-ppt/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: Irislin7 (https://skillmd.com/u/irislin7)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/irislin7/multifactor-correction-ppt

---


# 剂量优化多因素校正分析 + PPT报告生成

## 适用场景

- 对临床试验数据进行剂量优化相关的多因素校正分析
- 比较不同剂量/治疗组的PFS/ORR，逐步加入协变量校正
- 使用PSM（倾向性评分匹配）和IPTW（逆概率加权）校正基线不平衡
- 通过敏感性分析验证结论稳健性
- 生成包含完整分析结果的PPT报告

## 前置条件

- Python 环境已安装：pandas, lifelines, matplotlib, python-pptx, statsmodels, openpyxl, scikit-learn, scipy
- 可选：pyreadstat（如需读取 SAS 数据集）

## 执行步骤

### Step 1: 交互式参数收集

通过以下 5 步问答收集分析参数。如用户已提供部分信息则跳过对应问题。

#### Q1 - 项目与数据源

询问用户：
- **项目名称**（用于PPT封面标题）
- **数据源类型**：
  - A) 已整理的分析数据（CSV/Excel 单表）— 推荐，直接使用
  - B) ADaM Excel（多 sheet: ADSL/ADTTE/ADRS 等）— 需指定合并逻辑
  - C) SAS 数据集目录（.sas7bdat）— 需指定域和合并逻辑
- **文件路径**
- **PPT 模板路径**（可选，不指定则使用默认样式）

#### Q2 - 剂量组定义

询问用户：
- 哪个列包含剂量/治疗组信息？
- 需要比较哪些组？（试验组 vs 参考组，参考组为HR分母）
- 是否有多个比较方案？（如同线比较 + 跨线比较）

#### Q3 - 终点变量

询问用户：
- PFS 时间列名
- 删失列名及编码规则（如 CNSR: 0=事件发生, 1=删失）
- ORR 列名及编码规则（如 orr: 1=缓解, 0=未缓解）
- 若使用 ADaM 数据源：指定 PARAMCD 筛选条件（如 PARAMCD='PFS'）

#### Q4 - 协变量

询问用户：
- 列出所有需要校正的协变量及其在数据中的列名
- 每个协变量的类型（分类/连续）和编码方式
- 是否有特殊衍生规则？（如：从其他列衍生、需要分组等）
- 若某些变量在数据源中不存在，是否需要从其他文件补充？

#### Q5 - 确认

汇总所有参数并展示给用户确认，格式参考 [参数模板](./assets/params-template.md)。

### Step 2: 数据加载与预处理

根据数据源类型执行不同的加载逻辑：

**模式 A（已整理数据）：**
1. 读取 CSV/Excel 文件
2. 验证必要列是否存在
3. 处理缺失值和数据类型转换

**模式 B（ADaM 多 sheet）：**
1. 读取 ADSL sheet → 提取基线特征（SUBJID, 治疗组, 协变量）
2. 读取 ADTTE sheet → 筛选指定 PARAMCD → 提取 AVAL, CNSR
3. 读取 ADRS sheet → 筛选 BOR → 衍生 ORR
4. 按 SUBJID 合并所有 sheet
5. 应用用户指定的衍生规则

**模式 C（SAS 数据集）：**
1. 使用 pyreadstat 读取指定 .sas7bdat 文件
2. 合并逻辑同模式 B

**通用预处理：**
- 根据删失编码统一为：event=1 表示事件发生, event=0 表示删失
- 协变量 dummy 编码（二分类变量转为 0/1）
- 仅保留比较组中的受试者

### Step 3: PFS 生存分析概况

- 计算各组的样本量、事件数、删失数
- 计算各组中位PFS（mPFS）及95%CI
- 计算6个月、9个月、12个月PFS率

### Step 4: 亚组中位PFS

按用户指定的各协变量分层，分别计算各治疗组的mPFS：
- 每个协变量的每个水平单独计算
- 计算亚组内的HR和95%CI

### Step 5: 基线特征比较

- 列出各比较组的基线特征分布（n, %）
- 使用卡方检验或Fisher精确检验计算P值
- P<0.05的行标注显著

### Step 6: KM生存曲线

绘制各比较组的PFS KM曲线：
- 添加删失标记（竖线tick marks）
- 添加风险表（Number at risk）
- 添加y=50%虚线标注中位PFS
- 标注HR、95%CI、Log-rank P值
- X轴每2个月一个刻度
- 参考组为HR分母（HR<1表示试验组优于参考组）
- 保存为PNG，分辨率≥150 DPI
- 使用中文字体（SimHei/Microsoft YaHei）

### Step 7: 逐步单因素Cox回归

- **方法**：每次在基础模型（仅含arm变量）上加入一个协变量
- **输出**：每个模型的校正后HR、95%CI、P值、AIC、BIC
- 按AIC排序标识最优模型
- 列出未校正基础模型结果作为对照

### Step 8: ORR逐步单因素Logistic回归

- **方法**：与Step 7相同逐步法
- **因变量**：ORR（1=缓解, 0=未缓解）
- **输出**：每个模型的校正后OR、95%CI、P值、AIC、BIC
- 按AIC排序标识最优模型

### Step 9: PSM 倾向性评分匹配

- **倾向性评分估计**：使用 statsmodels Logit（**无正则化**），因变量为治疗组指示变量，自变量为所有非零方差协变量。不使用 sklearn（其 L2 正则化会压缩 PS 分布）。
- **匹配方法**：最近邻贪心匹配（1:1），距离度量为 Logit 距离，caliper=0.2×SD(logit(PS))。**不随机打乱**治疗组顺序（确保可重现）。
- **匹配后评估**：
  - 计算匹配前后各协变量的标准化均数差（SMD）
  - 绘制 Love plot（SMD 变化图），阈值线 SMD=0.1
- **匹配后分析**：
  - Cox 回归使用 **cluster-robust SE**（`cluster_col='pair_id'`），处理匹配对内相关性
  - KM 曲线 + Cox HR + 95%CI + P值
  - ORR 比较（Fisher精确检验 + Logistic回归）

### Step 10: IPTW 逆概率加权

- **PS 估计**：同 Step 9，使用 statsmodels Logit（无正则化）
- **权重计算**：
  - 稳定化 IPTW 权重：治疗组 $w = \bar{p}/\hat{p}_i$，对照组 $w = (1-\bar{p})/(1-\hat{p}_i)$
  - **不截断权重**（小样本下截断引入偏差，匹配R默认行为）
- **平衡检查**：加权后 SMD 应 < 0.1
- **加权分析**：
  - Weighted Cox 回归（使用 robust 标准误）→ HR + 95%CI + P值
  - Weighted Logistic 回归（GLM Binomial, freq_weights）→ ORR OR + 95%CI + P值
  - 加权 KM 中位数及CI：使用手动 Greenwood + log变换CI（匹配R survfit），不使用lifelines加权KM（对非整数权重CI有偏）

### Step 11: 敏感性分析

- 生成多种协变量组合（如：全部协变量、去除每个协变量、两两组合等）
- 对每种组合重复 IPTW 分析
- 汇总所有组合的 HR 和 95%CI
- 绘制 Forest plot：
  - Y轴列出各协变量组合
  - X轴为 HR（对数刻度）
  - 添加 HR=1 的参考线
  - 标注每个组合的 HR (95%CI) 数值

### Step 12: 生成PPT报告

使用 python-pptx 生成PPT，详细格式要求见 [PPT格式规范](./references/ppt-format.md)。

如用户提供了 PPT 模板文件，则以模板为基础添加幻灯片。

幻灯片结构（约20张）：
1. 封面（项目名称、比较方案、日期）
2. 分析方法概述
3. PFS 概况汇总表
4. 基线特征比较表
5. 亚组 mPFS 表格
6. KM 生存曲线图（每个比较一张）
7. Cox 逐步回归结果表
8. ORR 概况
9. ORR 逐步 Logistic 回归结果表
10. PSM 方法描述
11. PSM 匹配平衡性（Love plot）
12. PSM 匹配后 KM 曲线
13. PSM 匹配后 Cox/ORR 结果
14. IPTW 方法描述
15. IPTW 加权后平衡性
16. IPTW 加权后 KM 曲线
17. IPTW 加权后 Cox/ORR 结果
18. 敏感性分析汇总表
19. Forest plot（多方法HR汇总）
20. 关键发现与结论

### Step 13: 汇总与交付

- 总结各比较组的关键发现
- 列出多方法对比（未校正 vs 逐步Cox vs PSM vs IPTW）
- 评价结论稳健性
- 交付PPT文件

## 代码参考

详细代码框架见 [分析方法参考](./references/analysis-methods.md)

## 技术栈

| 库 | 用途 |
|----|------|
| pandas + openpyxl | 数据读取（CSV/Excel） |
| pyreadstat | SAS 数据集读取（可选） |
| lifelines | KM估计、Cox回归、Log-rank检验 |
| statsmodels | Logistic回归 |
| scikit-learn | PSM倾向性评分估计 |
| scipy | 统计检验（Fisher、卡方） |
| matplotlib | KM曲线、Forest plot、Love plot |
| python-pptx | PPT生成 |

