012-方法学比较
方法学比较
分析目的
方法学比较(method
comparison)评价候选方法(candidate)与参考方法(reference)在相同样本上
测得结果的一致性,对应 CLSI EP09。ivdtools的mcr()提供一个渐进式
S3 工作流:描述统计 → 相关分析 → 回归(OLS、WLS、Deming、加权
Deming、Passing–Bablok)→ Bland–Altman → 异常值 →
医学决定水平偏倚,并提供绘图、预测与汇总。本文以一个包含不同批次与样本类型的完整示例演示全流程,
并演示按批次/样本类型拆分后的子组比较。
示例数据为确定性的教学数据,其中人为加入了一个离群点以演示异常值检测;统计结果不自动构成合格
判定,接受标准应在分析前确定。
::: cell
library(ivdtools) library(readr):::
函数概述
函数 主要用途 关键输入或输出
mcr()创建方法学比较对象id、candidate、reference、weights
describe()描述统计 候选/参考/差值及额外列
correlation()相关分析 pearson/spearman/kendall
regression()回归拟合 ols/wls/deming/wdeming/pb、lambda、weights
bland_altman()一致性限 difference/ratio/percent、x_axis
outlier()差值异常值 grubbs/esd/dixon/iqr、type
bias()医学决定水平偏倚mdl、interval
predict()正向/逆向预测 需先回归
plot()/summary()图形与汇总type选择图形
示例:完整的单示例分析
读取和核验数据
数据包含 40 例,每例有编号id、候选方法结果candidate、参考方法结果reference, 以及批次batch(B1/B2)与样本类型sample_type(serum/plasma/urine):
::: cell
mc_dat <- read_csv("./data/method-comparison.csv", show_col_types = FALSE) mc_dat <- as.data.frame(mc_dat) str(mc_dat):::
::: cell
dim(mc_dat) knitr::kable(table(mc_dat$batch), caption = "批次分布") knitr::kable(table(mc_dat$sample_type), caption = "样本类型分布"):::
创建对象与描述统计
::: cell
mc <- mcr(mc_dat, id = "id", candidate = "candidate", reference = "reference"):::
::: cell
mc <- describe(mc, cols = c("batch", "sample_type")) mc:::
describe()的cols指定纳入描述的分类/数值附加列,支持-
前缀排除。
相关分析
::: cell
mc <- correlation(mc, method = "pearson"):::
参数说明:
correlation()的method可选"pearson"、"spearman"、"kendall"。
相关反映两变量共同变化的程度,不等于一致性,不能替代 Bland–Altman
或回归偏差评价。
回归分析
依次比较 OLS、Deming、Passing–Bablok 与 WLS。由于regression()
会更新对象内的回归结果,多种 方法分别存入不同对象以便比较:
::: cell
mc_ols <- regression(mc, method = "ols") mc_dem <- regression(mc, method = "deming") mc_pb <- regression(mc, method = "pb") mc_wls <- regression(mc, method = "wls", weights = "1/y"):::
::: cell
knitr::kable( data.frame( 方法 = c("OLS", "Deming", "Passing-Bablok", "WLS(1/y)"), 截距 = c(mc_ols$regression$intercept, mc_dem$regression$intercept, mc_pb$regression$intercept, mc_wls$regression$intercept), 斜率 = c(mc_ols$regression$slope, mc_dem$regression$slope, mc_pb$regression$slope, mc_wls$regression$slope) ), digits = 4, caption = "四种回归方法截距与斜率比较" ):::
::: cell
print(mc_ols):::
本例 OLS 斜率 ≈ 0.96,95% CI 不含 1,说明候选方法存在约 4%
的比例偏差(数据真实偏差即为 5%)。
参数说明:
regression()的method可选"ols"、"wls"、"deming"、"wdeming"、"pb"。 Deming 用lambda
指定方差比(ref/cand,默认 1);wls/wdeming必须提供weights(内置方案 或数据列名);conf.level控制参数置信区间。
医学决定水平的偏倚
用bias()评价在医学决定水平(MDL)处的预测偏倚:
::: cell
mc_ols <- bias(mc_ols, mdl = c(30, 80, 150), interval = "both") mc_ols$bias:::
::: cell
plot(mc_ols, type = "bias", mdl = c(30, 80, 150)):::
参数说明:
bias(mdl, level, interval)中mdl
为医学决定水平向量;interval可选""、"confidence"、"prediction"、"both"。偏倚定义参考候选方法mdl处的拟合值与mdl
之差,解释时应结合回归方向和方案规定的允许偏倚。
Bland–Altman 分析
::: cell
mc_ols <- bland_altman(mc_ols, type = "difference"):::
::: cell
plot(mc_ols, type = "bland_altman"):::
::: cell
mc_ols$bland_altman[c("mean_diff", "sd_diff", "loa")]:::
参数说明:
bland_altman()的type可选"difference"、"ratio"、"percent"(Y 轴度量),x_axis可选"mean"、"candidate"、"reference"(X 轴);agree.level控制 LoA
宽度,conf.level控制 LoA 置信区间。
异常值检测
对配对差值检测异常值:
::: cell
mc_ols <- outlier(mc_ols, method = "grubbs", type = "difference") mc_ols$outlier:::
::: cell
mc_ols$outlier$indices:::
检测到第 7
号样本的差值明显偏大。检出异常值不等于应删除------应回查原始记录、实验过程,并在有
充分理由时进行包含/不包含的敏感性分析。
预测
::: cell
predict(mc_ols, candidate = c(40, 100)):::
::: cell
predict(mc_ols, reference = c(50, 120), inverse = TRUE):::
子组比较
不同批次或样本类型的方法表现可能不同。先按批次拆分,再对子组重跑回归与
Bland–Altman:
::: cell
for (b in c("B1", "B2")) { sub <- mc_dat[mc_dat$batch == b, ] mcs <- mcr(sub, id = "id", candidate = "candidate", reference = "reference") mcs <- regression(mcs, method = "ols") mcs <- bland_altman(mcs, type = "difference") cat(b, ": slope =", round(mcs$regression$slope, 4), ", mean diff =", round(mcs$bland_altman$mean_diff, 3), "\n") }:::
按样本类型同理split()
后分别分析。子组比较的结论用于判断方法表现是否受批次/样本类型影响,
只有预先定义的接受标准才能支撑可接受性结论。
汇总
::: cell
summary(mc_ols):::
结果判读要点
- 方向核对:回归与 Bland–Altman
均需确认候选相对参考的方向与偏差符号。 - 相关≠一致:相关系数高不等于方法一致,重点看回归斜率和
Bland–Altman LoA。 - 方法选择:OLS 假设参考无误差;参考有误差时用
Deming/PB;方差不齐时考虑 WLS/WDeming。 - 离群处理:检出离群值后回查并做敏感性分析,不自动删除。
- 子组解释:批次/样本类型拆分后分别判断,避免均值掩盖子组差异。
- 接受标准:偏差、LoA、MDL
偏倚都必须与预先规定的允许限比较才能作出可接受性结论。
