9  参考区间

9.1 分析目的

参考区间(reference interval,RI)由参考样本群体的测量结果界定,用于解释个体结果的正常范围, 对应 CLSI EP28-A3c。ivdtools 提供三种方法:百分位数法(nonparametric)、参数法(parametric, 正态或对数正态)、稳健法(robust)。三种方法对样本量、分布形态和离群值的敏感性不同,建议同时对 同一数据应用多种方法进行比较,并在建立参考区间前先做异常值检测与正态性评估。

本文演示用 outliers_test()normal_test() 做预先分析,再调用 reference_interval(method = "all") 同时输出三种方法的参考区间。示例数据为确定性的教学数据(n=120,轻度右偏并含离群值)。

代码
library(ivdtools)
library(readr)

9.2 函数概述

函数 主要用途 关键输入或输出
outliers_test() 异常值检测 Grubbs / ESD / Dixon / IQR
normal_test() 正态性检验与图形 method="auto" 按样本量选检验
reference_interval() 三种方法参考区间 method="all"intervalciid
plot.reference_interval() 分方法绘制区间 jitter + 上下限

9.3 示例:三法并用的参考区间

9.3.1 读取和核验数据

代码
ri_data <- read_csv("./data/reference-interval.csv", show_col_types = FALSE)
ri_data <- as.data.frame(ri_data)
str(ri_data)
'data.frame':   120 obs. of  2 variables:
 $ id   : chr  "S001" "S002" "S003" "S004" ...
 $ value: num  131.1 100.8 106 74.3 116.9 ...

9.3.2 预先分析一:异常值检测

EP28 建议在建立参考区间前审查离群值。样本量 n=120,不适合 Dixon(Dixon 仅适用于 n≤30), 使用 Grubbs 与广义 ESD:

代码
outliers_test(ri_data, col = "value", method = "grubbs")
Grubbs Outliers Test
  Data:   ri_data
  Column: value (n = 120, missing = 0)
  Parameters: alpha = 0.05
  Outliers: 1

  Index            Value      G stat    Critical
  -------------------------------------------
  88            183.0000      4.0104      3.4451
代码
outliers_test(ri_data, col = "value", method = "esd", r = 3)
Generalized ESD Outliers Test
  Data:   ri_data
  Column: value (n = 120, missing = 0)
  Parameters: alpha = 0.05, r = 3
  Outliers: 2

  Index            Value      R stat    Critical
  -------------------------------------------
  88            183.0000      4.0104      3.4451
  57            178.0000      4.0576      3.4424

参数说明: outliers_test()method 可选 "grubbs""esd""dixon""iqr"; ESD 通过 r 指定最多检出数,Dixon 通过 type 指定尾部("both"/"min"/"max"),IQR 通过 coef 指定倍数(默认 1.5)。检测到离群值不代表应删除——应回查原始记录、实验过程与方案规定, 在有充分理由时进行包含/不包含的敏感性分析。

9.3.3 预先分析二:正态性检验

代码
nt <- normal_test(ri_data, col = "value", method = "auto")
nt

Normality Test
  Data:   ri_data
  Column: value (n = 120, missing = 0)
  Method:     Anderson-Darling

  A = 1.7577, p = 0.0002
代码
plot(nt, type = c("qq", "his"))

method="auto" 对 n=120 自动选择 Anderson-Darling 检验,p 值很小,提示数据不服从正态分布 (该数据右偏并含离群值)。QQ 图与直方图可直观确认偏态。

9.3.4 三法并用的参考区间

代码
ri <- reference_interval(
  ri_data,
  col = "value",
  interval = 0.95,
  ci = 0.95,
  method = "all",
  id = "id"
)
print(ri)

Reference Interval Analysis
  Column:              value
  Reference interval:  95% (alpha = 0.025)
  Confidence level:    0.95
  ID variable:         id
  Complete cases:      120 / 120

  No missing values.
  No duplicate IDs found.

  Percentile (quantile type 6, CLSI EP28-A3c)
    Lower = 73.4225  [66.0000, 80.6000]
    Upper = 157.5725  [137.0000, 183.0000]

  Parametric (log-transformed, Shapiro-Wilk p = 0.0661)
    Lower = 73.2539  [69.3807, 77.3434]
    Upper = 145.9407  [138.2241, 154.0880]

  Robust (Huber M-estimation (k=1.5, 16 iter) + MAD)
    Lower = 72.1573  [66.9399, 77.3919]
    Upper = 134.7365  [128.4016, 142.2446]
代码
plot(ri)

参数说明: reference_interval()interval 是参考区间覆盖度(默认 0.95,对应 2.5%–97.5%), ci 是区间端点的置信水平,两者含义不同。method 可取 "percentile""parametric""robust""all" 或其中任意组合。id 用于重复样本检测。

本示例三种方法结果比较:

  • 百分位数法(73.4–157.6):非参数、不作分布假设,但上限被两个大离群值抬高;
  • 参数法(73.3–145.9):自动检测到数据非正态后做了 log 变换(transformed=TRUE)再回代;
  • 稳健法(72.2–134.7):基于 Huber M 估计与 MAD,对离群值最稳健。

百分位法上限明显高于稳健法,正是离群值影响的表现。参考区间应在样本来源、样本量、分布特征与研究 方案指导下选择报告方法,不宜只挑结果”好看”的一种。

9.4 结果判读要点

  1. 方案先定:明确参考人群、纳入排除标准、样本量(百分位法 EP28 建议 ≥120)与分区策略。
  2. 先检后算:先做异常值检测与正态性评估,记录离群值处理决定(是否排除、依据)。
  3. 方法可比:三法同出便于发现离群值或分布假设对区间的影响,报告时说明所选方法与理由。
  4. 参数区分:区分 interval(覆盖度)与 ci(端点置信度),不要混用。
  5. 转换透明:参数法自动 log 变换时要报告变换类型与回代方式。
  6. 非唯一结论:参考区间不等同于临床决定限,也不自动构成可接受性判定。