更新记录
1.0.0(2026-11-05)
首个版本:交叉式 GRR 的 ANOVA 方差分解,输出 EV 重复性、AV 再现性、零件×评价人交互、PV 零件间与 TV 总变异,附完整 SS/df/MS 表可直接抄进报告;%GRR 按 10% 与 30% 两档判定并指出主因落在夹具、评价人还是交互上;ndc = floor(1.41×PV/GRR),低于 5 提示量具分辨力不足;除研究变异口径外另算 GRR 占公差百分比,两口径判定不一致时提示以更严一侧为准;评价人、零件、交互三项 F 检验与 p 值由正则化不完全贝塔函数求 F 分布右尾,与标准 F 表一致;多特性一次体检,单项失败不拖垮整批;文本解析认「零件,评价人,试验次,读数」,逗号/制表符/分号/竖线都能分列。UTS→Kotlin 编译通过(index.kt 1356 行与 classes.dex 68148 字节已生成),189 项回归测试全部通过;真机未执行(设备 adb 状态 unauthorized),市场截图为 H5 渲染并标注示例数据。
平台兼容性
uni-app
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| × | √ | × | × | √ | × | √ | × | × |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| × | × | × | × | × | × | × | × | × | × | × | × |
测量系统分析 GRR
交叉式 Gage R&R 的 ANOVA 方差分解:把一次测量研究里「量具不准」和「人测得不一样」拆开, 告诉你 %GRR 是多少、量具够不够分辨零件、下一步该修夹具还是先统一手法。
纯本地计算,不联网、不上传、不需要任何权限。仅支持 Android。
购买前必读
- 本插件只做交叉式(crossed)研究:每个零件都被每个评价人重复测量过。 嵌套式、破坏性测试、短期(GRR 与稳定性合并)研究不在范围内。
- 只做 ANOVA 法,不含均值极差(X̄-R)法。两者的方差分量估计式不同, 数值不能直接互相对照;如果你手上的表格是 X̄-R 法算的,差一点是正常的。
- 单位由你决定,插件不做换算:读数、公差必须同单位。公差填全宽(Φ52±0.15 填 0.30)。
- 插件不判断「量具该不该买」,只给出 %GRR、ndc、显著性三组客观数字与一条主因判断。
- 需要至少 2 个零件、2 个评价人、每人 2 次重复。AIAG 推荐的 10×3×3 只是建议,不是硬性要求。
解决什么问题
做过程能力之前要先证明量具可信,但车间常见的做法是「拿卡尺量十个件,看数差不多就过了」。 真正的问题往往藏在两种变异里:
- 重复性(EV):同一个人、同一个件、同一台量具,量两次就不一样 —— 问题在夹具定位、 量具磨损或读数手法;
- 再现性(AV):换个人量,系统性偏高或偏低 —— 问题在基准不统一、培训不一致;
- 交互(INT):某些零件某些人特别量不准 —— 问题在取点位置或零件的特殊形状;
- 零件间变异(PV):这是好事,PV 越大说明取的样品越能代表过程波动,量具相对就更准。
把这四项分出来,才知道改哪里。%GRR 只有 25% 但全在 EV 上,换夹具可能一次就过; 如果 25% 全在 AV 上,换夹具没用,得先把作业指导书的基准统一。
与同类的边界
| 场景 | 本插件 | 常见替代 |
|---|---|---|
| 交叉式 GRR 方差分解 | 是(ANOVA,含交互) | 表格模板需手工填公式,Minitab 需电脑 |
| 可区分类别数 ndc | 是 | 多数手机端小工具不算 |
| 三项显著性检验(F/p) | 是 | 表格模板普遍缺失 |
| 按公差口径的 %GRR | 是(两口径并列,冲突时提示以更严一侧为准) | 多数只给研究变异口径 |
| 多特性一次体检 | 是 | 需逐个建表 |
| 过程能力 Cpk / 控制图 | 否,见 szhzy-spc-capability |
— |
| 抽样检验 AQL | 否 | — |
如果要做 Cpk,请先用本插件确认 %GRR 可接受 —— 量具不可信时算出来的 Cpk 只是噪声的另一种写法。
快速上手
1. 准备读数
读数按「零件 → 评价人 → 重复」顺序平铺,第 i 个读数的位置是:
index = ((零件序号 * 评价人数) + 评价人序号) * 重复次数 + 试验次序号
序号都从 0 开始。5 个零件 × 3 个评价人 × 2 次 = 30 个读数,前 6 个读数是 「1# 件 张伟 第 1 次、1# 件 张伟 第 2 次、1# 件 李娜 第 1 次、1# 件 李娜 第 2 次、1# 件 王强 第 1 次、1# 件 王强 第 2 次」。
2. 算一次
import { msaGrr, msaDefaults } from '@/uni_modules/szhzy-msa-grr'
const r = msaGrr({
name: '反光杯内径 Φ52',
parts: 5,
appraisers: 3,
trials: 2,
tolerance: 0.30, // 全宽,不是 ±0.15
flat: [51.88, 51.90, 51.87, /* … */],
partNames: ['1#', '2#', '3#', '4#', '5#'],
appraiserNames: ['张伟', '李娜', '王强']
})
if (r.ok) {
console.log(r.grrPct, r.levelText, r.ndc)
console.log(r.hint) // 一句主因判断
console.log(r.tolHint) // 按公差口径的补充判断
} else {
console.log(r.code, r.message)
}
console.log(msaDefaults()) // 一份可直接跑的演示数据
返回字段(节选):
| 字段 | 含义 |
|---|---|
ev / av / inter / pv / grr / tv |
各项标准差(与读数同单位) |
evPct / avPct / intPct / grrPct / pvPct |
占 TV 的百分比,用于 10/30 判定 |
evVarPct / avVarPct / intVarPct |
占方差的百分比,方差分析表用这一列 |
tolPct / tolLevel / tolText |
GRR 占公差百分比及其判定,未给公差时为 null |
ndc |
可区分类别数,floor(1.41 × PV / GRR) |
fApp / pApp / fPart / pPart / fInt / pInt |
三项 F 检验 |
ssPart / ssApp / ssInt / ssEquip 与对应 df* / ms* |
完整的 ANOVA 表,可直接抄进报告 |
appraiserList / partList |
逐评价人均值、标准差、相对总均值偏差;逐零件均值与评价人间极差 |
3. 多特性一次体检
import { msaBatch } from '@/uni_modules/szhzy-msa-grr'
const b = msaBatch({
items: [
{ name: '反光杯内径', parts: 5, appraisers: 3, trials: 2, tolerance: 0.30, flat: [...] },
{ name: '底座孔距', parts: 5, appraisers: 3, trials: 2, tolerance: 0.20, flat: [...] }
]
})
console.log(b.count, b.accept, b.conditional, b.reject, b.worstName, b.hint)
算不出来的条目不会让整批失败,会进 skipped(带 name / code / message)。
4. 解析测量原始记录并导出
import { msaParse, msaExport } from '@/uni_modules/szhzy-msa-grr'
const p = msaParse({ text: '零件,评价人,试验次,读数\n1#,张伟,1,51.88\n1#,张伟,2,51.90\n' })
// p.count / p.parts / p.appraisers / p.trials / p.complete
const w = msaExport({ kind: 'table', /* 单特性字段 */ })
// kind: 'summary' 汇总一行一个特性 | 'table' ANOVA + 检验 + 明细 | 'batch' 多特性体检
console.log(w.path, w.bytes)
口径与公式(可手算核对)
设零件数 p、评价人数 a、重复次数 r,总读数 n = p·a·r。
平方和(与教科书两因素含交互模型一致)
SS零件 = a·r · Σ(零件均值 − 总均值)²
SS评价人 = p·r · Σ(评价人均值 − 总均值)²
SS交互 = r · Σ(格均值 − 零件均值 − 评价人均值 + 总均值)²
SS重复性 = Σ(每个读数 − 所在格均值)²
四项之和必须等于 Σ(每个读数 − 总均值)²
方差分量(负值截 0,并记下截了几个)
EV² = MS重复性
AV² = (MS评价人 − MS交互) / (p·r)
INT² = (MS交互 − MS重复性) / r
PV² = (MS零件 − MS交互) / (a·r)
GRR² = EV² + AV² + INT² TV² = GRR² + PV²
判定
%EV = EV/TV×100 %GRR = GRR/TV×100 %GRR(公差) = GRR/公差×100
ndc = floor(1.41 × PV / GRR)
%GRR < 10 可接受 | 10 ≤ %GRR ≤ 30 条件接受 | %GRR > 30 不可接受
两个口径(研究变异 / 公差)不一致时,插件不替你选,只在 tolHint 里点明「以更严的一侧为准」。
F 检验:F评价人 = MS评价人/MS交互,F零件 = MS零件/MS交互,F交互 = MS交互/MS重复性; p 值由正则化不完全贝塔函数求 F 分布右尾概率,与标准 F 表一致(见测试记录)。
手算一遍(演示数据)
5 个零件 × 3 个评价人 × 2 次,读数由「零件均值 + 评价人偏置 + 重复内偏移」构成: 零件均值 51.88 / 51.94 / 52.00 / 52.06 / 52.12,评价人偏置 +0.010 / 0 / −0.010,重复内 ±0.010。
- 零件均值极差 0.24,样本标准差 √((0.12²+0.06²+0+0.06²+0.12²)/4) = √0.009 = 0.0949 → PV 0.0949
- 重复内两次相差 0.020,MS重复性 = 0.020² = 0.0002 → EV = √0.0002 = 0.0141
- 评价人均值相差 0.010,MS交互 = 0(数据完全可加)→ AV = √((MS评价人 − 0)/(5×2)) = 0.0100
- GRR = √(0.0002 + 0.0001) = 0.0173,TV = √(0.0003 + 0.009) = 0.0964
- %GRR = 18.0% → 条件接受;主因重复性(14.7%);ndc = floor(1.41×0.0949/0.0173) = 7
- 按公差 ±0.15(全宽 0.30)算:GRR 占公差 5.8% → 按公差口径可接受,与研究变异口径不一致
改一下数据再算,%GRR 必须跟着变,且 EV/AV 的拆分要说得通 —— 这就是拿到报告后第一件该做的核对。
API
| 方法 | 说明 |
|---|---|
msaGrr(options) |
单特性 GRR |
msaBatch(options) |
多特性体检,参数 items: [...] |
msaParse(options) |
解析 零件,评价人,试验次,读数,text 或 path 二选一 |
msaExport(options) |
导出 CSV,kind = summary / table / batch |
msaDefaults() |
演示数据 |
所有方法返回统一信封 { ok, code, message, ... },不抛异常。
导出的 CSV 列
- summary(一行一个特性,21 列):特性、公差、零件数、评价人数、重复次数、总均值、 EV、AV、交互、GRR、PV、TV、EV%、AV%、交互%、GRR%、GRR占公差%、PV%、ndc、判定、说明
- table(单特性明细):方差分析表(SS / df / MS / 方差分量 / 占方差% / 占研究变异%)、 显著性检验表、评价人明细、零件明细
- batch(多特性体检):特性、公差、零件数、评价人数、重复次数、GRR%、GRR占公差%、ndc、判定、说明 + 汇总行
三份 CSV 都带 UTF-8 BOM,Excel 双击不乱码;写入前会判断首字符,不会出现双 BOM。
错误码
| code | 含义 | 处理 |
|---|---|---|
BAD_DESIGN |
零件 < 2、评价人 < 2 或重复 < 2 | 补足设计,至少 2×2×2 |
NOT_ENOUGH_DATA |
读数个数少于 p·a·r | 检查数组长度与设计是否一致 |
BAD_VALUE |
某个读数不是有效数字 | message 会指出是第几个读数 |
NO_ROWS |
没有可解析 / 可导出的记录 | 检查文本格式 |
NO_VALID_ROWS |
整批都算不出来 | 先修数据 |
FILE_NOT_FOUND / OPEN_FAILED |
文件读不到 | 确认已授予读取权限 |
FILE_TOO_LARGE |
超过 12 MB | 按特性拆分 |
CHARSET_UNSUPPORTED |
编码不支持 | 换 UTF-8 / GBK |
NO_OUTPUT_DIR / WRITE_FAILED |
写不出去 | 检查剩余空间 |
能力边界与已知限制
- 仅 Android。iOS、鸿蒙、小程序、Web 均未实现,
package.json里明确标不支持。 - 只有 ANOVA 法,没有均值极差法;两者数值不可直接互比。
- 只支持交叉式设计,嵌套式与破坏性测试不支持。
- 不做偏倚(Bias)、线性(Linearity)、稳定性(Stability)研究。
- 方差分量出现负值时按 0 处理(Minitab 同口径),并在
warning里说明截了几个;不做 REML 修正。 - 一次研究的读数上限没有硬限制,但超过几万条时手机端会明显变慢,建议按特性拆分。
- 不做单位换算,读数与公差必须同单位。
验证状态
- 纯逻辑回归测试:189 项全部通过(Node 22 真实执行
core.uts),覆盖: 手算算例 2×2×2 的完整 ANOVA 表、标准 F 表 7 个临界值反查、200 组随机数据的 平方和分解恒等式与自由度之和、判定阈值边界、错误分支、CSV 列数与 BOM。 - Android 侧编译通过:
cli launch app-android --project <绝对路径> --compile true输出compiled successfully,产物index.kt/classes.dex已核对存在。 - 真机功能验证:未执行。开发机 Android 设备处于
unauthorized状态,无法进行真机操作与 真机截图,本版本不声称在真机上跑通过。演示截图由 H5 渲染生成,页面标注「示例数据」。 - 详细测试清单见
docs/msa-grr/测试记录.md。
授权
普通授权与源码授权两种,详见 license.md。商用前请先确认上面「购买前必读」的适用范围。

收藏人数:
购买源码授权版(
试用
赞赏(0)
下载 13
赞赏 0
下载 12745758
赞赏 1959
赞赏
京公网安备:11010802035340号