IVRT 数据统计分析与等效判定 (Equivalence Analysis)
何时使用
- 用户说"IVRT 等效判定""f2 相似因子""释放曲线相似性""TS vs RS 等效统计""IVRT ANOVA"
- 用户有原始浓度数据,想 一步到位完成释放速率计算 + 等效判定(推荐格式
raw) - 用户已完成 IVRT 累计释放量计算,需要做制剂间等效性统计判定
- 用户提供了一份含 TS(受试制剂) 和 RS(参比制剂) 释放速率/累计释放数据的 Excel,要求判断是否等效
- 需要 f2 相似因子 或 90% 置信区间 方法做等效评价
- 需要 ANOVA 方差分析 多因素分解(制剂、吸收池、时间)
- 需要 动态仿真 GIF 展示 TS/RS 释放对比
与 ivrt-logan918-calc 的关系
| 阶段 | ivrt-logan918-calc | ivrt-equivalence-analysis (本技能) | |------|-------------------|----------------------------------| | 输入 | 原始浓度数据 (ug/mL) | 释放速率 / 累计释放量 / 原始浓度 | | 计算 | 透过量→累计→单位面积→%释放 | 统计比较→等效判定→ANOVA | | 输出 | 各池释放曲线 + 拟合汇总 | 等效判决 + f2 + 90%CI + ANOVA表 | | 仿真 | Logan 918-12 细胞动画 | TS vs RS 等效判定对比动画 |
典型工作流(两种路径):
路径A(分步,先ivrt-logan918-calc后本技能):
ivrt-logan918-calc 处理原始浓度 → 获得各池释放速率表
↓
本技能 --format release-rate 导入释放速率
↓
统计分析 + 等效判定 + HTML/GIF
路径B(一步到位,推荐★):
原始浓度数据(时间 / 接收池编号 / 浓度)
↓
本技能 --format raw (自动计算累计释放+释放速率+等效判定)
↓
HTML报告 + GIF仿真动画 + TS/RS对比表
路径B将 ivrt-logan918-calc 的计算管线内联到本技能中,无需分步操作。
实验设计(参照 PDF 附件)
标准 IVRT 等效性实验采用 TS×RS 配对设计(6×6 全组合):
RS1 RS2 RS3 RS4 RS5 RS6
TS1 TS1/RS1 TS1/RS2 TS1/RS3 TS1/RS4 TS1/RS5 TS1/RS6
TS2 TS2/RS1 TS2/RS2 TS2/RS3 TS2/RS4 TS2/RS5 TS2/RS6
TS3 TS3/RS1 TS3/RS2 TS3/RS3 TS3/RS4 TS3/RS5 TS3/RS6
TS4 TS4/RS1 TS4/RS2 TS4/RS3 TS4/RS4 TS4/RS5 TS4/RS6
TS5 TS5/RS1 TS5/RS2 TS5/RS3 TS5/RS4 TS5/RS5 TS5/RS6
TS6 TS6/RS1 TS6/RS2 TS6/RS3 TS6/RS4 TS6/RS5 TS6/RS6
- TS (Test Sample):受试制剂,n=6
- RS (Reference Standard):参比制剂,n=6
- 每对组合 (TSi/RSj) 为一个 IVRT 运行,获得一条释放曲线
- 共计 36 组 完整配对数据
也可支持 简化设计(n=3~6 TS × n=3~6 RS),通过输入数据自动识别。
统计方法
1. f2 相似因子(标准方法)
f2 = 50 · log₁₀{[1 + (1/n)·Σ(Rᵢ - Tᵢ)²]^(-0.5) · 100}
- Rᵢ, Tᵢ: RS 和 TS 在时间点 i 的 平均 %释放
- 判定标准:f2 ≥ 50 → 释放曲线相似
- 适用条件:n ≥ 3 个时间点,CV ≤ 15%(早期时间点 ≤ 20%)
2. 90% 置信区间法 — NMPA 非参数排序法(指导原则第14页)
依据 NMPA《局部起效化学仿制药体外释放(IVRT)与体外透皮(IVPT)研究技术指导原则(试行)》:
核心方法:基于 T/R 斜率配对比值排序的非参数统计。
T/R 比值 = 每个 TS 池释放速率 / 每个 RS 池释放速率
对所有比值从小到大排序
取指定序号的比值,转为百分单位(×100)
两阶段设计:
| 阶段 | TS 样本数 | RS 样本数 | T/R 比值总数 | 下限取第几个 | 上限取第几个 | |------|----------|----------|-------------|------------|------------| | 第一阶段 | 6 | 6 | 36 | 第 8 个 | 第 29 个 | | 第二阶段 | ≥12 | ≥12 | ≥324 | 第 110 个 | 第 215 个 |
- 等效界值:75.00% ~ 133.33%
- 判定标准:第 8 个和第 29 个比值(第一阶段的 36 个中)转化百分单位后,均在 75%~133.33% 范围内 → 等效通过
- 第一阶段不合格:可增加 4 次测试(2 次参比 + 2 次受试,每次 6个扩散池),共 18 + 18 = 324 个 T/R 比值,排序后取第 110 个和第 215 个,再次判定
3. ANOVA 方差分析
混合效应模型:
释放速率 = μ + 制剂效应 + 吸收池效应(嵌套) + 时间效应 + 残差
输出方差分析表:来源、SS、df、MS、F值、p值
4. 综合等效判决(多项标准联合)
| 方法 | 标准 | 权重 | |------|------|------| | f2 相似因子 | f2 ≥ 50 | 主要 | | T/R 比值排序 90% CI | 75%~133.33%(第8/第29 或 第110/第215) | 主要 | | ANOVA 制剂效应 | p > 0.05 | 辅助 | | 释放速率差值 | | 辅助 |
最终等效判定:
- 等效通过:f2 ≥ 50 且 排序法 90% CI 在 [75%, 133.33%] 内
- 不等效(可进入第二阶段):第一阶段 36 个 T/R 比值不通过,可补充至 324 个进入第二阶段判定
- 不等效:第二阶段 324 个 T/R 比值仍不通过,或 f2 < 50
输入 Excel 格式
格式 RAW:原始浓度数据(推荐★ — 最简格式)
表名:原始数据(自动识别含"原始""raw""浓度"的表)
| 时间(h) | 接收池编号 | 浓度(μg/mL) |
|---------|-----------|------------|
| 0.5 | TS-1 | 8.35 |
| 1.0 | TS-1 | 15.20 |
| 0.5 | RS-1 | 9.12 |
| 1.0 | RS-1 | 16.80 |
- 接收池编号中含
TS标记为受试制剂,含RS标记为参比制剂(大小写不敏感,如TS-1、RS-Batch2) - 自动执行完整计算管线:浓度 → 透过量 → 累计释放 → 单位面积累计 → √时间线性拟合 → 各池释放速率
- 自动生成 TS vs RS 对比表(含池编号、释放速率、R²)
- 同时构建 f2 相似因子所需的释放曲线数据(需提供含量参数)
- 物理参数通过参数表或
--V/--A命令行指定
格式 A:IVRT 计算结果(从 ivrt-logan918-calc 输出导入)
表名:释放速率(必填)
| 制剂 | 吸收池编号 | 释放速率(μg/cm²/√h) | 截距 | R² | 终点累计(μg/cm²) | 终点%释放 |
|------|-----------|-------------------|------|----|-----------------|----------|
| TS1 | 1 | 12.34 | 1.23 | 0.995 | 85.6 | 25.7 |
| TS2 | 2 | ... | ... | ... | ... | ... |
| RS1 | ... | ... | ... | ... | ... | ... |
- 制剂列:含 "TS" 标记为受试制剂,"RS" 标记为参比制剂(大小写不敏感)
- 列名可灵活匹配(如"斜率"可当"释放速率")
格式 B:原始释放曲线数据(更完整的分析)
表名:数据(与 ivrt-logan918-calc 格式兼容)
可选的配方表:
| 时间(h) | 制剂 | 吸收池编号 | 单位面积累计(μg/cm²) | %释放 |
|--------|------|-----------|-------------------|------|
| 0.5 | TS1 | 1 | 6.17 | 1.85 |
| 1.0 | TS1 | 1 | 12.50 | 3.76 |
| ... | ... | ... | ... | ... |
此格式支持 f2 计算(基于各时间点的平均 %释放)。
格式 C:配对宽矩阵(贴合 PDF 实验设计)
表名:设计矩阵
| 配方配对 | RS1_释放速率 | RS2_释放速率 | RS3_释放速率 | RS4_释放速率 | RS5_释放速率 | RS6_释放速率 |
|---------|------------|------------|------------|------------|------------|------------|
| TS1 | 12.3 | 12.1 | 12.5 | 12.0 | 12.4 | 12.2 |
| TS2 | 11.8 | 11.9 | 12.2 | 11.7 | 12.1 | 11.6 |
| ... | ... | ... | ... | ... | ... | ... |
(可选)参数表
表名:参数(两列 key/value)
| 项目 | 数值 | 说明 |
|------|------|------|
| 等效界值下限(%) | 75.00 | 90% CI 等效界值下限(NMPA 指导原则) |
| 等效界值上限(%) | 133.33 | 90% CI 等效界值上限(NMPA 指导原则) |
| f2 判定阈值 | 50 | f2 ≥ 此值判定相似 |
| 置信水平 | 0.90 | CI 置信水平 |
| 成品单位面积含量(ug/cm2) | 3328 | 格式B/raw需要,用于%释放 |
| 吸收池体积(ml) | 12.0 | Logan 918-12 默认值 |
| 样品面积(cm2) | 1.76625 | 有效扩散面积 |
使用前用户需确认的参数
运行本技能前,系统会提示用户确认以下参数:
╔══════════════════════════════════════════════════════════════╗
║ IVRT 等效判定 — 参数确认 ║
╠══════════════════════════════════════════════════════════════╣
║ 1. 等效界值下限 (%) [默认: 75.00] ║
║ 2. 等效界值上限 (%) [默认: 133.33] ║
║ 3. f2 判定阈值 [默认: 50] ║
║ 4. 置信水平 [默认: 0.90] ║
║ 5. 成品单位面积含量 (ug/cm²) [格式raw/B需要] ║
║ 6. TS 组成品含量 (ug/cm²) [可选,与 content-rs 配对使用] ║
║ 7. RS 组成品含量 (ug/cm²) [可选,与 content-ts 配对使用] ║
║ 8. TS 池编号列表 [纯数字池时必填,如 1,3,5,7,9,11] ║
║ 9. RS 池编号列表 [纯数字池时必填,如 2,4,6,8,10,12] ║
║ 10. 吸收池体积 (mL) [默认: 12.0] ║
║ 11. 样品面积 (cm²) [默认: 1.76625] ║
║ 12. 是否生成 GIF 动画 [Y/N, 默认: Y] ║
║ 13. 是否生成 HTML 报告 [Y/N, 默认: Y] ║
╚══════════════════════════════════════════════════════════════╝
Excel 数据格式要求
必填条件
| 检查项 | 要求 |
|--------|------|
| 文件格式 | .xlsx(不支持 .xls) |
| 数据表 | 必须包含至少一个数据表 |
| 制剂标记 | 必须能区分 TS(受试)和 RS(参比)(格式RAW通过池编号标记) |
| 释放速率 | 格式RAW:自动从浓度计算;格式A:必须有释放速率值 |
| 编号 | 必须有吸收池/样品/接收池编号 |
| 浓度精度 | 浓度数据保留 4 位小数(系统自动约束,输入超出会自动截断至 4 位) |
可选但推荐
- 参数表(自定义等效界值、V、A等统计/物理参数)
- %释放(基于含量,用于 f2 计算)
- 时间点 ≥ 3 个(f2 必要条件)
- 各时间点 CV 数据(辅助判定数据质量)
运行方式
脚本:scripts/ivrt_equivalence.py(Python 3.11+,依赖 pandas / numpy / scipy / matplotlib / pillow)
# 0) 生成 Excel 模板(含所有格式的示例 sheet)
python scripts/ivrt_equivalence.py --make-template template.xlsx
# ★推荐★ 1) 简化格式 RAW — 指定池编号映射 + 分组含量(常见场景)
python scripts/ivrt_equivalence.py --input 数据.xlsx \
--format raw \
--ts-cells 1,3,5,7,9,11 --rs-cells 2,4,6,8,10,12 \
--content-ts 3648 --content-rs 3762 \
--output-dir ./out
# 2) 简化格式 RAW — 通用用法(池编号含TS/RS标记,统一含量)
python scripts/ivrt_equivalence.py --input 数据.xlsx \
--format raw --content 3328 --output-dir ./out
# 3) 导入 IVRT 计算结果(格式A:释放速率表)
python scripts/ivrt_equivalence.py --input 数据.xlsx \
--format release-rate --output-dir ./out
# 4) 导入原始释放曲线数据(格式B:时间×制剂×累计释放)
python scripts/ivrt_equivalence.py --input 数据.xlsx \
--format profile --content 3328 --output-dir ./out
# 5) 自定义物理参数(格式raw)
python scripts/ivrt_equivalence.py --input 数据.xlsx \
--format raw --V 12 --A 1.76625 --content 3328 --output-dir ./out
# 6) 自定义等效界值(默认已为 NMPA 指导原则值 75%~133.33%)
python scripts/ivrt_equivalence.py --input 数据.xlsx \
--format raw \
--ci-lower 75 --ci-upper 133.33 \
--f2-threshold 50 --confidence 0.90 \
--output-dir ./out
# 7) 跳过 GIF / 跳过 HTML
python scripts/ivrt_equivalence.py --input 数据.xlsx \
--format raw --no-gif --no-html
新增 CLI 参数
| 参数 | 类型 | 说明 | 示例 |
|------|------|------|------|
| --ts-cells | str | 受试制剂池编号列表(逗号分隔) | 1,3,5,7,9,11 |
| --rs-cells | str | 参比制剂池编号列表(逗号分隔) | 2,4,6,8,10,12 |
| --content-ts | float | TS 组成品单位面积含量 (ug/cm²),用于各自 %释放 | 3648 |
| --content-rs | float | RS 组成品单位面积含量 (ug/cm²),用于各自 %释放 | 3762 |
当池编号为纯数字时(如 1-12),必须通过 --ts-cells / --rs-cells 指定分组。
当池编号含 "TS"/"RS" 前缀时(如 TS-1、RS-2),可自动识别,无需指定分组参数。
输出
ivrt_equivalence.html — 交互式统计报告(含全部图表内嵌)
HTML 报告必须按以下结构组织,不得缺少任何章节:
-
公式说明章节(报告最顶部):在标题和生成时间之后,判决卡片之前,插入完整"使用的统计方法与公式说明"章节。该章节必须包含 8 个公式卡片,每卡片左侧 4px 色条,顺序如下:
| 顺序 | 公式 | 色条颜色 | |:----:|------|---------| | 1 | 累积透过量 Qₙ = Cₙ × V | #2e86de(蓝色) | | 2 | 单位面积累积透过量 Qₙ / A | #2e86de(蓝色) | | 3 | Higuchi 模型 Q/A = k_H·√t + b | #2e86de(蓝色) | | 4 | 累积释放百分率 %Release = (Q/A) / C_content × 100% | #2e86de(蓝色) | | 5 | f₂ 相似因子 | #2e86de(蓝色) | | 6 | T/R 比值 90% CI 非参数排序法 | #e67e22(橙色) | | 7 | ANOVA 方差分析 | #8e44ad(紫色) | | 8 | 综合等效判决标准 | #1abc9c(青色) |
每个公式卡片必须包含:
- 公式名称(三级标题)
- 数学表达式(serif 字体,font-family: 'Cambria Math','Times New Roman',serif)
- 中文说明文字(12px,#666灰色),说明公式物理含义、各参数名称、在本报告中的实测参数值,以及判定标准(如适用)
注意:Python 脚本
ivrt_equivalence.py不自动生成此章节,必须在脚本运行完成后,由人手动在 HTML 文件<body>的<h1>标题之后、<div class="verdict-card">之前注入该章节的全部 HTML 代码。 -
实验设计摘要:TS/RS 分组统计、样品数量、等效阶段信息
-
等效判定结果:
- ✔ 或 ✘ 大图标显示最终判决(含阶段信息)
- T/R 比值 90% CI(排序法):显示阶段、排序位置(如"第8~第29个,共36个")
- f2 相似因子(含判定标准线)+ ANOVA 表
- 综合等效判决表
- 全部图表:释放速率对比、累计释放曲线、T/R 比值分布直方图、各池拟合线、配对热力图等
- 明细数据表:TS vs RS 释放速率对比表 + 描述性统计
每张数据表下方 必须紧跟一个公式标注卡片,格式为:
<div style="background:#f0f4ff;border-left:3px solid <色值>;border-radius:4px;padding:8px 12px;margin:10px 0;font-size:12px;color:#444">
<strong>对应公式</strong>:<公式表达式> · <中文说明>
</div>
| 表格/图表 | 色值 | 公式内容 | |-----------|------|---------| | ANOVA 方差分析表 | #8e44ad | SS_total = SS_between + SS_within;F = MS_between / MS_within | | TS vs RS 释放速率对比表 | #2e86de | Q/A = k_H·√t + b(Higuchi,R² 评价拟合优度) | | 释放曲线数据表 | #2e86de | Q_n = C_n × V;Q_n/A = Q_n / A(V=12.0 mL, A=1.76625 cm²) | | T/R 比值分布直方图 | #e67e22 | (T/R)_k = k_TS,i / k_RS,j;排序第8~第29,界值[75%,133.33%] | | 各池释放曲线+拟合线 | #2e86de | Q/A = k_H·√t + b;散点为实测值,实线为回归线 | | T/R 比值配对热力图 | #e67e22 | (T/R)_k = k_TS,i / k_RS,j;6×6 热力格子,颜色→偏离1.00程度 | | 累计释放曲线对比 | #2e86de | %Release = (Q/A) / C_content × 100% | | 等效判定仿真动图 | #1abc9c | f₂ ≥ 50 + 90% CI ∈ [75%,133.33%] → 等效通过 | | 综合等效判决表 | #1abc9c | ① f₂ ≥ 50 + ② 90% CI ∈ [75%,133.33%] → 等效通过 |
每张图片下方 同样必须紧跟对应公式标注卡片,格式与表格一致。
图表输出清单
| 文件 | 说明 | 新增版本 |
|------|------|---------|
| release_rate_comparison.png | 释放速率箱线图 + 均值柱状图 | v1.0.0 |
| f2_comparison.png | f2 相似因子(曲线对比 + 仪表盘) | v1.0.0 |
| cumulative_release_comparison.png | TS vs RS 累计释放曲线(均值±SD + 各池曲线) | v1.1.0 |
| tr_ratio_histogram.png | T/R 比值分布直方图(界值线 + 分位标注) | v2.1.0 |
| individual_fits.png | 各池释放曲线 + 线性拟合线(TS/RS分栏) | v2.1.0 |
| tr_ratio_heatmap.png | T/R 比值 6×6 配对热力图 | v2.1.0 |
| ivrt_equivalence_sim.gif | 等效判定仿真动图(30帧 / 3秒) | v1.0.0 |
| ivrt_equivalence_sim.png | 动图静态封面 | v1.0.0 |
ivrt_equivalence_sim.gif — TS vs RS 等效判定仿真动图
- 左列:6 个 TS 池(单独着色)
- 右列:6 个 RS 池(单独着色)
- 每池显示该池实时 %释放(或释放速率归一化值)
- 进度条/雷达:实时显示当前等效统计值(f2 / CI 比值)
- 顶部:当前等效判决(通过/待定/不通过)
- 时间推进动画:从 t=0 到终点,粒子累积
- 深色背景(
#0a0f1e),玻璃质感
f2_comparison.png — f2 相似因子静态对比图(备用)
数据表格
- TS vs RS 释放速率对比表(含池编号、释放速率、R²)
- 描述性统计(每组 n/均值/SD/RSD/CV)
- 等效判定明细表
依赖
# Python 环境要求
pandas>=1.5
numpy>=1.24
scipy>=1.10 # t-test, f_oneway, norm
matplotlib>=3.7
pillow>=9.0 # GIF 输出
补充说明
- 法规锚点:NMPA《局部起效化学仿制药体外释放(IVRT)与体外透皮(IVPT)研究技术指导原则(试行)》、ChP2025 通则、USP<1724>
- 等效判定:采用非参数 T/R 排序法(75%~133.33%),分两阶段。第一阶段 6+6=36 个比值取第 8/29;第二阶段 18+18=324 个比值取第 110/215
- 单位一致性:释放速率用 ug/cm²/√h,%释放用 %,T/R 比值用百分单位 %
- 浓度精度:所有测量值自动保留 4 位小数
- 本技能不做:实验设计咨询、样品制备指导、临床试验等效(仅体外释放等效)
- 格式选择建议:
- 推荐
--format raw:用户有原始浓度数据时的首选,一步到位 - 若已通过
ivrt-logan918-calc算出释放速率,可用--format release-rate - 若已有累计释放曲线数据且需要 f2 计算,可用
--format profile
- 推荐
- 新图表说明:
- T/R 比值分布直方图:直接展示 NMPA 排序法的 36/324 个配对比值分布,标注等效界值和分位位置
- 各池释放曲线 + 拟合线:每个细胞的实际累计释放散点与线性回归线,验证拟合质量
- T/R 比值配对热力图:6×6 矩阵热图,对应实验设计,颜色指示比值是否在界值内
版本变更记录
| 版本 | 日期 | 变更 |
|------|------|------|
| 1.0.0 | 2026-07-22 | 初版:f2 相似因子、90% CI(Welch t)、ANOVA、GIF、HTML |
| 1.1.0 | 2026-07-22 | 新增 --format raw 简化格式、--V/--A 参数 |
| 2.1.0 | 2026-07-22 | 新增 3 张图表 + 池编号映射 + 分组含量 + 浓度精度约束。新增 tr_ratio_histogram.png(T/R比值分布直方图)、individual_fits.png(各池释放曲线+拟合线)、tr_ratio_heatmap.png(6×6 T/R配对热力图);新增 --ts-cells/--rs-cells/--content-ts/--content-rs 参数;浓度自动保留4位小数;修复 _compute_cell() 缺少 times 字段导致的空图问题 |
| 2.2.0 | 2026-07-22 | HTML 报告全面增强—公式说明注入。① 报告开头新增完整"使用的统计方法与公式说明"章节(8 个公式卡片);② 每张数据表下方新增"对应公式"标注卡片(共 4 处);③ 每张图片下方新增"对应公式"标注卡片(共 5 处);④ 所有公式卡片保持统一视觉风格(浅蓝底 #f0f4ff + 左侧 3px 色条 + serif 表达式)。此章节及相关标注由人工在脚本运行后注入,脚本本身不自动生成。 |
验证
python scripts/verify_ivrt_eq.py
# RESULT: PASS(合成数据验证 f2 计算、CI 区间、ANOVA 表均正确)
微信扫一扫