Este curso trata de algumas extensões do modelo de regressão linear: splines e regressão suavizada, modelos aditivos generalizados (GAM), modelos não lineares, modelos heterocedásticos, modelos de efeitos aleatórios e regressão para dados no intervalo unitário, dentre outras. Todas essas extensões partem do modelo de regressão linear clássico e relaxam alguma(s) de suas suposições. Por exemplo:
a relação entre resposta e covariáveis é linear nos parâmetros\(\rightarrow\) splines, GAM e modelos não lineares relaxam isso;
a variância dos erros é constante\(\rightarrow\) modelos heterocedásticos relaxam isso;
as observações são independentes\(\rightarrow\) modelos de efeitos aleatórios relaxam isso;
a resposta tem suporte na reta real\(\rightarrow\) regressão para dados no intervalo unitário relaxa isso.
Por isso, antes de avançar, vale revisar tópicos de regressão linear simples e múltipla: especificação, estimação, propriedades dos resíduos e critérios de escolha de modelo. Essa revisão fixa a notação e o vocabulário que serão reaproveitados (e estendidos) em todos os tópicos seguintes.
2 Regressão linear simples
2.1 Especificação do modelo
Para \(i = 1, \dots, n\) observações de uma resposta \(y_i\) e uma covariável \(x_i\), o modelo de regressão linear simples é
\[
y_i = \beta_0 + \beta_1 x_i + e_i \; ,
\]
com as suposições usuais sobre o erro \(e_i\):
\(E[e_i] = 0\) para todo \(i\) (média zero: o modelo está corretamente especificado em média);
\(\text{Var}(e_i) = \sigma^2\) para todo \(i\) (homocedasticidade: variância constante);
\(\text{Cov}(e_i, e_j) = 0\) para \(i \neq j\) (não correlações);
Distribuição dos erros: \(e_i \sim N(0, \sigma^2)\).
Note que \(\beta_0\) e \(\beta_1\) são parâmetros fixos e desconhecidos. A suposição de linearidade está em \(\beta_0 + \beta_1 x_i\), ou seja, o modelo é linear nos parâmetros (\(\beta\)’s), não necessariamente em \(x\). Poderíamos ter \(x_i^2\) ou \(\log(x_i)\) como covariável e o modelo continuaria sendo linear.
2.2 Interpretação dos coeficientes
\(\beta_0\): valor esperado de \(y\) quando \(x = 0\). Só tem interpretação prática direta se \(x=0\) estiver dentro (ou próximo) do domínio observado de \(x\).
\(\beta_1\): variação esperada em \(y\) para um aumento de uma unidade em \(x\), mantendo tudo o mais constante, ou seja, a inclinação da reta.
2.3 Estimação por mínimos quadrados
Os estimadores \(\hat\beta_0, \hat\beta_1\) minimizam a soma de quadrados dos resíduos
com \(n-2\) graus de liberdade que correspondem aos dois parâmetros (\(\beta_0\) e \(\beta_1\)) da equação de regressão que foram estimados.
2.4 Exemplo numérico
Vamos usar o conjunto de dados trees, disponível na R, com medidas de 31 cerejeiras: Girth (diâmetro do tronco, em polegadas), Height (altura, em pés) e Volume (volume de madeira, em pés cúbicos). Começamos com a regressão simples de Volume sobre Girth.
Os valores coincidem, como esperado.
Interpretação de \(\hat\beta_1\): para cada polegada adicional de diâmetro do tronco, o volume esperado de madeira aumenta em aproximadamente 5.07 pés cúbicos.
plot(Volume ~ Girth, data = trees, pch =19, col ="steelblue",xlab ="Diâmetro do tronco", ylab ="Volume")abline(rls, col ="firebrick", lwd =2)
Figura 1: Volume em função do diâmetro (Girth), com reta ajustada por mínimos quadrados.
2.5 Análise de variância
Da minimização de \(SQ(\beta_0,\beta_1)\) decorrem as equações normais
que valem exatamente pela forma como \(\hat\beta_0\) e \(\hat\beta_1\) foram construídos. Usando essas duas igualdades é possível mostrar que a variabilidade total de \(y\) em torno de sua média se decompõe em uma parte explicada pelo modelo e uma parte residual:
Essa é a identidade fundamental da análise de variância (ANOVA) da regressão:
\(SQTotal\) mede o quanto \(y\) varia em torno de \(\bar y\) se nenhuma covariável fosse usada;
\(SQReg\) mede quanto dessa variação é “capturada” pela reta ajustada;
\(SQRes\) é o que sobra, não explicado pelo modelo.
Esse último é o mesmo \(SQRes\) que aparece em \(\hat\sigma^2 = SQRes/(n-2)\).
Os graus de liberdade seguem a mesma lógica de contagem de parâmetros:
\(SQTotal\) tem \(n-1\) graus de liberdade (perde-se 1 ao estimar \(\bar y\));
\(SQReg\) tem 1 grau de liberdade (a inclinação \(\beta_1\), além do intercepto);
\(SQRes\) tem \(n-2\) (os dois parâmetros \(\beta_0,\beta_1\) já foram estimados).
Organiza-se isso na tabela de análise de variância:
Fonte
SQ
gl
QM
F
Regressão
\(SQReg\)
\(1\)
\(QMReg = SQReg/1\)
\(QMReg/QMRes\)
Resíduo
\(SQRes\)
\(n-2\)
\(QMRes = SQRes/(n-2)\)
Total
\(SQTotal\)
\(n-1\)
Sob \(H_0: \beta_1 = 0\), \(F = QMReg/QMRes \sim F_{1,\,n-2}\). Na regressão simples, essa estatística \(F\) é equivalente ao quadrado da estatística \(t\) usada para testar \(\beta_1\) (Seção sobre testes de coeficientes, adiante): \(F = t^2\), ou seja, os dois testes respondem exatamente à mesma pergunta.
A notação escalar fica pouco prática assim que temos mais de uma covariável. A notação matricial generaliza a regressão simples e múltipla com a mesma formulação além de ser base base para algumas extensões vistas no curso (splines, por exemplo, nada mais são representados por regressões lineares em uma base de funções transformada de \(x\) e portanto escritas na mesma notação matricial).
\(\mathbf{y}\) é o vetor \(n \times 1\) de respostas;
\(\mathbf{X}\) é a matriz \(n \times p\) de covariáveis (o modelo, ou design matrix), com uma coluna de 1’s para o intercepto;
\(\boldsymbol\beta\) é o vetor \(p \times 1\) de parâmetros;
\(\mathbf{e}\) é o vetor \(n \times 1\) de erros, com \(E[\mathbf{e}] = \mathbf{0}\) e \(\text{Var}(\mathbf{e}) = \sigma^2
\mathbf{I}_n\) sob as suposições de homocedasticidade e independência.
Para a regressão simples, \(\mathbf{X}\) tem \(p=2\) colunas: uma de 1’s e uma com os valores de \(x_i\).
y <- trees$Volumebeta_hat <-solve(crossprod(X), crossprod(X, y))drop(beta_hat)
(Intercept) Girth
-36.943459 5.065856
que reproduz o mesmo resultado de lm() acima.
Note que a fórmula escalar \(\hat\beta_1 = S_{xy}/S_{xx}\) é apenas o caso particular de \((\mathbf{X}'\mathbf{X})^{-1}\mathbf{X}'\mathbf{y}\) quando \(\mathbf{X}\) tem duas colunas.
(Gauss-Markov) \(\hat{\boldsymbol\beta}\) é o melhor estimador linear não viesado (BLUE) de \(\boldsymbol\beta\), entre todos os estimadores lineares em \(\mathbf{y}\);
sob normalidade dos erros, para inferência exata em amostras pequenas, \(\hat{\boldsymbol\beta} \sim N(\boldsymbol\beta, \sigma^2(\mathbf{X}'\mathbf{X})^{-1})\), o que fundamenta os testes \(t\) e \(F\) usuais.
com \(p\) o número de colunas de \(\mathbf{X}\) (parâmetros estimados, incluindo o intercepto) e \(SQRes\) a mesma soma de quadrados residual definida na análise de variância da seção anterior. A forma matricial apenas generaliza os graus de liberdade de \(n-2\) para \(n-p\).
4 Resíduos
4.1 Resíduos vs. erros
O erro \(e_i\) é uma quantidade teórica, não observável. O resíduo\(\hat e_i = y_i - \hat y_i\) é sua contrapartida observável, calculada a partir do modelo ajustado. Em notação matricial,
em que \(\mathbf{H} = \mathbf{X}(\mathbf{X}'\mathbf{X})^{-1}\mathbf{X}'\) é a matriz de projeção (hat matrix), que projeta \(\mathbf{y}\) no espaço gerado pelas colunas de \(\mathbf{X}\).
4.2 Propriedades dos resíduos
Quando o modelo inclui intercepto:
\(\sum_i \hat e_i = 0\) : soma dos resíduos é zero;
\(\mathbf{X}'\hat{\mathbf{e}} = \mathbf{0}\) : os resíduos são ortogonais a todas as colunas de \(\mathbf{X}\), não apenas à coluna de 1’s;
os elementos da diagonal de \(\mathbf{H}\), \(h_{ii}\), medem a alavancagem (leverage) de cada observação que quantifica o quanto \(y_i\) influencia seu próprio valor ajustado \(\hat y_i\).
Os resíduos brutos têm variâncias diferentes entre si mesmo sob homocedasticidade dos erros, \(\text{Var}(\hat e_i) = \sigma^2(1-h_{ii})\), por isso é comum trabalhar com resíduos padronizados (dividindo por \(\hat\sigma\sqrt{1-h_{ii}}\)) ao inspecionar diagnósticos.
4.3 Diagnósticos gráficos
par(mfrow =c(2,2), mar =c(3,3,1.5,0.5), mgp =c(2,1,0))plot(rls)
Figura 2: Gráficos de diagnóstico padrão do R para o modelo simples.
par(mfrow =c(1, 1))
Os quatro painéis padrão do R mostram, respectivamente:
resíduos vs. ajustados: útil para detectar não linearidade e heterocedasticidade,
QQ-plot dos resíduos padronizados: para avaliar normalidade,
scale-location: raiz dos resíduos padronizados vs. ajustados, outra forma de checar variância constante
resíduos vs. alavancagem: que permite identificar observações influentes via distância de Cook, se houver.
5 Regressão múltipla
A regressão múltipla nada mais é que a mesma formulação matricial \(\mathbf{y} = \mathbf{X}\boldsymbol\beta + \mathbf{e}\) com mais colunas em \(\mathbf{X}\). Toda a álgebra de estimação ( \(\hat{\boldsymbol\beta} = (\mathbf{X}'\mathbf{X})^{-1}\mathbf{X}'\mathbf{y}\)) e as propriedades da seção anterior permanecem idênticas.
Fazendo o cálculo passo a passo temos que, uma vez especificada a matriz \(X\), as demais expressões e/ou códigos não se alteram.
X <-model.matrix(~ Girth + Height, data = trees)y <- trees$Volumedrop(solve(crossprod(X), crossprod(X, y)))
Usando a função lm() do R chega-se no mesmo resultado.
rlm <-lm(Volume ~ Girth + Height, data = trees)summary(rlm)
Call:
lm(formula = Volume ~ Girth + Height, data = trees)
Residuals:
Min 1Q Median 3Q Max
-6.4065 -2.6493 -0.2876 2.2003 8.4847
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -57.9877 8.6382 -6.713 2.75e-07 ***
Girth 4.7082 0.2643 17.816 < 2e-16 ***
Height 0.3393 0.1302 2.607 0.0145 *
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 3.882 on 28 degrees of freedom
Multiple R-squared: 0.948, Adjusted R-squared: 0.9442
F-statistic: 255 on 2 and 28 DF, p-value: < 2.2e-16
5.1 Interpretação dos coeficientes
Na regressão múltipla, cada coeficiente \(\beta_j\) é interpretado como o efeito parcial de \(x_j\) sobre \(y\), mantendo as demais covariáveis constantes (ceteris paribus). Isto é diferente da regressão simples, em que \(\beta_1\) mistura o efeito de \(x\) com o de qualquer variável omitida correlacionada a ele. Para o modelo acima: mantendo Height fixo, cada polegada adicional de Girth aumenta o volume esperado em 4.71 pés cúbicos; mantendo Girth fixo, cada pé adicional de altura aumenta o volume esperado em 0.34 pés cúbicos.
Um cuidado importante: quando as covariáveis são correlacionadas entre si (multicolinearidade), os coeficientes individuais ficam menos precisos (variâncias maiores) e mais difíceis de interpretar isoladamente, mesmo que o modelo como um todo faça boas previsões. O fator de inflação de variância (VIF) é a ferramenta usual para diagnosticar isso.
5.2 Análise de variância da regressão múltipla
A mesma decomposição \(SQTotal = SQReg + SQRes\) vale para a regressão múltipla, apenas generalizando os graus de liberdade: com \(p\) colunas em \(\mathbf{X}\) (incluindo o intercepto), \(SQReg\) tem \(p-1\) graus de liberdade (um para cada coeficiente de inclinação) e \(SQRes\) tem \(n-p\).
Fonte
SQ
gl
QM
F
Regressão
\(SQReg\)
\(p-1\)
\(QMReg = SQReg/(p-1)\)
\(QMReg/QMRes\)
Resíduo
\(SQRes\)
\(n-p\)
\(QMRes = SQRes/(n-p)\)
Total
\(SQTotal\)
\(n-1\)
Sob \(H_0: \beta_1 = \dots = \beta_{p-1} = 0\) (todos os coeficientes de inclinação são nulos — o teste F global, retomado na próxima seção), \(F = QMReg/QMRes \sim F_{p-1,\,n-p}\).
Chamar anova() em um único modelo múltiplo, em vez de comparar dois modelos, tem uma leitura diferente da que vimos para modelos aninhados: o R decompõe \(SQReg\)sequencialmente, termo a termo, na ordem em que aparecem na fórmula:
anova(rlm)
Analysis of Variance Table
Response: Volume
Df Sum Sq Mean Sq F value Pr(>F)
Girth 1 7581.8 7581.8 503.1503 < 2e-16 ***
Height 1 102.4 102.4 6.7943 0.01449 *
Residuals 28 421.9 15.1
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
A linha Girth mostra a soma de quadrados explicada por Girth sozinho (coincide com o \(SQReg\) do modelo simples), e a linha Height mostra a soma de quadrados adicional explicada por Height, dado que Girth já está no modelo. Quando as covariáveis são correlacionadas como no caso de Girth e Height, essa soma de quadrados sequencial depende da ordem em que os termos entram na fórmula, o mesmo fenômeno de multicolinearidade mencionado anteriormente.
6 Inferência
6.1 Testes sobre coeficientes individuais
Sob normalidade dos erros, para testar \(H_0: \beta_j = 0\) usa-se a estatística
em que \(\text{ep}(\hat\beta_j)\) é a raiz do elemento \(j\) da diagonal de \(\hat\sigma^2(\mathbf{X}'\mathbf{X})^{-1}\). Essa é a coluna Pr(>|t|) na saída de summary().
6.2 Teste F global e \(R^2\)
O teste \(F\) global é exatamente a linha “Regressão” da tabela de análise de variância vista nas seções anteriores: compara o modelo ajustado a um modelo apenas com intercepto (nenhuma covariável explica \(y\)), testando \(H_0: \beta_1 = \dots = \beta_{p-1} = 0\). A partir das mesmas somas de quadrados \(SQReg\), \(SQRes\) e \(SQTotal\) já definidas, o coeficiente de determinação é
mede a proporção da variância de \(y\) explicada pelo modelo. Como \(R^2\) sempre aumenta (ou permanece igual) ao adicionar covariáveis, mesmo que irrelevantes, usa-se o \(R^2\) ajustado, que penaliza pelo número de parâmetros, o que permite comparar modelos com números diferentes de covariáveis:
Os testes \(t\) individuais e o teste \(F\) global são casos particulares de uma pergunta mais geral: será que uma combinação linear dos parâmetros é igual a um valor de interesse? Por exemplo, no modelo múltiplo, faria sentido perguntar se o efeito de Girth é igual ao efeito de Height (\(H_0: \beta_{Girth} - \beta_{Height} = 0\)), ou se a soma de dois efeitos atinge um valor específico.
Uma combinação linear. Seja \(\mathbf{c}\) um vetor \(p \times 1\) de constantes conhecidas. Para testar \(H_0: \mathbf{c}'\boldsymbol\beta = m\), usa-se
\[
t = \frac{\mathbf{c}'\hat{\boldsymbol\beta} - m}
{\sqrt{\hat\sigma^2\, \mathbf{c}'(\mathbf{X}'\mathbf{X})^{-1}\mathbf{c}}}
\sim t_{n-p} \text{ sob } H_0 \; ,
\]
que decorre diretamente de \(\text{Var}(\mathbf{c}'\hat{\boldsymbol\beta}) = \sigma^2\,
\mathbf{c}'(\mathbf{X}'\mathbf{X})^{-1}\mathbf{c}\). O teste \(t\) de um coeficiente individual é o caso particular em que \(\mathbf{c}\) é um vetor com 1 na posição de \(\beta_j\) e 0 nas demais.
Várias combinações simultaneamente. De forma mais geral, para testar \(q\) combinações lineares ao mesmo tempo, \(H_0: \mathbf{C}\boldsymbol\beta =
\mathbf{m}\), com \(\mathbf{C}\) uma matriz \(q \times p\) de posto completo, usa-se
\[
F = \frac{(\mathbf{C}\hat{\boldsymbol\beta}-\mathbf{m})'
\left[\mathbf{C}(\mathbf{X}'\mathbf{X})^{-1}\mathbf{C}'\right]^{-1}
(\mathbf{C}\hat{\boldsymbol\beta}-\mathbf{m}) / q}{\hat\sigma^2}
\sim F_{q,\,n-p} \text{ sob } H_0 \; ,
\]
que se reduz à estatística \(t^2\) acima quando \(q=1\), e ao teste F global já visto quando \(\mathbf{C}\boldsymbol\beta\) é o vetor de todos os coeficientes de inclinação. Esse teste também é equivalente a comparar, via anova(), o modelo completo a um modelo reduzido em que a restrição \(\mathbf{C}\boldsymbol\beta=\mathbf{m}\) já está imposta, o que segue a mesma lógica de modelos aninhados vista na Seção de Escolha de Modelos. Pacotes como car (função linearHypothesis()) automatizam esse cálculo para hipóteses gerais; aqui fazemos o cálculo manualmente para explicitar de onde vêm os números.
Exemplo. Testar, no modelo múltiplo Volume ~ Girth + Height, se o efeito de Girth é igual ao de Height (\(\mathbf{c} = (0, 1, -1)'\), \(m=0\)):
estimativa t p_valor
4.368909e+00 1.248282e+01 5.841082e-13
Conferindo pela via do modelo restrito (se \(\beta_{Girth}=\beta_{Height}=b\), o modelo se reduz a Volume ~ I(Girth + Height)), e usando de novo a relação \(F = t^2\):
modelo_restrito <-lm(Volume ~I(Girth + Height), data = trees)anova(modelo_restrito, rlm)
Analysis of Variance Table
Model 1: Volume ~ I(Girth + Height)
Model 2: Volume ~ Girth + Height
Res.Df RSS Df Sum of Sq F Pr(>F)
1 29 2769.92
2 28 421.92 1 2348 155.82 5.841e-13 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
c(t2 = t_stat^2)
t2
155.8207
O valor de \(F\) da tabela anova() deve coincidir com t2 acima, já que a restrição testada envolve uma única combinação linear (\(q=1\)).
7 Escolha de modelos
7.1 Comparação de modelos aninhados
Quando um modelo é um caso particular de outro (aninhado), o teste \(F\) parcial via anova() compara diretamente as somas de quadrados residuais. Vamos então considerar a comparação três modelos incrementais. Além dos dois (rls e rlm) já vistos vamos incluir com referência inicial o modelo sem covariáveis, ou seja, ajustar simplesmente e média que pode ser definido por
rl0 <-lm(Volume ~1, data = trees) # modelo "nulo"
A análise a seguir mede a contribuição incremental de cada termo adicionado ao modelo.
anova(rl0, rls, rlm)
Analysis of Variance Table
Model 1: Volume ~ 1
Model 2: Volume ~ Girth
Model 3: Volume ~ Girth + Height
Res.Df RSS Df Sum of Sq F Pr(>F)
1 30 8106.1
2 29 524.3 1 7581.8 503.1503 < 2e-16 ***
3 28 421.9 1 102.4 6.7943 0.01449 *
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
7.2 Critérios de informação
Para comparar modelos não necessariamente aninhados, usam-se critérios que penalizam a complexidade do modelo, como AIC e BIC (quanto menor, melhor):
knitr::kable(data.frame(modelo =c("Volume ~ Girth", "Volume ~ Girth + Height"),AIC =c(AIC(rls), AIC(rlm)),BIC =c(BIC(rls), BIC(rlm)) ),digits =2,caption ="Comparação dos modelos por critérios de informação.")
Comparação dos modelos por critérios de informação.
modelo
AIC
BIC
Volume ~ Girth
181.64
185.95
Volume ~ Girth + Height
176.91
182.65
7.3 Cuidados com seleção automática de variáveis
Procedimentos automáticos (stepwise, step()) podem ser úteis para explorar um grande número de covariáveis candidatas, mas têm limitações importantes:
inflacionam as taxas de erro tipo I dos testes subsequentes, já que os mesmos dados são usados para selecionar e testar o modelo;
o “melhor” modelo pode não ser único nem estável a pequenas perturbações nos dados;
não substituem o conhecimento do problema. Covariáveis teoricamente relevantes podem justificar-se mesmo sem significância estatística marginal, e vice-versa.
7.4 Métodos de regularização
Uma alternativa a escolher variáveis “dentro ou fora” do modelo é penalizar a magnitude dos coeficientes durante a própria estimação, em vez de minimizar apenas \(SQRes(\boldsymbol\beta)\). Isso é especialmente útil quando há muitas covariáveis candidatas, correlacionadas entre si (multicolinearidade), ou quando \(p\) é grande em relação a \(n\). Essas são situações em que \((\mathbf{X}'\mathbf{X})^{-1}\) existe mas é numericamente instável, e os estimadores de mínimos quadrados, embora não viesados, passam a ter variância muito alta.
Os métodos de regularização mais utilizados são:
Ridge (penalização \(L_2\)): minimiza \(SQRes(\boldsymbol\beta) + \lambda \sum_j \beta_j^2\) (tipicamente sem penalizar o intercepto, com covariáveis padronizadas). Tem solução fechada, \(\hat{\boldsymbol\beta}_{ridge} = (\mathbf{X}'\mathbf{X} +
\lambda\mathbf{I})^{-1}\mathbf{X}'\mathbf{y}\) — a mesma forma matricial de sempre, com \(\lambda\mathbf{I}\) somado antes de inverter, o que estabiliza a inversão mesmo sob colinearidade. Encolhe coeficientes correlacionados na mesma direção, mas nunca os zera exatamente.
Lasso (penalização \(L_1\)): minimiza \(SQRes(\boldsymbol\beta) + \lambda \sum_j |\beta_j|\). Não tem solução fechada (é resolvido por otimização convexa), mas, diferente do ridge, pode zerar coeficientes exatamente. Funciona como um método de seleção de variáveis contínuo, geralmente mais estável que a seleção stepwise.
Elastic net: combina as duas penalidades minimizando \(SQRes(\boldsymbol\beta) + \lambda \left[\alpha \sum_j |\beta_j| + (1-\alpha)\sum_j \beta_j^2\right]\). É recomendada quando há grupos de covariáveis fortemente correlacionadas (o lasso puro tende a escolher arbitrariamente uma do grupo e zerar as demais).
Em todos os casos, \(\lambda\) controla o compromisso entre viés e variância (quanto maior \(\lambda\), mais encolhimento, mais viés e menos variância) e é escolhido por validação cruzada, minimizando o erro de previsão estimado. Nunca deve-se usar o ajuste dentro da própria amostra, que sempre favoreceria \(\lambda=0\) (mínimos quadrados sem penalização).
Vamos considerar o exemplo a seguir no qual expandimos a base de covariáveis para ilustrar o efeito da penalização. Adicionamos ao modelo termos quadráticos e de interação que são naturalmente bastante correlacionados com os termos lineares que os geram.
X_ext <-model.matrix(~ Girth + Height +I(Girth^2) +I(Height^2) + Girth:Height,data = trees)[, -1] # remove a coluna de intercepto; y <- trees$Volume
if (requireNamespace("glmnet", quietly =TRUE)) {library(glmnet)set.seed(2026) # para reprodutibilidade da validação cruzadaridge.cv <-cv.glmnet(X_ext, y, alpha =0) # alpha = 0: ridgelasso.cv <-cv.glmnet(X_ext, y, alpha =1) # alpha = 1: lassoelastic.cv <-cv.glmnet(X_ext, y, alpha =0.5) # alpha = 0.5: elastic netcoef(ridge.cv, s ="lambda.min")coef(lasso.cv, s ="lambda.min")coef(elastic.cv, s ="lambda.min")}
6 x 1 sparse Matrix of class "dgCMatrix"
lambda.min
(Intercept) -0.954780386
Girth -2.145261632
Height .
I(Girth^2) 0.197092735
I(Height^2) 0.001083918
Girth:Height 0.016492548
Para comparar os quatro ajustes lado a lado — mínimos quadrados (MQ, sem penalização), ridge, lasso e elastic net —, ajustamos por MQ o mesmo conjunto de termos usado em X_ext e organizamos os coeficientes em uma única tabela:
if (requireNamespace("glmnet", quietly =TRUE)) {# MQ sem penalização, nos mesmos termos usados em X_ext -------------------rlm_ext <-lm(Volume ~ Girth * Height +I(Girth^2) +I(Height^2), data = trees)# Extrai um vetor nomeado de coeficientes de um objeto cv.glmnet ----------extrai_coef <-function(fit, s ="lambda.min") { cf <-as.matrix(coef(fit, s = s))setNames(cf[, 1], rownames(cf))}termos <-names(coef(rlm_ext)) # nomes em comum entre os quatro ajustestabela_coef <-data.frame(termo = termos,MQ =coef(rlm_ext)[termos],ridge =extrai_coef(ridge.cv)[termos],lasso =extrai_coef(lasso.cv)[termos],elastic_net =extrai_coef(elastic.cv)[termos],row.names =NULL)knitr::kable( tabela_coef, digits =3,caption ="Coeficientes por mínimos quadrados, ridge, lasso e elastic net (mesmos termos; penalizados com $\\lambda$ escolhido por validação cruzada).")}
Coeficientes por mínimos quadrados, ridge, lasso e elastic net (mesmos termos; penalizados com \(\lambda\) escolhido por validação cruzada).
termo
MQ
ridge
lasso
elastic_net
(Intercept)
6.607
-26.357
-14.176
-0.955
Girth
-5.122
1.308
0.000
-2.145
Height
0.295
0.069
0.000
0.000
I(Girth^2)
0.164
0.070
0.167
0.197
I(Height^2)
-0.005
0.001
0.002
0.001
Girth:Height
0.066
0.016
0.000
0.016
Vale comparar os coeficientes obtidos por ridge e lasso, para o \(\lambda\) escolhido por validação cruzada, com os do modelo Volume ~ Girth * Height + I(Girth^2) + I(Height^2) ajustado por mínimos quadrados sem penalização. Espera-se que o lasso zere alguns dos termos quadráticos/interação, cuja contribuição é pequena diante da correlação com os termos lineares.
Alguns padrões esperados nessa comparação:
os coeficientes de MQ tendem a ter as maiores magnitudes (às vezes com sinais pouco intuitivos), efeito direto da colinearidade entre os termos lineares e seus quadrados/interação;
ridge encolhe todos os coeficientes em direção a zero sem zerá-los;
lasso costuma zerar exatamente alguns dos termos quadráticos/interação, cuja contribuição é pequena diante da correlação com os termos lineares, funcionando como seleção de variáveis;
elastic net, combinando as duas penalidades, tende a ficar entre ridge e lasso, encolhendo como o ridge, mas ainda podendo zerar alguns termos como o lasso.
8 Exercícios
Os exercícios a seguir incluem implementações computacionais. Nestas, sempre que possível, faça o cálculo “na mão” por operações matriciais (model.matrix(), crossprod(), solve()) e confira o resultado com lm().
Exercício 1. Para o exemplo do texto com os dados de trees obtenha por operações matriciais os resultados reportados por summary() e anova() para o modelo de regressão múltipla.
Exercício 2. Usando o conjunto de dados cars (base R: speed, velocidade, e dist, distância de frenagem):
Ajuste “na mão” a regressão de dist sobre speed, calculando \(\hat{\boldsymbol\beta}\) tanto pelas fórmulas escalares quanto pela forma matricial \((\mathbf{X}'\mathbf{X})^{-1}\mathbf{X}'\mathbf{y}\) (com model.matrix(), crossprod(), solve()). Confira que os dois métodos e lm() concordam.
Construa manualmente a tabela de análise de variância (\(SQTotal\), \(SQReg\), \(SQRes\), graus de liberdade, QM, F) e confira com anova(). Confirme numericamente que \(F = t^2\).
Exercício 3. Ainda com cars, crie a covariável speed2 = speed^2 e ajuste dist ~ speed + speed2.
Calcule \(\hat{\boldsymbol\beta}\) manualmente via \((\mathbf{X}'\mathbf{X})^{-1}\mathbf{X}'\mathbf{y}\) e confira com lm().
Construa manualmente a análise de variância e compare com anova(). Interprete a soma de quadrados sequencial associada a speed2: o termo quadrático melhora significativamente o ajuste?
Compare os modelos dist ~ speed e dist ~ speed + speed2 por AIC, BIC e teste F (via anova() com os dois modelos aninhados). As conclusões dos três critérios concordam entre si?
Teste manualmente, via estatística \(t\), a hipótese \(H_0: \beta_{Girth} = 2\,\beta_{Height}\), construindo o vetor de contraste \(\mathbf{c}\) apropriado.
Confira o resultado ajustando o modelo restrito correspondente e comparando via anova(), usando a relação \(F = t^2\).
Exercício 5. Usando o conjunto de dados mtcars (ou outro, à sua escolha, com várias covariáveis correlacionadas):
Ajuste a regressão múltipla de mpg sobre todas as demais variáveis (mpg ~ .) e observe o número de coeficientes e possíveis sinais de multicolinearidade (erros-padrão elevados, sinais contra-intuitivos, VIF alto).
Ajuste ridge e lasso com glmnet::cv.glmnet(), escolhendo \(\lambda\) por validação cruzada, e compare os coeficientes obtidos com os da regressão sem penalização. Quais variáveis o lasso zera?
Compare o erro de previsão dos três modelos (mínimos quadrados, ridge, lasso) por validação cruzada. Discuta o compromisso entre viés e variância observado.
Exercício 6. Para cada uma das extensões do curso (splines/GAM, modelos não lineares, heterocedásticos, efeitos aleatórios, dados no intervalo unitário), identifique explicitamente qual suposição do modelo linear clássico revisado neste material está sendo relaxada, e dê um exemplo de situação prática (diferente dos exemplos do material) em que essa suposição seria violada.