005-精密度分析

发布时间:2026/8/25 14:42:50
005-精密度分析 精密度分析分析目的精密度precision评价同一测量系统在可重复条件下对同一样品测得结果之间的一致程度通常用标准差SD或变异系数CV%表示。CLSI EP05将精密度按条件细分为批内within-run、批间between-run和日间between-day等方差分量并给出各分量的估计、置信区间以及用于判定的可接受限。本文演示如何使用ivdtools包的precision()建立精密度方差分量分析完成异常值检查、正态性评估、方差分量与置信区间估计、Sadler 精密度剖面拟合并把结果重排为 EP05风格的方差分量表。示例数据为确定性的教学数据仅用于演示分析流程正式研究必须使用方案或标准预先规定的实验设计、接受标准与分析参数。::: celllibrary(ivdtools) library(readr):::数据格式要求precision()最终调用VCA::anovaVCA()要求普通data.frame。用readr::read_csv()读入的是tibble因此本文统一先转为data.frame再把实验因子列天、批、复孔等转为因子。函数概述函数 主要用途 关键输入或输出precision()创建精密度方差分量分析对象 嵌套公式、by分组、平衡性检查outlier()逐样本异常值检测 Grubbs 或 IQR 方法normal()逐样本正态性检验 Shapiro-Wilk 等level控制置信水平variance()/vc()估计方差分量 VC、%Total、SD、CV%NegVC在此传入ci()各分量 SD/CV 的置信区间 Satterthwaite 近似profile()Sadler 精密度剖面拟合 10 个候选模型、AIC 选优list_sadler()查看 10 个 Sadler 模型 模型公式与类型summary()/plot()汇总与绘图plot(type...)选择图形precision()创建对象后分析结果通过outlier()、normal()、variance()、ci()、profile()逐步累积到对象中必须重新赋值precision() - outlier() - normal() - variance() - ci() - profile()只有已执行的分析才出现在summary()中且plot()的某些图形依赖前置分析。示例一EP05 20×2×2 单样本精密度读取和核验数据20×2×2 指 20 天、每天 2 批、每批 2 个重复共 80 个结果是 EP05的经典设计之一::: cellep05 - read_csv(./data/precision-ep05.csv, show_col_types FALSE) ep05 - as.data.frame(ep05) str(ep05):::实验因子列在 CSV 中为整数读取后转换为因子::: cellep05$day - factor(ep05$day) ep05$run - factor(ep05$run) ep05$rep - factor(ep05$rep):::::: celldim(ep05) summary(ep05$value):::value ~ day/run表示方差分量按 日间day→ 日内的批run逐层嵌套。/是嵌套记法等价于把每个深一层因子视为上一层因子的分组内因子。创建分析对象并预检::: cellp - precision(ep05, value ~ day/run) p:::平衡性检查输出提示最大/最小单元大小之比当数据高度不平衡时VCA会提示改用 REML。逐样本做异常值检测和正态性检验::: cellp - outlier(p, method grubbs):::::: cellp - normal(p, method shapiro):::参数说明outlier()的method可选grubbs默认或iqralpha为 Grubbs 显著性水平。normal()的methodauto会根据样本量选择检验n≤50 用 Shapiro-Wilk、更大用 Anderson-Darling等指定methodshapiro时输出的W列才是真正的 Shapiro-Wilk W统计量。 单样本数据 n80两种方式均可接受本示例显式指定以便展示。方差分量与置信区间::: cellp - variance(p):::NegVC参数需要在variance()处传入::: cellp - variance(p, NegVC TRUE) # 允许负方差分量默认 FALSE:::::: cellp - ci(p):::ci()采用 Satterthwaite 有效自由度近似计算各分量 SD 与 CV 的置信区间。转化为 EP05 术语表按分量名的嵌套深度把方差分量归入批内、批间、日间并计算总SD/CV进一步把各分量置信区间合并形成带区间的完整 EP05报告表。统计结果是否可接受必须依据方案预先规定的精密度限值判定。图形散点图可用于快速识别测试异常和测值分布情况::: cellplot(p, type dot):::::: cellplot(p, type qq):::图形依赖plot(typedot)为按运行顺序的散点无需前置分析typehis为标准直方图typevar需要先执行variance()typeqq需要先执行normal()typeprofile需要先执行profile()。绘图前请确认对应分析已运行。::: cellsummary(p):::示例二多样本3×5与 Sadler 剖面读取数据当需要评价多个浓度水平时用by指定样本分组列各样本分别估计方差分量::: cellprofile_data - as.data.frame(read_csv( ./data/precision-profile.csv, show_col_types FALSE )) profile_data$sample - factor(profile_data$sample) profile_data$day - factor(profile_data$day) profile_data$rep - factor(profile_data$rep):::样本方差分量::: cellp2 - precision(profile_data, value ~ day, by sample) p2 - variance(p2):::::: cellp2 - ci(p2):::比较样本的变异比例可用于产品优化和检验方案设计::: cellplot(p2, type var):::精密度剖面profile()对每个方差分量拟合 Sadler 模型族按 AIC 选出最优模型::: celllist_sadler():::::: cellp2 - profile(p2, model.no 1:10):::::: cellplot(p2, type profile):::参数说明profile(model.no 1:10)指定候选模型序号...可传给内部 Sadler 拟合例如K。 每个方差分量至少需要 3个样本具有有限 SD 才能拟合因此多样本设计至少应设 3 个浓度水平。剖面可用于功能灵敏度等分析中预测任意浓度下的SD/CV参见《功能灵敏度》。本示例 total 与 day 分量最优模型为幂函数型模型 7day:rep 分量为恒定CV 型模型 2 符合SD 随浓度升高而增大、CV 相对稳定的常见设定。示例三多样本多中心站点精密度读取数据数据包含 2 个站点site、3 个样本sample每站点每样本 3 天 × 3 批× 5 复孔::: cellsites_data - as.data.frame(read_csv( ./data/precision-sites.csv, show_col_types FALSE )) sites_data[] - lapply(sites_data, function(x) if (is.numeric(x) all(x round(x))) factor(x) else x) str(sites_data):::多列分组by可接受多个列名内部按交互作用分组一次得到所有站点 × 样本组合::: cellp3 - precision(sites_data, value ~ day/run, by c(sample, site)) p3 - variance(p3) names(p3$results):::按站点拆分单独分析等价的做法是先按站点split()再对每个站点子集执行相同的分析参数。当站点间的方差分量结构预计不同或需要分别出具报告时拆分后单独分析更清晰::: cellfor (s in c(A, B)) { sub - sites_data[sites_data$site s, ] ps - precision(sub, value ~ day/run, by sample) ps - variance(ps) ps - ci(ps) }:::注意多中心研究应统一分析方案、方差分量模型与报告口径“先按中心出报告、再合并汇总”时务必记录每个中心的原始数据是否纳入、排除标准与因子定义是否一致。示例四自定义的更复杂模型读取数据除标准的天/批/重复嵌套外precision()的公式可以是任意 VCA嵌套结构例如再加入操作者operator层value ~ operator/day/run即 操作者 → 天 → 批逐层嵌套::: cellcustom_data - as.data.frame(read_csv( ./data/precision-custom.csv, show_col_types FALSE )) custom_data[] - lapply(custom_data, function(x) if (is.numeric(x) all(x round(x))) factor(x) else x):::拟合与解读::: cellp4 - precision(custom_data, value ~ operator/day/run) p4 - variance(p4):::结果判读要点设计匹配先明确研究设计的嵌套结构precision()的公式要如实反映实验分层。数据格式read_csv读取后转data.frame因子列显式转factor避免 VCA 报错或歧义。调用顺序outlier → normal → variance → ci → profile每次分析重新赋值绘图依赖前置分析。负分量某层因子水平过少或数据恰好相近时方差分量会被归零需谨慎解释并在方案中规定处理方式。CI 适用性Satterthwaite近似在方差分量很少或不平衡时准确性下降报告时注明方法。术语表把$results的数值量sd_comp/cv_comp/vc重排为EP05 术语表不要直接使用 展示用字符串$vc。可接受判定统计估计不自动构成合格判定应与预设精密度限值比较并由专业人员复核。