분석법 밸리데이션 (Analytical Method Validation)
사용 시기
분석 절차가 사용 목적에 적합한지 여부가 의문되는 모든 경우: 밸리데이션 연구 설계, 밸리데이션 데이터 평가, 공정서 절차 검증, 절차를 다른 실험실이나 장비로 이전, 또는 이들 중 어느 하나에 대한 보고서 방어.
두 가지 규칙
1. 어떤 프레임워크가 적용되는지 먼저 결정한 후 설계하십시오. 동일한 분석법이라도 ICH Q2(R2), USP <1225>, ICH M10, CLSI EP, ISO/IEC 17025에 따라 다르게 밸리데이션됩니다. 이들은 요구되는 특성, 연구 설계 방식, 그리고 숫자로 된 허용 기준이 제공되는지 여부가 다릅니다. 이를 혼합하면 어떤 프레임워크도 충족하지 못하는 프로토콜이 생성됩니다.
2. 데이터 수집 전에 허용 기준을 명시하십시오. 결과를 확인한 후 선택된 기준은 허용 기준이 아니며, 사후에 결정하는 것은 지속적인 감사 지적 사항입니다. ICH Q2(R2)는 의도적으로 거의 숫자 기준을 제공하지 않습니다. 이는 규격, 분석 목표 프로파일(ICH Q14 섹션 3), 또는 개발 데이터에서 도출되어야 합니다. ICH M10은 예외로 명시적인 숫자를 제공하며, 크로마토그래피 분석법과 리간드 결합 분석법 간에 그 숫자가 다릅니다.
범위
이 스킬은 연구 계획, 통계 올바르게 계산, 문서 구조화를 수행합니다. 절차가 검증되었다고 판단하지 않으며, 배치를 출하하거나, 분석 실행을 승인/거부하거나, 조사를 종료하거나, 분석자, 기술 검토자, 품질 부서 또는 규제 기관을 대체하지 않습니다. 모든 스크립트는 보고할 뿐, 결론을 내리지 않습니다.
저작권 경계
ICH 가이드라인은 공개적으로 게시되고 승인과 함께 재사용이 허가되므로, 해당 요구사항은 이 스킬에 직접 인코딩됩니다. USP 일반 장, CLSI EP 문서 및 ISO 표준은 저작권이 있으며 유료 콘텐츠입니다. 이들에 대해 이 스킬은 명칭, 범위 및 공인된 사본을 얻을 수 있는 곳을 제공할 뿐, 텍스트나 임계값을 발명하지 않습니다. 에이전트에게 해당 내용을 검색, 전사 또는 재구성하도록 요청하지 마십시오. 숫자가 중요하고 유료 문서에 있는 경우, 공인된 사본에서 읽으십시오.
프레임워크
cd skills/analytical-method-validation/scripts
python3 plan_validation.py --list-frameworks
| 키 | 적용 대상 | 숫자 허용 기준 제공 여부 |
|---|---|---|
ich-q2r2 | 원료의약품 및 완제의약품의 방출 및 안정성 시험 | 거의 없음 — 직접 도출 |
ich-m10 | 생체분석 농도 측정(PK, TK, BE) | 예, 방식에 따라 다름 |
usp-1220 | 공정서 절차 수명 주기, 세 단계 | 유료 |
usp-1225 / usp-1226 | 공정서 절차의 밸리데이션/검증 | 유료 |
clsi | 임상 검사실 측정 절차(EP 시리즈) | 유료 |
iso-17025 | 인증 하에 실험실 자체 개발 및 수정된 방법 | 아니오 — "필요한 범위까지" |
Q2(R2)는 2023년 11월에 Q2(R1)를 대체하고 특성을 재구성했습니다. 범위(Range)는 이제 상위 특성(섹션 3.2)이며, 반응(직선성)과 하위 범위 한계의 밸리데이션(DL/QL)을 포함합니다. 정확성 및 정밀성은 섹션 3.3이며 단일 기준에 대해 조합하여 평가될 수 있습니다. 견고성(Robustness)은 개발 활동으로 취급되며 ICH Q14를 상호 참조합니다. 다변량 절차는 명시적으로 다루어지며(2.5 및 3.2.2.3), 부록 2는 Q2(R1)에서 다루지 않았던 기술 — 정량 ¹H-NMR, NIR, 정량 LC/MS, qPCR, 생물학적 분석법 및 입자 크기 — 에 대한 작업 예를 추가합니다. Q2(R1) 형태의 프로토콜, 즉 직선성, 범위, 정확성, 정밀성, 특이성, LOD, LOQ, 견고성의 평평한 목록은 구식입니다. 또한 2023년 11월 30일자 표 5 및 표 6-11에 대한 오류 수정에 유의하십시오.
스크립트
cd skills/analytical-method-validation/scripts
| 스크립트 | 답변하는 질문 |
|---|---|
plan_validation.py | 어떤 프레임워크, 어떤 특성, 어떤 연구 설계, 어떤 프로토콜? |
check_response.py | 검량선 모델이 실제로 범위 전체에 걸쳐 유효한가? |
check_accuracy_precision.py | 회수율은 얼마이며, 변동성 중 일간 변동은 얼마나 되는가? |
check_detection_limits.py | 각 허용 접근법에 따른 DL 및 QL은 무엇이며, 보고 한계를 충족하는가? |
check_bioanalytical_run.py | 이 분석 실행이 해당 방식에 대한 ICH M10을 충족하는가? |
compare_methods.py | 두 절차가 사전 명시된 한계 내에서 동등한가? |
모든 스크립트는 --format table|tsv|json을 허용합니다. 출처, 가이드라인 인용 및 주의 사항은 stderr로 전송됩니다. 데이터는 stdout으로 전송되므로 > out.tsv를 사용하여 분리할 수 있습니다. 종료 코드는 0 (지적 사항 없음), 1 (지적 사항 발생), 2 (잘못된 입력)이므로, 이들 중 어느 것이라도 워크플로우를 제어할 수 있습니다.
워크플로우
1. 프레임워크 및 필요한 특성 고정
python3 plan_validation.py --framework ich-q2r2 --attribute assay --technique hplc --range-use assay
Q2(R2) 표 1은 기술이 아닌 측정 속성에 따라 무엇이 필요한지 결정합니다. 분석법(assay)의 경우: 특이성, 반응, 정확성, 반복성, 중간 정밀성. 한계 시험(limit test)의 경우: 특이성 및 DL만. 동정 시험(identity test)의 경우: 특이성만. 허용되는 속성은 assay, impurity (정량), impurity-limit 및 identity입니다.
보고 가능한 범위는 규격에서 비롯됩니다. Q2(R2) 표 2는 작업 예를 제공합니다 — 분석법의 경우 선언된 함량의 80–120%, 함량 균일성의 경우 70–130%, 불순물의 경우 규격의 120%까지 보고 한계.
2. 프로토콜 생성 및 기준 입력
python3 plan_validation.py --framework ich-q2r2 --attribute impurity --protocol > protocol.md
모든 대괄호 필드는 데이터 수집 전에 결정하고 기록해야 하는 사항입니다. 프로토콜 골격은 Q2(R2) 작업에 대해 허용 기준을 의도적으로 미리 채우지 않습니다, 이는 방어 가능한 기본값이 없기 때문입니다.
3. 반응 평가
python3 check_response.py -i calibration.csv --max-back-calc-error 2
입력은 level,response이며, 각 주입당 한 행씩입니다. 동일한 수준의 반복 행은 반복 측정으로 간주되며, 이를 제공함으로써 직선성 검정이 가능해집니다.
결정 계수가 통과시킬 곡선의 실제 출력:
statistic value
distinct levels 5
slope 166.6000
intercept 2495.0000
intercept CI includes 0 no
coefficient of determination (r2) 0.9830
lack-of-fit F 469.5294
lack-of-fit p 1.5139e-06
runs test p 0.0492
level n mean_response mean_back_calculated relative_error_pct
50.0000 2 10075.0000 45.4982 -9.0036
75.0000 2 15150.0000 75.9604 1.2805
100.0000 2 20050.0000 105.3721 5.3721
125.0000 2 24050.0000 129.3818 3.5054
150.0000 2 26450.0000 143.7875 -4.1417
r² = 0.983이지만 모델은 사용할 수 없습니다: 범위 하단에서 역산 오차 −9.0%, lack-of-fit p = 1.5 × 10⁻⁶, 비무작위 잔차 부호. r²는 직선성의 증거가 아닙니다 — 범위에 따라 증가하며 곡률에 거의 민감하지 않습니다. 순수 오차에 대한 lack-of-fit F 검정과 잔차 패턴이 증거이며, 이것이 Q2(R2) 3.2.2.1이 상관 계수 단독보다는 점들의 직선으로부터의 편차 분석을 요구하는 이유입니다.
광범위 곡선의 경우 --weight 1/x2를 추가하십시오. 스크립트는 잔차 분산이 범위 상단 1/3에서 하단 1/3보다 10배 이상 클 때 이분산성을 플래그합니다. 가중치가 없는 적합은 보고 한계가 위치한 저농도 쪽을 정확히 편향시키기 때문입니다.
4. 정확성 및 정밀성 평가
python3 check_accuracy_precision.py -i ap.csv --accuracy-limit 2 --rsd-limit 1.0 --design-check assay
입력은 level,measured,group이며, 여기서 group은 중간 정밀성 요인(일차, 분석자 또는 장비)입니다.
level component sd rsd_pct df ci90_low_sd ci90_high_sd
100 repeatability (within group) 0.0707 0.0707 3 0.0438 0.2065
100 between-group 1.6515 1.6515 2 n/a n/a
100 intermediate precision (total) 1.6530 1.6530 2.0037 0.9554 7.2821
반복성 0.07% RSD는 훌륭해 보입니다; 중간 정밀성은 1.65%로 23배 더 큽니다. 이는 변동성의 대부분이 일간 차이에 있기 때문입니다. 일내 변동성을 절차의 정밀성으로 보고하면 일상 성능을 한 자릿수 이상 과소평가하게 됩니다. 이것이 스크립트가 풀링 대신 일원 랜덤 효과 모델을 적합하는 이유입니다.
스크립트가 처리하는 두 가지 함정:
- 정밀성은 각 수준 내에서 추정되며, 수준 간에 풀링되지 않습니다. 80/100/120% 결과를 하나의 표준 편차로 풀링하면 범위 자체가 명백한 부정확성으로 변합니다. 스크립트는 수준별로 보고하며, 추가로 명목값 대비 백분율로 수준 독립적인 보기를 제공합니다.
--require-ci-within-limit는 평균뿐만 아니라 신뢰 구간 전체가 한계 내에 위치하도록 강제합니다. Q2(R2) 3.3.1.4는 구간이 기준과 양립 가능할 것을 요구합니다; 6회 반복으로 간신히 한계 내에 들어간 평균은 많은 것을 입증하지 못했습니다.
5. DL 및 QL 설정 및 확인
python3 check_detection_limits.py --calibration lowcal.csv --blanks blanks.csv \
--confirm-ql 0.05 --confirm-data ql_check.csv --reporting-threshold 0.05
approach sigma slope DL QL
sd-and-slope (sigma = residual SD of regression) 7.2816 5033.3490 0.0048 0.0145
sd-and-slope (sigma = SD of y-intercept) 4.3303 5033.3490 0.0028 0.0086
sd-and-slope (sigma = SD of 8 blanks) 3.7702 5033.3490 0.0025 0.0075
동일한 데이터가 σ 선택만으로 1.9배 범위의 QL 추정치를 제공합니다. 따라서 Q2(R2) 3.2.3.5는 한계 및 이를 결정하는 데 사용된 접근법을 보고하고, 추정된 한계를 그 근처의 시료로 확인할 것을 요구합니다. 불순물 절차의 경우 QL은 보고 한계 이하여야 합니다. 반사적으로 3.3σ/기울기를 적용하고, 명명된 접근법 없이 하나의 숫자를 보고하며, 이를 확인하지 않는 것은 세 가지 별개의 지적 사항입니다.
6. ICH M10에 따른 생체분석 실행
python3 check_bioanalytical_run.py --modality chromatographic --run run1.csv
python3 check_bioanalytical_run.py --modality lba --isr isr.csv
python3 check_bioanalytical_run.py --modality lba --criteria
--modality는 필수이며 기본값이 없습니다. 기준이 실제로 다르기 때문입니다:
| 크로마토그래피 | 리간드 결합 분석법 | |
|---|---|---|
| 검량선 허용 오차 | ±15%, LLOQ에서 ±20% | ±20%, LLOQ 및 ULOQ에서 ±25% |
| 정확성/정밀성 | ±15% / ≤15% CV (LLOQ에서 ±20% / ≤20%) | ±20% / ≤20% CV (LLOQ 및 ULOQ에서 ±25% / ≤25%) |
| A&P 설계 | 4 QC 수준, 실행당 5 반복, 2일 이상 ≥3 실행 | 5 QC 수준, 실행당 3 반복, 2일 이상 ≥6 실행 |
| 총 오차 | 해당 기준 없음 | ≤30%, LLOQ 및 ULOQ에서 ≤40% |
| ISR 일치도 | 반복의 ≥2/3에 대해 ±20% | 반복의 ≥2/3에 대해 ±30% |
±15% 크로마토그래피 수치를 리간드 결합 분석법에 적용하거나, LBA 총 오차 기준을 크로마토그래피 방법에 도입하는 것은 모두 흔하고 모두 틀렸습니다.
실행 검사는 놓치기 쉬운 수준별 규칙을 적용합니다: 모든 QC의 최소 2/3 그리고 각 수준에서 최소 50%. 실행은 전체 비율을 통과할 수 있지만 단일 수준이 완전히 실패할 수 있습니다.
finding: QC level high: 0/2 within tolerance (0%); M10 requires at least 50% at each level
7. 이전 및 방법 비교
python3 compare_methods.py -i paired.csv --margin 2 --relative --slope-tolerance 0.05
mean difference (%) 1.4646
TOST margin 2.0000
TOST p-value 1.0528e-13
90% CI (TOST) 1.44127 to 1.48797
equivalent at stated margin yes
--- for contrast only ---
paired t-test p (NOT equivalence) 0.0000
OLS slope (biased here) 1.0396
Deming slope 1.0398
Passing-Bablok slope 1.0351
이것이 대체하는 두 가지 오류:
- "p > 0.05, 유의한 차이가 없으므로 방법이 동등합니다." 차이를 감지하지 못하는 것은 동등성의 증거가 아니며, 작은 이전 데이터 세트에서 그 결과는 거의 보장됩니다. TOST는 중요한 가설 — 즉, 실제 차이가 사전 명시된 한계 내에 있다는 가설 — 을 검정합니다. 여기서 t 검정은 차이가 고도로 유의하다고 말하고 TOST는 방법이 ±2%에서 동등하다고 말합니다. 둘 다 사실이며, 오직 하나만 질문에 답합니다.
- 방법 비교를 위한 일반 최소 제곱(OLS). OLS는 참조 값에 오차가 없다고 가정하는데, 이는 두 절차를 비교할 때 거짓이며 기울기를 0으로 편향시킵니다. Deming(명시된 오차-분산 비율 사용) 및 Passing-Bablok(비모수적, 이상치 저항성)이 적절한 회귀 방법이며 대비를 위해 OLS와 함께 나란히 보고됩니다.
스크립트는 또한 비례 편향(차이가 농도에 따라 추세를 보일 때)을 플래그합니다. 이 경우 단일 평균 편향과 그 일치 한계는 아무리 좁아 보여도 오해의 소지가 있습니다.
이 스킬이 방지하고자 하는 것
- Q2(R2)로 대체된 지 3년 후에도 ICH Q2(R1)의 구조에 대해 밸리데이션하는 것.
- 데이터를 확인한 후에 작성된 허용 기준.
- 직선성의 증거로 제시된 r².
- 일간 변동 성분이 보이지 않는 상태에서 반복성을 절차의 정밀성으로 보고하는 것.
- 명명된 접근법과 확인 없이 하나의 DL/QL 숫자.
- 크로마토그래피 M10 기준을 리간드 결합 분석법에 적용하거나 그 반대.
- 방법 이전에서 t 검정의 비유의성을 동등성으로 제시하는 것.
참고 자료
references/framework-selection.md— 어떤 프레임워크가 적용되는지, 그리고 그 질문들
…
[번역을 위해 잘림]