View in NBViewer Open in binder Download notebook View source


5.2. Mínimos quadrados, maximização da verossimilhança e quantificação de incertezas em regressões lineares

using Distributions
using Plots
using Random
using LinearAlgebra: ⋅

Hipóteses probabilísticas

\[ y = \beta_0 + \beta_1 x \] \[ E(y|x) = \beta_0 + \beta_1 x \] \[ \epsilon \sim \mathcal{N}(0,\sigma^2). \] \[ \mathcal{P}(y|x) \sim \mathcal{N}(\beta_0 + \beta_1 x, \sigma^2). \]

Verossimilhança

\[ f_{\mu, \sigma^2}(s) = \frac{1}{\displaystyle \sqrt{2\pi \sigma^2}}e^{\displaystyle -\frac{(s-\mu)^2}{2\sigma^2}}. \] \[ f_\beta(y) = \frac{1}{\displaystyle \sqrt{2\pi \sigma^2}}e^{\displaystyle -\frac{(y - \beta_0 - \beta_1 x)^2}{2\sigma^2}}. \] \[ \mathcal{L}_y(\boldsymbol\beta) = f_{\boldsymbol\beta}(y) = \frac{1}{\displaystyle \sqrt{2\pi \sigma^2}}e^{\displaystyle -\frac{(y - \beta_0 - \beta_1 x)^2}{2\sigma^2}}. \]

Função de verossimilhança em um conjunto de observações

\[ f_N(\mathbf{y},\boldsymbol\beta) = \frac{1}{\displaystyle (2\pi \sigma^2)^{N/2}}e^{\displaystyle -\frac{1}{2\sigma^2}\sum_{i=1}^N(y_i - \beta_0 - \beta_1 x_i)^2}. \] \[ \mathcal{L}_N(\boldsymbol\beta) = \Pi_i \mathcal{L}_{y_i}(\boldsymbol\beta) = f_N(\mathbf{y},\boldsymbol\beta) = \frac{1}{\displaystyle (2\pi \sigma^2)^{N/2}}e^{\displaystyle -\frac{1}{2\sigma^2}\sum_{i=1}^N(y_i - \beta_0 - \beta_1 x_i)^2}. \]

Função de log-verossimilhança

