msa op• 데이터 종류: table → table
• 호출: import fullseye as fs; fs.ledger.msa_gauge_rr(table, part='part', operator='operator', value='value', tolerance=None, pool_interaction='auto', pool_alpha=0.25)(구현을 직접 호출하려면 import spc; spc.msa_gauge_rr(table, part='part', operator='operator', value='value', tolerance=None, pool_interaction='auto', pool_alpha=0.25), 원장에서 가져오려면 opsspc.get("msa_gauge_rr"))
분산분석법에 의한 게이지 반복성·재현성(R&R) (table).
반복성 EV(같은 사람이 같은 물건을 다시 측정했을 때의 흩어짐), 재현성 AV(사람이바뀌었을 때의 흩어짐. 교호작용 포함), 그 합성 GRR, 부품 간 PV, 총변동 TV, %GRR = 100 GRR/TV, 구별 가능한 계급 수 ndc = 1.41 PV/GRR.
*tolerance* 를 넘기면 공차에 대한 비 %tolerance = 100 GRR/tolerance 도 반환한다.
★분산 성분은 균형 교차 설계의 기대 평균제곱으로부터 구한다:
var_repeat = MS_err
var_inter = (MS_inter - MS_err) / r
var_oper = (MS_oper - MS_inter) / (p r)
var_part = (MS_part - MS_inter) / (o r)
★★음의 분산 성분은 0 으로 자르지만, 자른 사실을 숨기지 않는다(clamped 열). 기대 평균제곱의 차는 추정량이므로 참 성분이 0 에 가까우면 음이 될 수 있다. 조용히 0 으로하면 "측정자 차이는 없다"고 읽히지만, 올바르게는 "추정할 수 없었다"이다. 게다가 이는 드문 끝단이 아니다 —— 부품 60 x 측정자 4 x 반복 5 로 측정자 차이를 엄밀히 0 으로 둔 합성 데이터를 시드 40 개로 돌리면, 31 개에서 재현성 성분이 음으로 나온다(실측 2026-09-23). 자름을 신고하지 않는 구현은 이 31 개 모두에서 "차이가 없다"고단언해 버린다.
★추정량의 흔들림도 숨기지 않는다. 같은 60x4x5 에서 참값 0.4 인 반복성은 시드 40 개에서평균 0.39710 · 표준편차 0.00788 로 나온다 —— 이론의 sigma/sqrt(2 df) (df = 960 에서 0.00913)와 같은 자릿수이며, 1 개 시드를 1 % 정밀도로 믿어서는 안 된다. 재현성은 더 나빠서, 측정자 4 명(자유도 3)으로부터의 추정이므로 참값 0.5 에 대해표준편차 0.159 —— 자릿수만 맞아도 훌륭한 양이다.
★★교호작용을 남기느냐, 오차에 풀링하느냐에 따라 답이 바뀐다. 규격의 절차는 "교호작용의 F 검정이 유의하지 않으면 교호작용 항을 빼고 재계산한다"이고, *pool_interaction* 이 그 선택이다:
• "auto"(기본값) —— 교호작용의 p 값이 *pool_alpha*(기본값 0.25)를 넘으면 풀링한다.
★★0.25 는 규격이 명기한 수가 아니다. 참고 매뉴얼 본문이 말하는 것은 "교호작용을 놓칠 위험을 낮추기 위해 높은 유의수준을 골라라"라는 정성적인 지시뿐이며, 수치는 쓰여 있지 않다. 0.25 는 소프트웨어 측 관행의 다수파이고, 다른 구현은 0.05 를 기본값으로 한다. α 를 크게 하면 p > alpha 가 성립하기 어려워진다 = 교호작용을 남기기 쉽다, 따라서 0.25 는 본문의 방침에 충실한(보수적인) 쪽. 한편 규격의 worked example 표는 각주에 "α = 0.05 로 판정"이라고 쓰여 있으므로, 그 표를 재현한다고 자처하는 검사는 pool_alpha=0.05 를 명시해 통과시켜야 한다 (기본값의 이야기와 공표 예제의 재현 조건 이야기는 별개). 이 예제에서는 F = 0.434 가어느 α 에서도 비유의이므로 결과는 바뀌지 않지만, 경계 부근의 데이터에서는 기본값의 차이가 EV / AV 를 몇 % 움직인다 —— 실측으로 모델 전환은 EV 를 7.3 % 움직였다.
• False —— 항상 교호작용을 남긴다.
• True —— 항상 풀링한다.
반환의 interaction_pooled / interaction_p / pool_alpha 에 어느 쪽을썼는지 반드시 싣는다. 조용히 전환하면 같은 도구가 같은 공정에 대해 다른 숫자를반환하고, 그 이유가 출력 어디에도 남지 않는다.
★실측(규격의 예제, 10 부품 x 3 측정자 x 3 회의 90 점): 교호작용을 남기면 EV = 0.214435, 풀링하면 EV = 0.199933 —— 7.3 % 다르다. 선택은 p 값의임계값으로 정해지므로, 데이터가 조금만 움직여도 모델이 튄다. 이 예제에서는 F = 0.4337 / p = 0.9741 로 교호작용이 전혀 효과가 없으므로, 규격은풀링한 쪽을 공표값으로 삼고 있다(그 값을 이 구현은 3e-7 로 재현한다).
★게이트로 쓸 수 있는 엄밀한 관계: TV^2 == GRR^2 + PV^2 와 GRR^2 == EV^2 + AV^2 (정의 그 자체), 기여율 합계 100 %, 그리고 측정자가 1 명일 때의 EV 는칸마다의 표본분산 평균과 엄밀히 일치한다(numpy 가 참값이 된다).
• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL URL.
• 연산자의 내력·참고문헌 —— 이 연산자 족의 바탕이 된 연구/기법의 출처.
• 알고리즘의 정전(저자·연도)과 용도는 위의 패밀리 사용 가이드에 적혀 있습니다.
• poc_measurement_system_analysis — py -3.11 examples/poc_measurement_system_analysis.py
table 를 입력으로 받는 것)msa_anova_table · msa_bias_linearity · msa_attribute_agreement · gum_standard_uncertainty · gum_propagate · gum_expanded · gum_monte_carlo · gum_validate
msa)msa_anova_table · msa_bias_linearity · msa_attribute_agreement
*Provenance: spc.py — SPC 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.