更新记录

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。商用前请先确认上面「购买前必读」的适用范围。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

无系统权限。读取调用方用系统文件选择器交过来的文件(路径或 content:// 授权),写出走应用外部私有目录。

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集、不上传任何数据,不访问网络,不写日志。测量读数只在内存中计算;报表由调用方决定是否落盘,默认写应用外部私有目录。

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

无

暂无用户评论。