\[ \mathcal{L}_y(\boldsymbol\beta) = \frac{1}{\displaystyle \sqrt{2\pi \sigma^2}}e^{\displaystyle -\frac{(y - \beta_0 - \beta_1 x)^2}{2\sigma^2}}. \] \[ \ell_y(\boldsymbol\beta) = \log(\mathcal{L}_y(\boldsymbol\beta) = \log\left(\frac{1}{\displaystyle \sqrt{2\pi \sigma^2}}\right) - \frac{(y - \beta_0 - \beta_1 x)^2}{2\sigma^2}. \] \[ \ell_N(\boldsymbol\beta) = \log \mathcal{L}_N(\boldsymbol\beta) = N\log\left(\frac{1}{\displaystyle \sqrt{2\pi \sigma^2}}\right) - \frac{1}{2\sigma^2}\sum_{i=1}^N (y_i - \beta_0 - \beta_1 x_i)^2. \]

Maximização da verossimilhança e minimização do erro quadrático

\[ \ell_N(\boldsymbol\beta) = N\log\left(\frac{1}{\displaystyle \sqrt{2\pi \sigma^2}}\right) - \frac{1}{2\sigma^2}\sum_{i=1}^N (y - \beta_0 - \beta_1 x)^2. \] \[ \operatorname{RSS}(\boldsymbol\beta) = \sum_{i=1}^N (y - \beta_0 - \beta_1 x)^2. \] \[ \hat{\boldsymbol\beta} = \operatorname{argmax}_{\boldsymbol\beta} \mathcal{L}_N(\boldsymbol\beta) = \operatorname{argmax}_{\boldsymbol\beta} \ell_N(\boldsymbol\beta) = \operatorname{argmin}_{\boldsymbol\beta} \operatorname{RSS}(\boldsymbol\beta). \]

Estimativa sobre a determinação nos parâmetros

\[ \hat{\boldsymbol\beta} = (X^TX)^{-1}X^T\mathbf{y}. \] \[ \hat{\boldsymbol\beta} = (X^TX)^{-1}X^T(X\boldsymbol\beta + \boldsymbol{\epsilon}) = \boldsymbol\beta + (X^TX)^{-1}X^T\boldsymbol{\epsilon}. \] \[ \boldsymbol\beta - \hat{\boldsymbol\beta} = - (X^TX)^{-1}X^T\boldsymbol{\epsilon}. \]

Variância na determinação dos parâmetros

\[ \operatorname{Var}(\boldsymbol\beta) = \operatorname{Var}\left((X^TX)^{-1}X^T\boldsymbol{\epsilon}\right). \]

Valor esperado e variância-covariância de variáveis aleatórias multidimensionais

\[ E(\boldsymbol\beta) = (E(\beta_1), \ldots, E(\beta_m)). \] \[ \operatorname{Var}(\boldsymbol\beta) = (\operatorname{Var}(\beta_1), \ldots, \operatorname{Var}(\beta_m)). \] \[\operatorname{Cov}(\beta_j, \beta_k) = E((\beta_j - E(\beta_j))(\beta_k - E(\beta_k))). \] \[ \operatorname{Cov}(\boldsymbol\beta) = \operatorname{Cov}.(\mathbf{\beta}, \mathbf{\beta}^T) = \left[ \begin{matrix} \operatorname{Var}(\beta_1) & \operatorname{Cov}(\beta_1, \beta_2) & \ldots & \operatorname{Cov}(\beta_1, \beta_m) \\ \operatorname{Cov}(\beta_2, \beta_1) & \operatorname{Var}(\beta_2)& \dots & \operatorname{Cov}(\beta_2, \beta_m) \\ \vdots & \vdots & \vdots & \vdots \\ \operatorname{Cov}(\beta_m, \beta_1) & \operatorname{Cov}(\beta_m, \beta_2) & \ldots & \operatorname{Var}(\beta_m) \end{matrix}\right]. \] \[ \operatorname{Cov}(\boldsymbol\beta) = E((\boldsymbol\beta - E(\boldsymbol\beta))(\boldsymbol\beta - E(\boldsymbol\beta))^T). \]

Variância-covariância na determinação dos parâmetros

\[ \operatorname{Cov}(\boldsymbol\beta) = \operatorname{Cov}(\boldsymbol\beta - \hat{\boldsymbol\beta}) = \operatorname{Cov}((X^TX)^{-1}X^T\boldsymbol{\epsilon}). \] \[ \operatorname{Cov}(\boldsymbol\beta) = (X^TX)^{-1}X^TE(\boldsymbol{\epsilon}\boldsymbol{\epsilon}^T)X(X^TX)^{-1} - (X^TX)^{-1}X^TE(\boldsymbol{\epsilon})E(\boldsymbol{\epsilon})^TX(X^TX)^{-1}. \] \[ \operatorname{Cov}(\boldsymbol\beta) = (X^TX)^{-1}X^TE(\boldsymbol{\epsilon}\boldsymbol{\epsilon}^T)X(X^TX)^{-1}. \] \[ E(\boldsymbol{\epsilon}\boldsymbol{\epsilon}^T) = \sigma^2 I, \]

onde \(I\) é a matriz identidade.

\[ \operatorname{Cov}(\boldsymbol\beta) = \sigma^2(X^TX)^{-1}. \] \[ \operatorname{Var}(\boldsymbol\beta) = \sigma^2\operatorname{diag}((X^TX)^{-1}). \]

Incerteza do modelo

\[ \operatorname{Var}(y) = \operatorname{Var}(\beta_0 + \beta_1 x). \] \[ \operatorname{Var}(y) = E\left( (\beta_0 + \beta_1 x - \hat\beta_0 - \hat\beta_1 x)^2\right) = E\left( (\beta_0 - \hat\beta_0)^2 + 2(\beta_0 - \hat\beta_0)(\beta_1 - \hat\beta_1)x + (\beta_1 - \hat\beta_1)^2x^2)\right) \\ = \operatorname{Var}(\beta_0) + 2\operatorname{Cov}(\beta_0,\beta_1)x + \operatorname{Var}(\beta_1)x^2. \] \[ \operatorname{Var}(y) = \mathbf{x} \cdot \operatorname{Cov}(\boldsymbol \beta) \mathbf{x} = \sigma^2 \mathbf{x} \cdot (X^TX)^{-1}\mathbf{x}. \]

Intervalo de confiança

