Tipping-point 敏感性分析 Tipping-Point Sensitivity Analysis (Tipping Point)
对试验组缺失连续结局施加一系列 MNAR delta shift,寻找主结论首次翻转所需的缺失值偏离程度。
统计原理
先在 MAR 下为缺失的目标访视值生成预测值 ,再只对指定治疗组的缺失值施加 shift:
本页终点数值越大越好,所以 表示假设 Drug A 的未观察结局比 MAR 预测更差。对每个 都重新生成多套数据、拟合相同 ANCOVA 并按 Rubin 规则合并,得到治疗差 、95% CI 和 p 值。
改变缺失结局的假定偏移量,找到主要结论首次翻转的临界点。
“临界点”是预设结论第一次翻转的 shift,例如两侧 p 值首次达到 0.05 或 95% CI 首次包含 0。它回答的是:Drug A 缺失者必须比 MAR 预测差多少,主结论才不再成立? 临界 shift 是否临床可信,必须结合量表范围、已观测变化及停药原因解释。
什么时候用
主分析依赖 MAR,而方案要求在 MNAR 假设下检验结论稳健性时使用。最常见场景是连续终点有差异性缺失,针对试验组或各组缺失者施加 delta adjustment。
SAP 里长这样:
A tipping-point sensitivity analysis will be performed. Following multiple imputation under MAR, a shift parameter from 0 to -8 points will be applied to imputed Week 8 values for missing subjects in the Drug A group. The ANCOVA model will be repeated at each shift, and the shift at which the treatment conclusion is reversed will be reported.
必须明确:修改哪一组、只改缺失值还是全部值、shift 正负方向、网格、插补模型、分析模型和“翻转”的判据。
适用条件速查卡
| 项 | 条件 |
|---|---|
| 本页终点 | 连续 AVAL,数值越大越好 |
| 基准假设 | 条件于 TRTAN 与 BASE 的 MAR 多重插补 |
| MNAR 偏离 | 仅 Drug A 缺失 AVAL 加 shift |
| 网格 | 0, -1, …, -8;程序计算后按 0 到 −8 展示 |
| 对照组缺失 | 保持 MAR,不加 shift |
| 分析模型 | 每套数据 AVAL = TRTAN + BASE |
| 翻转判据 | 预设两侧 p≥0.05 或 95% CI 包含 0;不能分析后改口径 |
核心 SAS 代码
%macro tipping(data=adeff, smin=-8, smax=0, sinc=1);
%local ncase j shift;
%let ncase=%sysfunc(floor(%sysevalf((&smax-&smin)/&sinc)));
ods select none;
%do j=0 %to &ncase;
%let shift=%sysevalf(&smin+&j*&sinc);
proc mi data=&data seed=14823 nimpute=25 out=outmi;
class trtan;
monotone reg;
mnar adjust(aval / shift=&shift adjustobs=(trtan='1'));
var trtan base aval;
run;
proc reg data=outmi;
model aval=trtan base;
by _imputation_;
ods output ParameterEstimates=regparm;
run;
proc mianalyze parms=regparm;
modeleffects trtan;
ods output ParameterEstimates=miparm;
run;
data miparm;
set miparm;
shift=&shift;
run;
/* 完整下载程序把每次 MIPARM 依次累积为 TIP_RESULTS。 */
%end;
ods select all;
%mend;
ADJUSTOBS=(TRTAN='1')把偏移限定在 Drug A 且被插补的 AVAL;已观察 AVAL 不会被修改。- 每个 shift 都从同一 seed 重新插补,使网格间随机噪声尽量可比;正式分析仍应设置足够插补次数。
MODELEFFECTS TRTAN只合并治疗系数,形成每个 shift 的治疗差、CI 和 p 值。
变量解释表
| 变量 | 含义 | 典型来源 |
|---|---|---|
| USUBJID | 受试者唯一标识 | ADSL.USUBJID |
| TRT01P | 治疗显示标签 | ADSL.TRT01P |
| TRTAN | Drug A=1,Placebo=0;也是偏移选择条件 | ADSL.TRT01PN |
| BASE | 完整基线值 | ADEFF.BASE |
| AVAL | 目标访视值,部分缺失 | ADEFF.AVAL |
| SHIFT | 只加到 Drug A 缺失 AVAL 的 delta | 敏感性分析网格 |
| PROBT | 每个 shift 下 Rubin 合并治疗效应的两侧 p 值 | PROC MIANALYZE |
输出对照
本页 9 个 shift 已在 SAS 9.4 TS1M8 / SAS/STAT 15.3 实跑。正式结果应保留完整网格,而不是只报最有利或最不利的一点;下表展示关键节点。
| SHIFT | ESTIMATE | 95% CI | PROBT |
|---|---|---|---|
| 0 | 5.5448 | (5.2948, 5.7948) | <.0001 |
| −4 | 4.4782 | (3.5396, 5.4167) | <.0001 |
| −8 | 3.4115 | (1.5811, 5.2419) | 0.0003 |
SHIFT 映射 Drug A 缺失值相对 MAR 的假设偏移;ESTIMATE 与 CI 映射治疗差;PROBT 映射 的两侧 p-value。本例扫描至 −8 仍未翻转,因此结论是“在预设范围内未达到临界点”,不是外推为任何 MNAR 情形下都稳健。
按 SHIFT=0,-1,…,-8 展示,在第一行 PROBT≥0.05(或 CI 首次包含 0,依 SAP)处标记 tipping point。若扫描至 −8 仍未翻转,应写“在预设范围内未达到临界点”,不能外推为永远稳健。
示例数据与程序
- example.csv — 30 例、Drug A 缺失较多的原创连续终点数据
- example.sas — 9 个 shift 的 MI、ANCOVA、Rubin 合并和汇总完整程序
常见坑
Tipping point 是假设压力测试,不是调参工具
- shift 方向写反:本页越大越好,所以负 shift 才是对 Drug A 不利;越小越好的终点要重新定义。
- 把 shift 加到所有人:delta adjustment 通常只作用于被插补的指定记录,不能改动已观察数据。
- 只扫到刚好显著:网格、步长和停止规则应预设,并展示结论两侧的邻近点。
- 混淆 estimand:插补对象与 intercurrent event 策略不一致时,漂亮的临界图也回答错问题。
- 只报 p 值:临床解释需要 shift 的量纲、治疗差和 CI;“需要差 6 分才翻转”才可与量表意义比较。
- 把未翻转说成证明 MAR:结果只说明对已扫描的 MNAR 偏离稳健,不会验证真实缺失机制。
SAS 实现依据:PROC MIANALYZE Tipping-Point 官方示例。敏感性分析边界依据:ICH E9(R1) 与 EMA Missing Data Guideline。