The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

Eurachem A5.2: OLS, WLS e diagnosticos da curva analitica

Objetivo

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 e ajuste inicial

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 = 5

Variabilidade, ajuste e influencia

diag_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.

Comparacao entre OLS e WLS

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.538395

O 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.

painel_calibracao(wls)

Retrocálculo

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-05

O 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.

Criterios e rastreabilidade da decisao

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"

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.