\[ X = \left[ \begin{matrix} 1 \\ \vdots \\ 1 \end{matrix} \right] \] \[ \hat\beta_0 = \frac{1}{N}\sum_{i=1}^N \epsilon_i. \] \[ \operatorname{Var}(\beta) = \sigma^2 \operatorname{diag}((X^TX)^{-1}) = \frac{\sigma^2}{N}. \] \[ \operatorname{IC}_{68\%} = [\hat\beta_0 - \operatorname{Var}(\beta), \hat\beta_0 + \operatorname{Var}(\beta)], \qquad \operatorname{IC}_{95\%} = [\hat\beta_0 - 2\operatorname{Var}(\beta), \hat\beta_0 + 2\operatorname{Var}(\beta)]. \]

Desvio padrão corrigido da amostra

\[ s_q^2 = \frac{1}{N-m}\sum_{i=1}^N (y_i - \hat{\boldsymbol\beta}\mathbf{x}_i)^2 = \frac{1}{N-2}\sum_{i=1}^N (y_i - \hat\beta_0 - \hat\beta_1x_i)^2. \]

Exemplo sintético

b = 1.0
m = 0.2
σ = 1.0
N = 20
20
Random.seed!(1200)
x_org = [0.0, 10.0]
y_org = b .+ m * x_org
data_x = collect(range(0.0,10.0, length=N)) + rand(N)/N
data_y = b .+ m * data_x .+ rand(Normal(0,σ), N)
plot(x_org, y_org, label = "y = b + mx", title = "Dados perturbados aleatoriamente, em um exemplo sintético", titlefont = 10)
scatter!(data_x, data_y, markersize=3, label="amostra")

Determinando os parâmetros

X = [ones(N) data_x]
β = X \ data_y
2-element Vector{Float64}:
 1.1988117103655653
 0.1431233525841148

Visualizando o resultado

plot(x_org, y_org, label="original", legend=:topleft, title = "Ajuste aos dados", titlefont = 10)
scatter!(data_x, data_y, markersize=3, label="amostra")
plot!(x_org, β[1] .+ β[2] * x_org, label="modelo")

Intervalos de confiança dos parâmetros

