Esta vinheta aplica o fluxo do ValCurvaR aos dados da
Tabela A5.2 do guia Eurachem/CITAC. Os dados sao mantidos no formato
longo: cada uma das tres replicatas continua disponivel para avaliar a
variabilidade e a falta de ajuste.
O exemplo demonstra a analise; ele nao estabelece, por si so, um criterio de aceitacao universal para uma tecnica ou matriz.
dados <- dados_eurachem_a52()
curva <- validar_curva(dados, concentracao_mg_L, absorbancia, replica)
ols <- ajustar_curva(curva, metodo = "ols")
wls <- ajustar_curva(curva, metodo = "wls", pesos = "variancia_nivel")
ols
#> ValCurvaR OLS fit
#> sinal = 0.0087 + 0.241 * concentracao
#> n = 15 | niveis = 5
wls
#> ValCurvaR WLS fit
#> sinal = 0.0034275902 + 0.25554881 * concentracao
#> n = 15 | niveis = 5diag_ols <- diagnosticar_curva(ols)
diag_ols$resumo_niveis
#> concentracao n media_sinal dp_sinal cv_percentual
#> 1 0.1 3 0.02866667 0.0005773503 2.0140126
#> 2 0.3 3 0.08266667 0.0015275252 1.8478128
#> 3 0.5 3 0.13300000 0.0020000000 1.5037594
#> 4 0.7 3 0.18133333 0.0015275252 0.8423852
#> 5 0.9 3 0.22033333 0.0083864971 3.8062770
diag_ols$homocedasticidade
#> $disponivel
#> [1] TRUE
#>
#> $estatistica
#> [1] 0.8041237
#>
#> $gl1
#> [1] 4
#>
#> $gl2
#> [1] 10
#>
#> $p_valor
#> [1] 0.5497365
diag_ols$falta_ajuste
#> $disponivel
#> [1] TRUE
#>
#> $ss_erro_puro
#> [1] 0.0001586667
#>
#> $ss_falta_ajuste
#> [1] 0.0002325333
#>
#> $gl_falta_ajuste
#> [1] 3
#>
#> $gl_erro_puro
#> [1] 10
#>
#> $estatistica
#> [1] 4.885154
#>
#> $p_valor
#> [1] 0.02415306
diag_ols$mandel
#> $disponivel
#> [1] TRUE
#>
#> $estatistica
#> [1] 15.32934
#>
#> $p_valor
#> [1] 0.002052595
#>
#> $modelo_quadratico
#>
#> Call:
#> stats::lm(formula = .y ~ .x + I(.x^2), data = data, weights = fit$weights)
#>
#> Coefficients:
#> (Intercept) .x I(.x^2)
#> -0.001014 0.298143 -0.057143
diag_ols$avisos
#> [1] "Breusch-Pagan indica variancia nao constante."
#> [2] "Goldfeld-Quandt indica variancia nao constante ao longo da concentracao."
#> [3] "Cochran indica uma variancia de nivel desproporcionalmente alta."
#> [4] "Ha evidencia de falta de ajuste linear; investigue a faixa ou a curvatura."
#> [5] "O termo quadratico melhora o ajuste; nao aprove a linearidade sem investigacao."
#> [6] "Ha observacoes influentes; investigue-as antes de excluir qualquer dado."
#> [7] "Ha residuos studentizados extremos; confirme a causa metrologica antes de qualquer decisao."O teste de falta de ajuste usa a variacao entre replicatas para separar erro puro de desvio da reta. Portanto, ele deixa de estar disponivel quando os dados ja foram agregados por nivel.
comparar_modelos(ols, wls)
#> metodo pesos intercepto inclinacao r2 rmse_sinal
#> (Intercept) OLS nenhuma 0.00870000 0.2410000 0.9944185 0.005106858
#> (Intercept)1 WLS variancia_nivel 0.00342759 0.2555488 0.9990911 0.006857218
#> vies_medio_retrocalculado erro_relativo_medio_percentual
#> (Intercept) -3.608225e-17 5.744319
#> (Intercept)1 -7.834109e-03 2.538395O maior R2 nao decide qual modelo deve ser usado. A
comparacao deve incluir o padrao dos residuos, a justificativa dos pesos
e o desempenho de retrocalculo na faixa de uso pretendida.
retrocalcular_concentracao(wls, sinal = c(0.133, 0.180), k = 1)
#> sinal concentracao u_sinal u_padrao fator_cobertura U_expandida nivel
#> 1 0.133 0.5070358 1.528726 5.98213 2.160369 12.92361 0.95
#> 2 0.180 0.6909537 1.528726 5.98213 2.160369 12.92361 0.95
#> gl_regressao contribuicao_sinal contribuicao_intercepto
#> 1 13 35.78587 5.986608e-06
#> 2 13 35.78587 5.986608e-06
#> contribuicao_inclinacao contribuicao_cov_intercepto_inclinacao
#> 1 1.799000e-05 -1.491709e-05
#> 2 3.340811e-05 -2.032799e-05O retrocalculo usa o modelo x = (y - a) / b e a
propagacao GUM conserva o termo de covariancia entre a e
b. Quando u_sinal nao e informado, o pacote
usa o desvio-padrao residual dividido por sqrt(k) como
estimativa derivada dos dados. A decisao metrologica final deve
considerar as demais fontes de incerteza relevantes ao procedimento.
Os limites sao definidos pelo usuario, pois nao ha um unico limite de CV ou erro relativo valido para todos os metodos e matrizes. O pacote registra tanto os criterios fornecidos como aqueles que permaneceram nao avaliados.
avaliar_adequacao(
wls,
criterios = list(
cv_max_percentual = 10,
erro_relativo_retrocalculo_max_percentual = 10
)
)
#> $criterios
#> criterio valor limite status
#> 1 p de falta de ajuste 0.0014054866 NA nao avaliado
#> 2 p do teste de Mandel 0.0007427578 NA nao avaliado
#> 3 CV maximo por nivel (%) 3.8062770425 10 atende
#> 4 erro relativo medio maximo por nivel (%) 5.6906673757 10 atende
#>
#> $retrocalculo_por_observacao
#> concentracao sinal concentracao_retrocalculada erro_relativo_percentual
#> 1 0.1 0.028 0.09615544 -3.84455568
#> 2 0.1 0.029 0.10006859 0.06859102
#> 3 0.1 0.029 0.10006859 0.06859102
#> 4 0.3 0.084 0.31529166 5.09721990
#> 5 0.3 0.083 0.31137851 3.79283767
#> 6 0.3 0.081 0.30355222 1.18407320
#> 7 0.5 0.135 0.51486214 2.97242832
#> 8 0.5 0.131 0.49920955 -0.15808905
#> 9 0.5 0.133 0.50703585 1.40716964
#> 10 0.7 0.180 0.69095374 -1.29232239
#> 11 0.7 0.181 0.69486689 -0.73330144
#> 12 0.7 0.183 0.70269318 0.38474048
#> 13 0.9 0.215 0.82791388 -8.00956913
#> 14 0.9 0.230 0.88661108 -1.48765795
#> 15 0.9 0.216 0.83182702 -7.57477505
#>
#> $retrocalculo_por_nivel
#> concentracao vies_percentual erro_absoluto_medio_percentual
#> 1 0.1 -1.2357912 1.3272459
#> 2 0.3 3.3580436 3.3580436
#> 3 0.5 1.4071696 1.5125623
#> 4 0.7 -0.5469611 0.8034548
#> 5 0.9 -5.6906674 5.6906674
#>
#> $conclusao
#> [1] "Atende aos criterios informados; a aprovacao final requer revisao tecnica."
#>
#> attr(,"class")
#> [1] "valcurva_adequacao"
relatorio_auditoria(wls, criterios = list(cv_max_percentual = 10))
#> $modelo
#> $modelo$metodo
#> [1] "wls"
#>
#> $modelo$pesos
#> [1] "variancia_nivel"
#>
#> $modelo$coeficientes
#> (Intercept) .x
#> 0.00342759 0.25554881
#>
#> $modelo$covariancia_coeficientes
#> (Intercept) .x
#> (Intercept) 3.909566e-07 -9.606458e-07
#> .x -9.606458e-07 4.569847e-06
#>
#> $modelo$graus_de_liberdade
#> [1] 13
#>
#>
#> $dados_por_nivel
#> concentracao n media_sinal dp_sinal cv_percentual
#> 1 0.1 3 0.02866667 0.0005773503 2.0140126
#> 2 0.3 3 0.08266667 0.0015275252 1.8478128
#> 3 0.5 3 0.13300000 0.0020000000 1.5037594
#> 4 0.7 3 0.18133333 0.0015275252 0.8423852
#> 5 0.9 3 0.22033333 0.0083864971 3.8062770
#>
#> $diagnosticos
#> $diagnosticos$resumo_niveis
#> concentracao n media_sinal dp_sinal cv_percentual
#> 1 0.1 3 0.02866667 0.0005773503 2.0140126
#> 2 0.3 3 0.08266667 0.0015275252 1.8478128
#> 3 0.5 3 0.13300000 0.0020000000 1.5037594
#> 4 0.7 3 0.18133333 0.0015275252 0.8423852
#> 5 0.9 3 0.22033333 0.0083864971 3.8062770
#>
#> $diagnosticos$homocedasticidade
#> $diagnosticos$homocedasticidade$disponivel
#> [1] TRUE
#>
#> $diagnosticos$homocedasticidade$estatistica
#> [1] 0.8041237
#>
#> $diagnosticos$homocedasticidade$gl1
#> [1] 4
#>
#> $diagnosticos$homocedasticidade$gl2
#> [1] 10
#>
#> $diagnosticos$homocedasticidade$p_valor
#> [1] 0.5497365
#>
#>
#> $diagnosticos$breusch_pagan
#> $diagnosticos$breusch_pagan$disponivel
#> [1] TRUE
#>
#> $diagnosticos$breusch_pagan$estatistica
#> [1] 12364627
#>
#> $diagnosticos$breusch_pagan$gl
#> [1] 1
#>
#> $diagnosticos$breusch_pagan$p_valor
#> BP
#> 0
#>
#>
#> $diagnosticos$goldfeld_quandt
#> $diagnosticos$goldfeld_quandt$disponivel
#> [1] TRUE
#>
#> $diagnosticos$goldfeld_quandt$estatistica
#> [1] 27.25
#>
#> $diagnosticos$goldfeld_quandt$gl
#> [1] 4 4
#>
#> $diagnosticos$goldfeld_quandt$p_valor
#> [1] 0.003670394
#>
#>
#> $diagnosticos$cochran
#> $diagnosticos$cochran$disponivel
#> [1] TRUE
#>
#> $diagnosticos$cochran$estatistica
#> [1] 0.8865546
#>
#> $diagnosticos$cochran$gl
#> 0.1
#> 2
#>
#> $diagnosticos$cochran$p_valor_aproximado
#> [1] 0.0008574005
#>
#> $diagnosticos$cochran$valor_critico_5_percentual
#> [1] 0.6837722
#>
#> $diagnosticos$cochran$variancias_por_nivel
#> 0.1 0.3 0.5 0.7 0.9
#> 3.333333e-07 2.333333e-06 4.000000e-06 2.333333e-06 7.033333e-05
#>
#>
#> $diagnosticos$grubbs
#> $diagnosticos$grubbs$disponivel
#> [1] TRUE
#>
#> $diagnosticos$grubbs$estatistica
#> [1] 2.418672
#>
#> $diagnosticos$grubbs$p_valor
#> [1] 0.0478073
#>
#> $diagnosticos$grubbs$observacao
#> 13
#> 13
#>
#> $diagnosticos$grubbs$residuo
#> 13
#> -0.01842152
#>
#> $diagnosticos$grubbs$alternativa
#> [1] "lowest value -0.0184215230338424 is an outlier"
#>
#> $diagnosticos$grubbs$nota
#> [1] "Resultado para investigacao; nao exclua observacoes automaticamente."
#>
#>
#> $diagnosticos$falta_ajuste
#> $diagnosticos$falta_ajuste$disponivel
#> [1] TRUE
#>
#> $diagnosticos$falta_ajuste$ss_erro_puro
#> [1] 0.0001586667
#>
#> $diagnosticos$falta_ajuste$ss_falta_ajuste
#> [1] 0.0005466548
#>
#> $diagnosticos$falta_ajuste$gl_falta_ajuste
#> [1] 3
#>
#> $diagnosticos$falta_ajuste$gl_erro_puro
#> [1] 10
#>
#> $diagnosticos$falta_ajuste$estatistica
#> [1] 11.48435
#>
#> $diagnosticos$falta_ajuste$p_valor
#> [1] 0.001405487
#>
#>
#> $diagnosticos$mandel
#> $diagnosticos$mandel$disponivel
#> [1] TRUE
#>
#> $diagnosticos$mandel$estatistica
#> [1] 20.13689
#>
#> $diagnosticos$mandel$p_valor
#> [1] 0.0007427578
#>
#> $diagnosticos$mandel$modelo_quadratico
#>
#> Call:
#> stats::lm(formula = .y ~ .x + I(.x^2), data = data, weights = fit$weights)
#>
#> Coefficients:
#> (Intercept) .x I(.x^2)
#> 0.0003944 0.2867469 -0.0412048
#>
#>
#>
#> $diagnosticos$influencia
#> concentracao sinal residuo residuo_padronizado residuo_studentizado
#> 1 0.1 0.028 -9.824716e-04 -1.34386706 -1.39140599
#> 2 0.1 0.029 1.752835e-05 0.02397604 0.02303594
#> 3 0.1 0.029 1.752835e-05 0.02397604 0.02303594
#> 4 0.3 0.084 3.907766e-03 1.70921205 1.86503330
#> 5 0.3 0.083 2.907766e-03 1.27182346 1.30586804
#> 6 0.3 0.081 9.077655e-04 0.39704628 0.38380394
#> 7 0.5 0.135 3.798003e-03 1.28211145 1.31795345
#> 8 0.5 0.131 -2.019973e-04 -0.06818929 -0.06552587
#> 9 0.5 0.133 1.798003e-03 0.60696108 0.59159203
#> 10 0.7 0.180 -2.311760e-03 -1.13238219 -1.14594103
#> 11 0.7 0.181 -1.311760e-03 -0.64254670 -0.62738177
#> 12 0.7 0.183 6.882398e-04 0.33712429 0.32532373
#> 13 0.9 0.215 -1.842152e-02 -1.44730544 -1.51821008
#> 14 0.9 0.230 -3.421523e-03 -0.26881539 -0.25899029
#> 15 0.9 0.216 -1.742152e-02 -1.36873944 -1.42144839
#> alavancagem cook dffits dfbeta_intercepto dfbeta_inclinacao
#> 1 0.31389685 0.4131237566 -0.94113655 -0.897612603 0.448412438
#> 2 0.31389685 0.0001314990 0.01558134 0.014860760 -0.007423859
#> 3 0.31389685 0.0001314990 0.01558134 0.014860760 -0.007423859
#> 4 0.04141851 0.0631142418 0.38767637 0.134068317 0.156571837
#> 5 0.04141851 0.0349453295 0.27144511 0.093872603 0.109629226
#> 6 0.04141851 0.0034057889 0.07977966 0.027589828 0.032220812
#> 7 0.06127214 0.0536469345 0.33671444 -0.063588673 0.275612476
#> 8 0.06127214 0.0001517489 -0.01674073 0.003161495 -0.013702872
#> 9 0.06127214 0.0120230607 0.15114159 -0.028543157 0.123714646
#> 10 0.23570073 0.1977213456 -0.63637193 0.252708299 -0.587719033
#> 11 0.23570073 0.0636615031 -0.34840200 0.138353175 -0.321765429
#> 12 0.23570073 0.0175245785 0.18066104 -0.071741918 0.166848857
#> 13 0.01437843 0.0152788811 -0.18337176 0.090351722 -0.175886202
#> 14 0.01437843 0.0005270835 -0.03128125 0.015413031 -0.030004292
#> 15 0.01437843 0.0136650971 -0.17168473 0.084593240 -0.164676261
#> flag_cook flag_alavancagem flag_dffits flag_dfbeta flag_studentizado
#> 1 TRUE TRUE TRUE TRUE FALSE
#> 2 FALSE TRUE FALSE FALSE FALSE
#> 3 FALSE TRUE FALSE FALSE FALSE
#> 4 FALSE FALSE FALSE FALSE FALSE
#> 5 FALSE FALSE FALSE FALSE FALSE
#> 6 FALSE FALSE FALSE FALSE FALSE
#> 7 FALSE FALSE FALSE FALSE FALSE
#> 8 FALSE FALSE FALSE FALSE FALSE
#> 9 FALSE FALSE FALSE FALSE FALSE
#> 10 FALSE FALSE FALSE TRUE FALSE
#> 11 FALSE FALSE FALSE FALSE FALSE
#> 12 FALSE FALSE FALSE FALSE FALSE
#> 13 FALSE FALSE FALSE FALSE FALSE
#> 14 FALSE FALSE FALSE FALSE FALSE
#> 15 FALSE FALSE FALSE FALSE FALSE
#>
#> $diagnosticos$normalidade
#> $diagnosticos$normalidade$shapiro_wilk
#>
#> Shapiro-Wilk normality test
#>
#> data: residuals
#> W = 0.70491, p-value = 0.0002806
#>
#>
#> $diagnosticos$normalidade$anderson_darling
#>
#> Anderson-Darling normality test
#>
#> data: residuals
#> A = 1.8386, p-value = 5.761e-05
#>
#>
#> $diagnosticos$normalidade$kolmogorov_smirnov_lilliefors
#>
#> Lilliefors (Kolmogorov-Smirnov) normality test
#>
#> data: residuals
#> D = 0.28385, p-value = 0.001992
#>
#>
#> $diagnosticos$normalidade$ryan_joiner
#> $diagnosticos$normalidade$ryan_joiner$disponivel
#> [1] TRUE
#>
#> $diagnosticos$normalidade$ryan_joiner$estatistica
#> [1] 0.836419
#>
#> $diagnosticos$normalidade$ryan_joiner$valor_critico_5_percentual
#> [1] 0.9382595
#>
#> $diagnosticos$normalidade$ryan_joiner$p_valor
#> [1] "< 0.01"
#>
#> $diagnosticos$normalidade$ryan_joiner$rejeita_normalidade
#> [1] TRUE
#>
#> $diagnosticos$normalidade$ryan_joiner$metodo
#> [1] "Ryan-Joiner (aproximacao por correlacao normal)"
#>
#>
#>
#> $diagnosticos$independencia
#> $diagnosticos$independencia$durbin_watson
#> $diagnosticos$independencia$durbin_watson$disponivel
#> [1] FALSE
#>
#> $diagnosticos$independencia$durbin_watson$mensagem
#> [1] "weighted regressions are not supported"
#>
#>
#> $diagnosticos$independencia$breusch_godfrey
#> $diagnosticos$independencia$breusch_godfrey$disponivel
#> [1] TRUE
#>
#> $diagnosticos$independencia$breusch_godfrey$estatistica
#> [1] 3.66454
#>
#> $diagnosticos$independencia$breusch_godfrey$gl
#> [1] 2
#>
#> $diagnosticos$independencia$breusch_godfrey$p_valor
#> [1] 0.1600498
#>
#> $diagnosticos$independencia$breusch_godfrey$alternativa
#> NULL
#>
#>
#>
#> $diagnosticos$avisos
#> [1] "Breusch-Pagan indica variancia nao constante."
#> [2] "Goldfeld-Quandt indica variancia nao constante ao longo da concentracao."
#> [3] "Cochran indica uma variancia de nivel desproporcionalmente alta."
#> [4] "Grubbs indica um residuo extremo; investigue a causa antes de qualquer exclusao."
#> [5] "Ha evidencia de falta de ajuste linear; investigue a faixa ou a curvatura."
#> [6] "O termo quadratico melhora o ajuste; nao aprove a linearidade sem investigacao."
#> [7] "Ha observacoes influentes; investigue-as antes de excluir qualquer dado."
#>
#>
#> $adequacao
#> $criterios
#> criterio valor limite status
#> 1 p de falta de ajuste 0.0014054866 NA nao avaliado
#> 2 p do teste de Mandel 0.0007427578 NA nao avaliado
#> 3 CV maximo por nivel (%) 3.8062770425 10 atende
#> 4 erro relativo medio maximo por nivel (%) 5.6906673757 NA nao avaliado
#>
#> $retrocalculo_por_observacao
#> concentracao sinal concentracao_retrocalculada erro_relativo_percentual
#> 1 0.1 0.028 0.09615544 -3.84455568
#> 2 0.1 0.029 0.10006859 0.06859102
#> 3 0.1 0.029 0.10006859 0.06859102
#> 4 0.3 0.084 0.31529166 5.09721990
#> 5 0.3 0.083 0.31137851 3.79283767
#> 6 0.3 0.081 0.30355222 1.18407320
#> 7 0.5 0.135 0.51486214 2.97242832
#> 8 0.5 0.131 0.49920955 -0.15808905
#> 9 0.5 0.133 0.50703585 1.40716964
#> 10 0.7 0.180 0.69095374 -1.29232239
#> 11 0.7 0.181 0.69486689 -0.73330144
#> 12 0.7 0.183 0.70269318 0.38474048
#> 13 0.9 0.215 0.82791388 -8.00956913
#> 14 0.9 0.230 0.88661108 -1.48765795
#> 15 0.9 0.216 0.83182702 -7.57477505
#>
#> $retrocalculo_por_nivel
#> concentracao vies_percentual erro_absoluto_medio_percentual
#> 1 0.1 -1.2357912 1.3272459
#> 2 0.3 3.3580436 3.3580436
#> 3 0.5 1.4071696 1.5125623
#> 4 0.7 -0.5469611 0.8034548
#> 5 0.9 -5.6906674 5.6906674
#>
#> $conclusao
#> [1] "Atende aos criterios informados; a aprovacao final requer revisao tecnica."
#>
#> attr(,"class")
#> [1] "valcurva_adequacao"