View in NBViewer Open in binder Download notebook View source


6.3. Comparação de modelos

using Random
using Statistics
using LinearAlgebra
using Plots
theme(:ggplot2)

Critérios de informação

Critério de AIC

\[ \mathrm{AIC} = N\ln E + 2m, \]

onde \(m\) é o número de parâmetros do modelo e \(E\) é o erro quadrático médio do mesmo:

\[ E = \frac{1}{N}\sum_{j=1}^N (\hat y_j - y_j)^2 = \mathrm{RMS}(r_j)^2 = \frac{\mathrm{SS}(r_i)}{N}, \] \[ \mathrm{AIC} = N\ln\left(\frac{\mathrm{SS}(r_i)}{N}\right) + 2m. \]

Dependência na quantidade de dados e de parâmetros

\[ \frac{N}{M} \gtrsim 40, \]

onde \(M=\max_j\{m_j\}\) é o número de parâmetros do modelo com mais parâmetros dentre os modelos considerados.

AIC corrigido

\[ \mathrm{AICc} = N\ln\left(\frac{\mathrm{SS}(r_i)}{N}\right) + \frac{2m(m+1)}{N-m-1}. \]

BIC (Bayesian Information Criteria)

\[ \mathrm{BIC} = N\ln(E) + m\ln(N). \]

Informação e entropia

\[ I(x) = - \ln \rho(x), \qquad H(\rho) = - \sum_{x\in \mathcal{X}} \rho(x)\ln \rho(x). \] \[ I(x) = - \ln f(x), \qquad H(\rho) = - \int_\mathcal{X} f(x) \ln f(x) \;dx. \]

Interpretação da informação

probvalues = range(0.0001, 1.0, length=200)
plot(probvalues, ρ -> -log(ρ), xlabel="probabilidade de um evento", ylabel="informação",
    label="ρ ↦ -ln ρ",
    title="Informação como função da probabilidade de um evento", titlefont=10)

Informação no caso de componentes independentes

\[ I_\rho(x) = I_\rho(x_1, x_2) = -\ln (\rho_1(x_1)\rho_2(x_2)) = - \ln\rho_1(x_1) - \ln\rho_2(x_2) = I_{\rho_1}(x_1) + I_{\rho_2}(x_2). \]

Informação no caso contínuo

Interpretação da entropia

\[ H(\rho) = \int_\mathcal{X} I(x) f(x) dx = \mathbb{E}(I), \qquad H(\rho) = \sum_{x\in \mathcal{X}} I(x)\rho(x) = \mathbb{E}(I). \] \[ - 0 \ln 0 = \lim_{\rho \rightarrow 0^+} -\rho \ln(\rho) = 0. \]

Distribuições de Bernoulli

\[ H(\rho_p) = - p\ln p - (1-p)\ln(1-p). \] \[ H(\rho_1) = H(\rho_0) = -1\ln 1 - 0\ln 0 = 0 + 0 = 0. \] \[ H(\rho_{1/2}) = - 2 \frac{1}{2}\ln\left(\frac{1}{2}\right) = \ln 2. \]

Divergência de Kullback-Leibler

\[ D_{KL}(\rho \| \mu) = \sum_{x\in \mathcal{X}} \mu(x)\ln\left(\frac{\mu(x)}{\rho(x)}\right). \] \[ D_{KL}(\rho \| \mu) = \int_{\mathcal{X}} g(x) \ln\left(\frac{g(x)}{f(x)}\right)\;dx. \]

Comparando modelos através da divergência de Kullback-Leibler

\[ D_{KL}(\rho \| \mu) = \int_{\mathcal{X}} g(x) \ln\left(\frac{g(x)}{f(x)}\right)\;dx = \int_{\mathcal{X}} g(x) \ln g(x) \;dx - \int_{\mathcal{X}} g(x) \ln f(x) \;dx. \] \[ D_{KL}(\rho_1 \| \mu) = \int_{\mathcal{X}} g(x) \ln g(x) \;dx - \int_{\mathcal{X}} g(x) \ln f_1(x) \;dx. \] \[ D_{KL}(\rho_2 \| \mu) = \int_{\mathcal{X}} g(x) \ln g(x) \;dx - \int_{\mathcal{X}} g(x) \ln f_2(x) \;dx. \] \[ - \int_{\mathcal{X}} g(x) \ln f_1(x) \;dx \qquad \text{e} \qquad - \int_{\mathcal{X}} g(x) \ln f_2(x) \;dx \]

