4PLC 方程拟合校准曲线
分析目的
本文演示如何使用ivdtools包的fit_equation()拟合四参数 Logistic
(four-parameter
logistic,4PLC)校准曲线,并检查收敛状态、残差、权重影响以及
正向和逆向预测。
4PLC
是非线性模型。成功返回拟合对象并不等同于模型适用;正式分析还应结合校准点设计、
上下平台覆盖、参数稳定性、残差结构、重复测量精密度及预先规定的接受标准进行判断。
::: cell
library(ivdtools) library(readr):::
4PLC 模型与主要函数
ivdtools中 4PLC 对应E07,也可以使用名称"4PLC"调用:
y=A+B−A1+(x/C)Dy = A + \frac{B-A}{1 + (x/C)^D}y=A+1+(x/C)DB−A
其中,AAA和BBB表示两个渐近平台,CCC表示曲线中点对应的浓度尺度,DDD
控制曲线 方向和陡峭程度。参数含义应结合实际信号方向解释。
函数 用途
list_equation()查看内置方程注册表replicate_to_mean()汇总重复测量并可计算权重fit_equation()拟合内置或自定义方程coef()提取模型参数residuals()提取观测值减拟合值的残差predict()正向预测响应值或逆向估计浓度plot()绘制观测点、拟合曲线和区间compare_equation()比较候选方程
查看响应曲线模型:
::: cell
list_equation(category = "Response"):::
fit_equation()可以使用自动初值,也可以通过start
指定初值;lower、upper和constraints
可设置参数边界或约束。weights接受数值向量或内置方案"equal"、"1/y"、"1/y^2"、"1/x"、"1/x^2"。
注意:
权重应反映测量误差或方差结构,不能只根据曲线是正相关还是负相关来选择。
最好依据重复测量精密度、残差诊断或研究方案预先确定权重。
示例一:基本拟合流程
读取和核验数据
::: cell
u1 <- read_csv("./data/4PLC-U1.csv", show_col_types = FALSE) u1:::
::: cell
str(u1) summary(u1[c("Con", "RLU")]) anyDuplicated(u1$Sample) sum(!is.finite(u1$Con) | !is.finite(u1$RLU)):::
该数据包含 6 个浓度水平。4PLC 需要估计 4
个参数,因此剩余自由度很少;同时最高浓度
仍未清楚覆盖上平台,模型参数可能不稳定。本例主要用于说明操作流程,不应直接作为正式
校准设计范例。
如果每个浓度包含重复测量,可以直接拟合全部观测,也可以先使用replicate_to_mean()汇总。是否汇总及如何加权应在分析方案中说明。
拟合并检查收敛
::: cell
fit_u1 <- fit_equation( "4PLC", data = u1, x = "Con", y = "RLU" ) print(fit_u1):::
不要忽略优化器的收敛信息:
::: cell
fit_u1$fit$convInfo[c("isConv", "finIter", "stopCode", "stopMessage")]:::
本数据的默认拟合达到迭代次数上限且未声明收敛。增加最大迭代次数有时有帮助,但不能解决
校准范围未覆盖平台或参数不可辨识的问题。遇到未收敛时,应依次检查数据、模型方向、初值、
参数边界和校准点设计,而不是仅凭曲线外观接受结果。
残差与图形
::: cell
u1_diagnostics <- data.frame( Sample = u1$Sample, Con = u1$Con, RLU = u1$RLU, Residual = residuals(fit_u1), Relative_residual_pct = residuals(fit_u1) / u1$RLU * 100 ) knitr::kable(u1_diagnostics, digits = 2):::
::: cell
plot(fit_u1, interval = "confidence", level = 0.95):::
残差应同时在原始响应尺度和相对尺度上检查,并结合重复测量方差判断。对跨越多个数量级的
响应,仅查看原始残差可能使高信号点主导判断。
由浓度预测响应
::: cell
predict( fit_u1, newdata = data.frame(Con = c(20, 200, 1000)), interval = "confidence", level = 0.95 ):::
均值置信区间描述拟合均值的不确定性;预测区间还包含单次观测误差,通常更宽:
::: cell
predict( fit_u1, newdata = data.frame(Con = c(20, 200, 1000)), interval = "prediction", level = 0.95 ):::
由响应逆向估计浓度
::: cell
predict( fit_u1, newdata = data.frame(RLU = c(20000, 100000, 250000)), inverse = TRUE ):::
预测边界:
应避免超出校准浓度范围外推。逆向预测在平台区对响应误差非常敏感,
非单调模型还可能出现多解。当前示例拟合未可靠收敛,因此预测仅用于演示接口,不能用于
定量结论。
示例二:夹心法与权重
等权重拟合
夹心法数据通常表现为浓度增加、信号升高。本例先进行等权重拟合:
::: cell
u2 <- read_csv("./data/4PLC-U2.csv", show_col_types = FALSE) fit_u2_equal <- fit_equation( "4PLC", data = u2, x = "Con", y = "RLU" ) print(fit_u2_equal):::
反响应平方权重拟合
当响应方差随信号增大而明显增大时,可以评估反响应平方权重:
::: cell
fit_u2_weighted <- fit_equation( "4PLC", data = u2, x = "Con", y = "RLU", weights = "1/y^2" ) print(fit_u2_weighted):::
比较两个模型在各校准点的相对残差:
::: cell
u2_comparison <- data.frame( Sample = u2$Sample, Con = u2$Con, RLU = u2$RLU, Equal_weight_pct = residuals(fit_u2_equal) / u2$RLU * 100, Inverse_y2_weight_pct = residuals(fit_u2_weighted) / u2$RLU * 100 ) knitr::kable(u2_comparison, digits = 2):::
::: cell
data.frame( Model = c("等权重", "1/y^2 权重"), Median_absolute_relative_residual_pct = c( median(abs(u2_comparison$Equal_weight_pct)), median(abs(u2_comparison$Inverse_y2_weight_pct)) ), Maximum_absolute_relative_residual_pct = c( max(abs(u2_comparison$Equal_weight_pct)), max(abs(u2_comparison$Inverse_y2_weight_pct)) ) ) |> knitr::kable(digits = 2):::
在本示例数据中,1/y^2
权重明显降低了低信号点的相对残差;这只能说明该权重更符合
本数据所采用的相对误差评价目标。正式选择仍需结合各浓度重复测量的方差、回算浓度偏差、
模型参数稳定性和预设接受标准。不同权重下的残差标准误和 AIC
具有不同尺度,不宜脱离 误差模型直接比较。
::: cell
plot(fit_u2_weighted, interval = "confidence", level = 0.95):::
示例三:竞争法
竞争法数据通常表现为浓度增加、信号降低:
::: cell
u3 <- read_csv("./data/4PLC-U3.csv", show_col_types = FALSE) fit_u3 <- fit_equation( "4PLC", data = u3, x = "Con", y = "RLU" ) print(fit_u3):::
::: cell
fit_u3$fit$convInfo[c("isConv", "finIter", "stopCode", "stopMessage")] u3_diagnostics <- data.frame( Sample = u3$Sample, Con = u3$Con, RLU = u3$RLU, Relative_residual_pct = residuals(fit_u3) / u3$RLU * 100 ) knitr::kable(u3_diagnostics, digits = 2):::
::: cell
plot(fit_u3, interval = "confidence", level = 0.95):::
本例等权重拟合已经收敛且样本内相对残差较小,但仍应依据重复测量方差决定是否需要权重。
信号方向本身不是选择等权重或加权拟合的依据。
结果判读要点
- 校准设计:浓度点应覆盖预期工作区间,并尽可能提供上下平台信息。
- 收敛状态:检查
convInfo,不能把达到最大迭代次数直接视为成功收敛。 - 参数合理性:结合平台、曲线中点、方向、标准误和参数相关性判断稳定性。
- 残差结构:同时检查原始残差、相对残差及其随浓度或拟合值的变化。
- 权重依据:优先使用重复测量估计的方差结构,并在分析前规定选择规则。
- 回算表现:按项目要求评价各校准点的回算浓度偏差和精密度。
- 预测范围:避免外推,尤其避免在平台区进行不稳定的逆向预测。
- 可复现性:保存原始数据、代码、模型参数、包版本、图形和完整会话信息。