Validação de Métodos Analíticos
Quando usar
Sempre que a questão for se um procedimento analítico é adequado ao seu propósito pretendido: projetar um estudo de validação, avaliar dados de validação, verificar um procedimento compendial, transferir um procedimento para outro laboratório ou instrumento, ou defender qualquer um destes em um relatório.
As duas regras
1. Estabeleça qual referencial rege antes de projetar qualquer coisa. O mesmo ensaio valida de forma diferente sob ICH Q2(R2), USP <1225>, ICH M10, CLSI EP e ISO/IEC 17025. Eles diferem em quais características são exigidas, como os estudos são organizados e se critérios numéricos de aceitação são fornecidos. Misturá-los produz um protocolo que não satisfaz nenhum deles.
2. Estabeleça os critérios de aceitação antes de coletar dados. Critérios escolhidos após ver os resultados não são critérios de aceitação, e decidi-los post hoc é uma constatação permanente de auditoria. O ICH Q2(R2) deliberadamente não fornece quase nenhum critério numérico — eles devem vir da especificação, do perfil alvo analítico (ICH Q14 seção 3) ou dos dados de desenvolvimento. O ICH M10 é a exceção: ele fornece números explícitos, e eles diferem entre ensaios cromatográficos e ensaios de ligação de ligandos.
Escopo
Esta skill planeja estudos, calcula as estatísticas corretamente e estrutura a documentação. Ela não decide que um procedimento está validado, libera um lote, aceita ou rejeita uma corrida, encerra uma investigação ou substitui o analista, o revisor técnico, a unidade da qualidade ou o órgão regulador. Cada script relata; nenhum deles conclui.
Limite de direitos autorais
As diretrizes do ICH são publicadas abertamente e licenciadas para reutilização com reconhecimento, portanto seus requisitos são codificados diretamente nesta skill. Os capítulos gerais da USP, documentos da série EP do CLSI e normas ISO são protegidos por direitos autorais e estão atrás de paywall. Para estes, esta skill fornece a designação, o escopo e onde obter uma cópia autorizada — nunca o texto, nunca limites inventados. Não peça a um agente para recuperar, transcrever ou reconstruir seu conteúdo. Se um número for importante e estiver em um documento atrás de paywall, leia-o da cópia autorizada.
Referenciais
cd skills/analytical-method-validation/scripts
python3 plan_validation.py --list-frameworks
| Chave | Rege | Critérios numéricos fornecidos |
|---|---|---|
ich-q2r2 | Testes de liberação e estabilidade de fármacos e produtos | Quase nenhum — você os deriva |
ich-m10 | Medição de concentração bioanalítica (PK, TK, BE) | Sim, e diferem por modalidade |
usp-1220 | Ciclo de vida do procedimento compendial, três estágios | Paywall |
usp-1225 / usp-1226 | Validação / verificação de procedimentos compendiais | Paywall |
clsi | Procedimentos de medição em laboratório clínico (série EP) | Paywall |
iso-17025 | Métodos desenvolvidos e modificados em laboratório sob acreditação | Não — "na medida necessária" |
A Q2(R2) substituiu a Q2(R1) em novembro de 2023 e reestruturou as características. Faixa é agora a característica pai (seção 3.2), contendo resposta (linearidade) e validação dos limites inferiores da faixa (LD/LQ). Exatidão e precisão são a seção 3.3 e podem ser avaliadas em combinação contra um único critério. Robustez é tratada como uma atividade de desenvolvimento e faz referência cruzada ao ICH Q14. Procedimentos multivariados são abordados explicitamente (2.5 e 3.2.2.3), e o Anexo 2 adiciona exemplos práticos para técnicas que a Q2(R1) nunca cobriu — RMN-¹H quantitativa, NIR, LC/MS quantitativa, qPCR, ensaios biológicos e tamanho de partícula. Um protocolo no formato da Q2(R1) — uma lista plana de linearidade, faixa, exatidão, precisão, especificidade, LOD, LOQ, robustez — está desatualizado. Observe também a correção de erro datada de 30 de novembro de 2023 para a Tabela 5 e Tabelas 6–11.
Scripts
cd skills/analytical-method-validation/scripts
| Script | Pergunta respondida |
|---|---|
plan_validation.py | Qual referencial, quais características, qual layout de estudo, qual protocolo? |
check_response.py | O modelo de calibração realmente se mantém em toda a faixa? |
check_accuracy_precision.py | Qual é a recuperação e quanto da variabilidade é entre dias? |
check_detection_limits.py | Quais são LD e LQ por cada abordagem permitida e eles atendem ao limiar de relato? |
check_bioanalytical_run.py | Esta corrida atende ao ICH M10 para sua modalidade? |
compare_methods.py | Dois procedimentos são equivalentes, com uma margem pré-estabelecida? |
Todos aceitam --format table|tsv|json. Procedência, citações de diretrizes e ressalvas vão para stderr;
os dados vão para stdout, então > out.tsv os mantém separados. O código de saída é 0 para nenhuma constatação, 1
quando constatações foram levantadas, 2 para entrada inválida — portanto, qualquer um deles pode controlar um fluxo de trabalho.
Fluxo de trabalho
1. Fixe o referencial e as características exigidas
python3 plan_validation.py --framework ich-q2r2 --attribute assay --technique hplc --range-use assay
A Tabela 1 da Q2(R2) decide o que é exigido a partir do atributo medido, não da técnica. Para
um ensaio: especificidade, resposta, exatidão, repetibilidade, precisão intermediária. Para um
teste de limite: especificidade e LD apenas. Para um teste de identidade: apenas especificidade. Os atributos aceitos
incluem assay (ensaio), impurity (impureza, quantitativo), impurity-limit (limite de impureza) e identity (identidade).
A faixa relatável vem da especificação. A Tabela 2 da Q2(R2) fornece exemplos práticos — 80–120% do teor declarado para um ensaio, 70–130% para uniformidade de conteúdo, limiar de relato a 120% da especificação para uma impureza.
2. Gere o protocolo e preencha os critérios
python3 plan_validation.py --framework ich-q2r2 --attribute impurity --protocol > protocol.md
Cada campo entre colchetes é uma decisão a ser tomada e registrada antes da coleta de dados. O esqueleto do protocolo recusa-se deliberadamente a pré-preencher critérios de aceitação para trabalho sob Q2(R2), porque não há padrão defensável.
3. Avalie a resposta
python3 check_response.py -i calibration.csv --max-back-calc-error 2
A entrada é level,response, uma linha por injeção; linhas repetidas no mesmo nível são réplicas,
e fornecê-las é o que torna o teste de linearidade possível.
Saída real de uma curva que um coeficiente de determinação aprovaria:
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 e o modelo é inutilizável: −9,0% de erro retrocalculado na parte inferior da faixa, falta de ajuste p = 1,5 × 10⁻⁶, sinais residuais não aleatórios. r² não é evidência de linearidade — ele aumenta com a faixa e é quase insensível à curvatura. O teste F de falta de ajuste contra o erro puro e o padrão residual são a evidência, e é por isso que a Q2(R2) 3.2.2.1 pede uma análise do desvio dos pontos em relação à linha em vez de apenas um coeficiente de correlação.
Adicione --gewicht 1/x2 para uma curva de faixa ampla. O script sinaliza heterocedasticidade quando a
variância residual no terço superior da faixa excede o terço inferior em mais de 10×, porque
um ajuste não ponderado então tendencia exatamente a extremidade inferior onde um limiar de relato reside.
4. Avalie exatidão e precisão
python3 check_accuracy_precision.py -i ap.csv --accuracy-limit 2 --rsd-limit 1.0 --design-check assay
A entrada é level,measured,group, onde group é o fator de precisão intermediária — dia,
analista ou instrumento.
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
Repetibilidade de 0,07% RSD parece excelente; a precisão intermediária é de 1,65%, vinte e três vezes maior, porque a variabilidade reside inteiramente entre dias. Relatar o valor intradiário como a precisão do procedimento subestimaria o desempenho rotineiro em mais de uma ordem de grandeza. É por isso que o script ajusta um modelo de efeitos aleatórios unidirecional em vez de agrupar.
Duas armadilhas que o script trata para você:
- A precisão é estimada dentro de cada nível, nunca agrupada entre níveis. Agrupar resultados de 80/100/120% em um desvio padrão transforma a própria faixa em imprecisão aparente. O script relata por nível, mais uma visão independente do nível como percentual do nominal.
--require-ci-within-limitimpõe que todo o intervalo de confiança esteja dentro do limite, não apenas a média. A Q2(R2) 3.3.1.4 pede que o intervalo seja compatível com o critério; uma média que se encaixa por pouco em seis réplicas não demostrou muito.
5. Estabeleça LD e LQ e confirme-os
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
Os mesmos dados fornecem estimativas de LQ variando 1,9×, puramente pela escolha de σ. A Q2(R2) 3.2.3.5
exige, portanto, que o limite e a abordagem usada para determiná-lo sejam relatados, e que um
limite estimado seja confirmado com amostras próximas a ele. Para um procedimento de impureza, o LQ deve
estar igual ou abaixo do limiar de relato. Alcançar reflexivamente 3,3σ/inclinação, relatar um número
sem nenhuma abordagem nomeada e nunca confirmá-lo são três constatações separadas.
6. Corridas bioanalíticas sob 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 é obrigatório e não tem padrão, porque os critérios realmente diferem:
| Cromatográfico | Ensaio de ligação de ligandos | |
|---|---|---|
| Tolerância de calibração | ±15%, ±20% no LLOQ | ±20%, ±25% no LLOQ e ULOQ |
| Exatidão / precisão | ±15% / ≤15% CV (±20% / ≤20% no LLOQ) | ±20% / ≤20% CV (±25% / ≤25% no LLOQ e ULOQ) |
| Projeto A&P | 4 níveis QC, 5 réplicas/corrida, ≥3 corridas em ≥2 dias | 5 níveis QC, 3 réplicas/corrida, ≥6 corridas em ≥2 dias |
| Erro total | nenhum critério | ≤30%, ≤40% no LLOQ e ULOQ |
| Concordância ISR | ±20% para ≥2/3 das repetições | ±30% para ≥2/3 das repetições |
Aplicar os números cromatográficos de ±15% a um ensaio de ligação de ligandos, ou importar o critério de erro total de LBA para um método cromatográfico, são ambos comuns e ambos errados.
A verificação de corrida impõe a regra por nível que é esquecida: pelo menos 2/3 de todos os QCs e pelo menos 50% em cada nível. Uma corrida pode passar na fração geral enquanto um único nível falha completamente.
finding: QC level high: 0/2 within tolerance (0%); M10 requires at least 50% at each level
7. Transferência e comparação de métodos
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
Dois erros que isso substitui:
- "p > 0,05, nenhuma diferença significativa, portanto os métodos são equivalentes." Não detetar uma diferença não é evidência de equivalência, e em um pequeno conjunto de dados de transferência este resultado é quase garantido. O TOST testa a hipótese que importa — que a diferença verdadeira está dentro de uma margem pré-estabelecida. Aqui, o teste t diz que a diferença é altamente significativa e o TOST diz que os métodos são equivalentes a ±2%; ambas são verdadeiras, e apenas uma responde à pergunta.
- Mínimos quadrados ordinários para comparação de métodos. OLS assume que os valores de referência não carregam erro, o que é falso ao comparar dois procedimentos, e tendencia a inclinação para zero. Deming (com uma razão de variância de erro declarada) e Passing–Bablok (não paramétrico, resistente a outliers) são as regressões apropriadas e são relatadas lado a lado com OLS para contraste.
O script também sinaliza viés proporcional — quando a diferença tende com a concentração, um viés médio único e seus limites de concordância são enganosos, independentemente de quão estreitos pareçam.
O que esta skill existe para prevenir
- Validar contra a estrutura do ICH Q2(R1) três anos após a Q2(R2) tê-la substituído.
- Critérios de aceitação escritos após os dados serem vistos.
- r² apresentado como evidência de linearidade.
- Repetibilidade relatada como a precisão do procedimento, com o componente entre dias invisível.
- Um número de LD/LQ sem abordagem nomeada e sem confirmação.
- Critérios cromatográficos M10 aplicados a um ensaio de ligação de ligandos, ou o inverso.
- A não significância de um teste t apresentada como equivalência em uma transferência de método.
Referências
references/framework-selection.md— qual referencial rege e as perguntas...