Conexão com o critério de Akaike

\[ N\ln\left(\frac{\mathrm{SS}(r_i)}{N}\right) + 2m, \]

onde \(N\) é o número de dados e \(m\) é o número de parâmetros do modelo.

Exemplo sintético

Neste exemplo sintético, vamos

Função para cálculo das medidas de qualidade do modelo

function info_ajuste2(dados_x, dados_y, model_y, m)
    N = length(dados_x)
    y_mean = mean(dados_y)
    residuos = model_y - dados_y
    ss = norm(residuos)^2
    rms = sqrt(ss/N)
    ss_y = norm(dados_y)^ 2
    rms_y = sqrt(ss_y/N)

    ss_rel = ss/ss_y
    rms_rel = sqrt(ss_rel)
    ss_tot = N*var(dados_y)
    ss_reg = norm(model_y .- y_mean)^2
    r_sq = ss_reg/ss_tot
    r_sq_aj = 1 - (1 - r_sq)*(N-1)/(N-m)
    
    aic = N*log(ss/N) + 2*m
    aicc = N*log(ss/N) + (2*m*(m+1))/(N-m-1)
    bic =  N*log(ss/N) + 2*log(N)*m
    
    return (
        residuos=residuos, rms=rms, rms_rel=rms_rel, ss=ss, ss_rel=ss_rel,
        r_sq=r_sq, r_sq_aj=r_sq_aj, aic=aic, aicc=aicc, bic=bic
    )
end
info_ajuste2 (generic function with 1 method)

Definição do modelos e dos dados

f_modelo(x, β) = β ⋅ [x^j for j in 0:length(β)-1]
f_dados(x,β) = exp(β[4]*x) * (β[1] + β[2]*x + β[3]*x^2 + β[4]*x^3)
β̲ = [5.2, 0.5, -0.45, 0.05]
x = -1.0:0.1:8.0
nothing
dados_x = collect(0.0:0.4:7.6) .+ 0.1 * randn(MersenneTwister(15001), 20)
dados_y = f_dados.(dados_x, Ref(β̲)) .+ 0.5 * randn(MersenneTwister(15021), 20)
nothing
plot(xlim=(-1,8), ylim=(1,9), legend=:topleft,
    titlefont=10, title="função para a amostra e dados sintéticos")
plot!(dados_x, dados_y, seriestype=:scatter, label="amostra")
plot!(x, x->f_dados(x,β̲), label="função para a amostra")

Modelos polinomiais

max_grau = 12
β̂ = []
info = []
for grau in 0:max_grau
    A = reduce(hcat, [dados_x.^j for j=0:grau])
    push!(β̂, A \ dados_y)
    push!(info, info_ajuste2(
            dados_x, dados_y, 
            f_modelo.(dados_x, Ref(β̂[grau+1])), length(β̂[grau+1])
            )
        )
end
plot(xlim=(-1,8), ylim=(1,14), legend=:topleft,
    titlefont=10, title="modelos ajustados e dados sintéticos")
plot!(dados_x, dados_y, seriestype=:scatter, label="amostra")
for grau in 0:4
    plot!(x, x -> f_modelo(x, β̂[grau+1]),
        label="modelo grau $grau (RMS = $(round(info[grau+1].rms_rel,digits=3)), " *
            "R² = $(round(info[grau+1].r_sq,digits=3)), " *
            "R²_aj = $(round(info[grau+1].r_sq_aj,digits=3)))",
        linestyle=:dash)
end
plot!()
plot(xlim=(-1,8), ylim=(1,14), legend=:topleft,
    titlefont=10, title="modelos ajustados e dados sintéticos")