Cov_β = σ^2 * inv(X' * X)
2×2 Matrix{Float64}:
  0.187317   -0.0273258
 -0.0273258   0.0054378
println("Valores originais: β₀=$b, β₁=$m")
println("CI 68% para β₀: [$(round(β[1] - Cov_β[1,1],digits=2)), $(round(β[1] + Cov_β[1,1],digits=2))]")
println("CI 68% para β₁: [$(round(β[2] - Cov_β[2,2],digits=2)), $(round(β[2] + Cov_β[2,2],digits=2))]")
println("CI 95% para β₀: [$(round(β[1] - 2Cov_β[1,1],digits=2)), $(round(β[1] + 2Cov_β[1,1],digits=2))]")
println("CI 95% para β₁: [$(round(β[2] - 2Cov_β[2,2],digits=2)), $(round(β[2] + 2Cov_β[2,2],digits=2))]")
Valores originais: β₀=1.0, β₁=0.2
CI 68% para β₀: [1.01, 1.39]
CI 68% para β₁: [0.14, 0.15]
CI 95% para β₀: [0.82, 1.57]
CI 95% para β₁: [0.13, 0.15]

Variância do modelo e intervalos de confiança

Var_y = [[1; x] ⋅ (Cov_β * [1; x]) for x in data_x]
20-element Vector{Float64}:
 0.18506906749986532
 0.1598972882552096
 0.13472605333885954
 0.1138367091305883
 0.09548818390233753
 0.08014032619999441
 0.0683046673239387
 0.059364145036716144
 0.053257487510014974
 0.05035707669772974
 0.05032645779142901
 0.053546214207226044
 0.059513423230789925
 0.06796962535835986
 0.08049659618144059
 0.09529307440702718
 0.11444701290418924
 0.13374704790809286
 0.15834618382131746
 0.18587335929487245
plot(x_org, y_org, label="original", size=(600,300), titlefont=10,
    title="Reta original, amostra, modelo, CI 68% (sombreado), CI 95% (barras de erro)", )
scatter!(data_x, data_y, markersize=3, label="amostra")
plot!(data_x,β[1] .+ β[2] * data_x, grid=false, yerror=2*sqrt.(Var_y),
    ribbon=sqrt.(Var_y), fillalpha=0.2, label="modelo", legend=:topleft)

Utilizando o desvio padrão corrigido da amostra

s_q = √(sum(abs2,  data_y .- β[1] .- β[2] * data_x)/(N-2))
println("Desvio padrão original: $σ")
println("Desvio padrão corrigido da amostra: $(round(s_q, digits=3))")
println("Desvio padrão não corrigido da amostra: $(round(s_q * √((N-2)/N),digits=3))")
Desvio padrão original: 1.0
Desvio padrão corrigido da amostra: 0.953
Desvio padrão não corrigido da amostra: 0.904
Cov_q = s_q^2 * inv(X' * X)
Var_q = [[1; x] ⋅ (Cov_q * [1; x]) for x in data_x]
20-element Vector{Float64}:
 0.16813890537256826
 0.14526984645498642
 0.12240128207042794
 0.10342290001783515
 0.0867529022231941
 0.07280907017850197
 0.06205614017962694
 0.05393349898874427
 0.04838547993890799
 0.045750399394674124
 0.045722581513173675
 0.04864779384947513
 0.054069121178268606
 0.06175174793241178
 0.07313274849766525
 0.08657564139072518
 0.10397737305768065
 0.12151183628833889
 0.14386063742207578
 0.16886962036367678
plot(x_org, y_org, label="original", size=(600,300), titlefont=10,
    title="Reta original, amostra, modelo, CI 68% (sombreado), CI 95% (barras de erro)\nusando o desvio padrão corrigido", )
scatter!(data_x, data_y, markersize=3, label="amostra")
plot!(data_x,β[1] .+ β[2] * data_x, grid=false, yerror=2*sqrt.(Var_q),
    ribbon=sqrt.(Var_q), fillalpha=0.2, label="modelo", legend=:topleft)

Exemplo salário e grau de instrução

Nível de instruçãoMédia de salário semanal (USD)Taxa de desemprego (%)
Doutorado18831,1
Profissional18611,6
Mestrado14972,0
Graduação12482,2
Associado*8872,7
Graduação incompleta8333.3
Ensino Médio7463,7
Ensino Fundamental5925,4
data_y = [592, 746, 833, 887, 1248, 1497, 1861, 1883]
plot(data_y, seriestype = :scatter, xlims=(0,9), ylims=(0,2000),
    xticks=0:9, xaxis = "nível de instrução", yaxis="salário (USD)", 
    title="Média salarial semanal em função do grau de instrução", 
    titlefont=12, legend=false)
N = 8
data_x = collect(1:N)
X = [ones(N) data_x]
β = X\data_y
s_q = √(sum(abs2,  data_y .- β[1] .- β[2] * data_x)/(N-2))
Cov_q = s_q^2 * inv(X' * X)
Var_q = [[1; x] ⋅ (Cov_q * [1; x]) for x in data_x]
8-element Vector{Float64}:
 6169.9875992063535
 4054.563279478461
 2644.280399659866
 1939.1389597505686
 1939.1389597505686
 2644.2803996598677
 4054.5632794784633
 6169.987599206355
fator = [quantile(TDist(N-2),q) for q = (0.84, 0.975)]
2-element Vector{Float64}:
 1.0839756791279644
 2.446911851144969
plot(data_y, seriestype = :scatter, xlims=(0,N+1), ylims=(0,2000), color=2,
    xticks=0:N+1, xaxis = "nível de instrução", yaxis="salário (USD)", 
    label="salário", title="Média salarial semanal em função do grau de instrução", 
    titlefont=12, legend=:topleft)
plot!(data_x,β[1] .+ β[2] * data_x, grid=false, yerror=fator[2]*sqrt.(Var_q),
    ribbon=fator[1]*sqrt.(Var_q), fillalpha=0.2, label="modelo", color=3, legend=:topleft)

Exercícios

  1. Faça as contas de que

\[ \operatorname{Cov}(\boldsymbol\beta) = \operatorname{Cov}(\boldsymbol\beta - \hat{\boldsymbol\beta}) = \operatorname{Cov}((X^TX)^{-1}X^T\boldsymbol{\epsilon}). \]
  1. Obtenha \(\operatorname{Var}(\boldsymbol\beta)\) explicitamente em termos de \(N\) e de \((x_i)_{i=1}^N\).

  2. No caso de apenas duas amostras, com \(x_2 - x_1 = d\) denotando a distância entre os dois pontos/momentos/condições de medição, escreva \(\operatorname{Var}(\boldsymbol\beta)\) explicitamente em função de \(d\) e \(x_1\), observe a influência da distância \(d\) na variância e encontre os limites dessa variância quanto \(d\searrow 0\) e \(d\nearrow \infty\).

  3. Refaça os exercícios do caderno "Modelos redutíveis ao caso linear nos parâmetros e aplicações", calculando e exibindo os intervalos de confiança em relação às variáveis usadas para linearizar os problemas.

Referências