plot!(dados_x, dados_y, seriestype=:scatter, label="amostra")
for grau in 5:8
    plot!(x,x->f_modelo(x,β̂[grau+1]),
        label="modelo grau $grau (RMS = $(round(info[grau+1].rms_rel,digits=3)), " *
            "R² = $(round(info[grau+1].r_sq,digits=3)), " *
            "R²_aj = $(round(info[grau+1].r_sq_aj,digits=3)))",
        linestyle=:dash)
end
plot!()
plot(xlim=(-1,8), ylim=(1,14), legend=:topright,
    titlefont=10, title="modelos ajustados e dados sintéticos")
plot!(dados_x, dados_y, seriestype=:scatter, label="amostra")
for grau in 9:max_grau
    plot!(x,x->f_modelo(x,β̂[grau+1]),
        label="modelo grau $grau (RMS = $(round(info[grau+1].rms_rel,digits=3)), " *
            "R² = $(round(info[grau+1].r_sq,digits=3)), " *
            "R²_aj = $(round(info[grau+1].r_sq_aj,digits=3)))",
        linestyle=:dash)
end
plot!()

Visualização dos fatores de qualidade de ajuste em funcão do grau do modelo

plot(title="R^2 e R^2 ajustado", titlefont=10, ylims=(0,1.1), legend=:bottomright,
    xlabel="grau", xticks=0:max_grau)
hline!([1.0], label="limite 1")
plot!(0:max_grau, [info[j+1].r_sq for j in 0:max_grau], label="R^2")
plot!(0:max_grau, [info[j+1].r_sq_aj for j in 0:max_grau], label="R^2 ajustado")
plot(title="RMS e SS", titlefont=10, xlabel="grau", xticks=0:max_grau)
plot!(0:max_grau, [info[j+1].rms for j in 0:max_grau], label="RMS")
plot!(0:max_grau, [info[j+1].ss for j in 0:max_grau], label="SS")
plot(title="RMS relativo e SS relativo", titlefont=10, xlabel="grau", xticks=0:max_grau)
plot!(0:max_grau, [info[j+1].rms_rel for j in 0:max_grau], label="RMS_rel")
plot!(0:max_grau, [info[j+1].ss_rel for j in 0:max_grau], label="SS_rel")
plot(title="AIC, AICc, BIC", titlefont=10, xlabel="grau", xticks=0:max_grau)
plot!(0:max_grau, [info[j+1].aic for j in 0:max_grau], label="AIC")
plot!(0:max_grau, [info[j+1].aicc for j in 0:max_grau], label="AICc")
plot!(0:max_grau, [info[j+1].bic for j in 0:max_grau], label="BIC")

Referências

  1. K. B. Burnham, D. R. Anderson, Model Selection and Multimodel Inference: A Practical Information-Theoretic Approach, 2nd edition, Springer, 2002.

  2. S. L. Brunton, J. N. Kutz, Data-Driven Science and Engineering: Machine Learning, Dynamical Systems, and Control, Cambridge University Press, 2019.

  3. G. Schwarz, Estimating the dimension of a model, The Annals of Statistics, 6(2) (1978), 461-464.

  4. T. J. Sullivan, Introduction to Uncertainty Quantification, Texts in Applied Mathematics, vol. 63, Springer International Publishing, 1995.

Exercícios

  1. Mostre, no caso de uma distribuição de Bernouille como descrita acima, a entropia é máxima em \(p=1/2\), ou seja, mostre que o máximo de \( H(\rho_p) = - p\ln p - (1-p)\ln(1-p)\) em \(0\leq p \leq 1\) ocorre em \(p=1/2\).

  2. Considere o problema de modelagem de reação enzimática em fígados de porcos, discutido no caderno 8, sobre Modelos redutíveis ao caso linear nos parâmetros e aplicações. Calcule os fatores de qualidade de ajuste (RMS, SS, RMS relativo, SS relativo, R quadrado, R quadrado ajustado, AIC, AICc, BIC) do modelo do tipo Michaelis-Mentem. Calcule também esses fatores para modelos polinomiais de diferentes ordens.