Regressão linear simples

Aula 17 — Módulo 3: Modelagem e Aprendizado de Máquina

Heitor Ramos
heitor@dcc.ufmg.br

Departamento de Ciência da Computação — UFMG

Da associação para uma média prevista

Na Aula 16, a correlação resumiu quanto duas variáveis variam juntas.

Agora queremos uma função que responda:

Para uma pessoa com idade \(x\), qual despesa média o modelo prevê?

A regressão transforma associação em uma regra explícita de previsão — ainda sem afirmar causalidade.

Hoje

  • definir regressão como modelo para a média condicional;
  • distinguir resposta, preditor, valor ajustado, erro e resíduo;
  • formular o critério de mínimos quadrados;
  • derivar intercepto e inclinação por cálculo;
  • relacionar inclinação, covariância e correlação;
  • interpretar \(R^2\) e diagnosticar resíduos;
  • quantificar incerteza com bootstrap e permutação.

Não usaremos projeções, máxima verossimilhança ou gradiente descendente nesta aula.

Base de dados de apoio

Continuaremos com Medical Insurance Cost, disponível no Kaggle sob licença CC0.

  • 1.338 pessoas seguradas nos Estados Unidos;
  • resposta: despesas médicas em charges;
  • preditor inicial: idade em age;
  • tabagismo será usado para diagnosticar heterogeneidade;
  • dados observacionais, sem atribuição aleatória.

Fonte: Kaggle, mosapabdelghany/medical-insurance-cost-dataset.

Unidade observacional e colunas

Cada linha representa uma pessoa segurada.

papel nesta aula coluna significado
resposta \(Y\) charges despesas médicas cobradas em US$
preditor \(X\) age idade em anos
diagnóstico de grupo smoker fumante ou não fumante
outras variáveis bmi, children, sex, region características não incluídas no modelo simples

O que fica fora do modelo reaparece nos resíduos.

Antes do modelo, audite os dados

  • idade entre 18 e 64 anos;
  • despesas entre US$ 1.121,87 e US$ 63.770,43;
  • nenhuma ausência;
  • uma linha exatamente duplicada, sem identificador para decidir sua origem;
  • 274 fumantes e 1.064 não fumantes;
  • despesas fortemente assimétricas à direita.

Mínimos quadrados não corrige problemas de coleta, seleção ou mensuração.

A descrição já antecipa problemas

Distribuições de idade e despesas e boxplot das despesas por tabagismo.

Uma reta global terá de resumir uma resposta assimétrica e dois grupos em patamares diferentes.

Código do gráfico
sns.histplot(df, x="age")
sns.histplot(df, x="charges")
sns.boxplot(df, x="fumante", y="charges")

A nuvem sugere tendência, mas também heterogeneidade

Dispersão de idade e despesas colorida por tabagismo.

A idade está positivamente associada às despesas, mas fumantes e não fumantes formam regimes distintos. Começaremos deliberadamente com um modelo simples.

Uma primeira ideia: médias locais

Médias das despesas em faixas de idade e reta de mínimos quadrados.

As médias em pequenas faixas aproximam \(E[Y\mid X=x]\). A reta impõe uma estrutura suave e parcimoniosa para essa tendência.

Código do gráfico
bins = pd.cut(df.age, bins=np.arange(17.5, 65.5, 5))
local = df.groupby(bins).agg(x=("age", "mean"), y=("charges", "mean"))
plt.scatter(local.x, local.y)

O alvo estatístico é a média condicional

Para cada valor \(x\), a quantidade

\[ m(x)=E[Y\mid X=x] \]

é a média da distribuição de \(Y\) entre unidades com \(X=x\).

A regressão linear simples supõe que essa função pode ser aproximada por uma reta:

\[ m(x)=\beta_0+\beta_1x. \]

O modelo estatístico

Para a observação \(i\):

\[ Y_i=\beta_0+\beta_1x_i+\varepsilon_i, \qquad E[\varepsilon_i\mid X_i=x_i]=0. \]

Equivalentemente:

\[ E[Y_i\mid X_i=x_i]=\beta_0+\beta_1x_i. \]

O modelo é sobre a média da resposta, não sobre uma igualdade exata para cada pessoa.

O que significa cada termo?

símbolo significado
\(Y_i\) resposta aleatória da observação \(i\)
\(x_i\) valor observado do preditor
\(\beta_0\) intercepto populacional
\(\beta_1\) inclinação populacional
\(\varepsilon_i\) desvio aleatório em torno da média condicional
\(E[\varepsilon_i\mid X_i=x_i]=0\) o modelo não erra sistematicamente em cada valor de \(X\)

Os parâmetros \(\beta_0\) e \(\beta_1\) são desconhecidos.

Erro não é sinônimo de engano

\(\varepsilon_i\) representa tudo que faz \(Y_i\) diferir da média condicional:

  • variáveis não incluídas;
  • heterogeneidade individual;
  • ruído de mensuração;
  • aleatoriedade do processo.

Ele não significa necessariamente que os dados foram medidos incorretamente.

Depois do ajuste, observamos resíduos \(e_i\), não os erros populacionais \(\varepsilon_i\).

Uma reta produz valores ajustados

Para candidatos \(b_0\) e \(b_1\):

\[ \widehat y_i=b_0+b_1x_i. \]

  • \(b_0\) e \(b_1\) são estimativas calculadas na amostra;
  • \(\widehat y_i\) é o valor ajustado;
  • a reta fornece uma previsão média para cada \(x_i\);
  • pessoas com a mesma idade recebem a mesma previsão neste modelo simples.

O resíduo é uma distância vertical

Ponto observado, valor previsto na reta e resíduo vertical.

\[ e_i=y_i-\widehat y_i=y_i-b_0-b_1x_i. \]

Código do gráfico
y_hat_i = b0+b1*x_i
e_i = y_i-y_hat_i
plt.plot([x_i, x_i], [y_hat_i, y_i])

A perda reúne todos os resíduos

A soma dos erros ao quadrado é

\[ \operatorname{SSE}(b_0,b_1) =\sum_{i=1}^{n}(y_i-b_0-b_1x_i)^2. \]

O erro quadrático médio é

\[ \operatorname{MSE}(b_0,b_1)=\frac1n\operatorname{SSE}(b_0,b_1). \]

Ambos têm o mesmo minimizador; dividir por \(n\) apenas muda a escala da perda.

Por que elevar ao quadrado?

  • evita cancelamento entre resíduos positivos e negativos;
  • penaliza mais intensamente erros grandes;
  • produz uma função diferenciável e convexa;
  • conecta regressão à média, que minimiza perda quadrática;
  • possui solução algébrica no modelo linear.

O quadrado também aumenta a influência de valores extremos: não é uma escolha neutra.

Retas diferentes produzem perdas diferentes

Três retas candidatas com resíduos verticais e erros médios distintos.
Código do gráfico
for slope in [0, b1, 2*b1]:
    intercept = y.mean()-slope*x.mean()
    mse = np.mean((y-intercept-slope*x)**2)

Qual reta escolher?

Três retas candidatas A, B e C com resíduos verticais.

Qual reta parece minimizar a soma dos resíduos ao quadrado?

  • Reta B
  • Reta A
  • Reta C
  • As três têm necessariamente a mesma perda

O problema de mínimos quadrados

Definimos as estimativas por

\[ (\widehat\beta_0,\widehat\beta_1) =\arg\min_{b_0,b_1} \sum_{i=1}^{n}(y_i-b_0-b_1x_i)^2. \]

  • arg min devolve os valores dos argumentos que minimizam a função;
  • \(b_0,b_1\) são candidatos;
  • \(\widehat\beta_0,\widehat\beta_1\) são os candidatos vencedores.

Resolveremos o problema diretamente por cálculo.

Derive primeiro em relação ao intercepto

\[ \frac{\partial\operatorname{SSE}}{\partial b_0} =\sum_{i=1}^n 2(y_i-b_0-b_1x_i)(-1). \]

Igualando a zero:

\[ \sum_i(y_i-b_0-b_1x_i)=0. \]

Portanto, no mínimo, a soma dos resíduos é zero.

A primeira condição determina o intercepto

Desenvolvendo a igualdade:

\[ \sum_i y_i-nb_0-b_1\sum_i x_i=0. \]

Dividindo por \(n\):

\[ \bar y-b_0-b_1\bar x=0 \quad\Longrightarrow\quad b_0=\bar y-b_1\bar x. \]

Toda reta candidata após otimizar o intercepto passa por \((\bar x,\bar y)\).

Centralizar reduz o problema a uma inclinação

Substitua \(b_0=\bar y-b_1\bar x\) no resíduo:

\[ y_i-b_0-b_1x_i =(y_i-\bar y)-b_1(x_i-\bar x). \]

Definindo \(x_i^c=x_i-\bar x\) e \(y_i^c=y_i-\bar y\):

\[ \operatorname{SSE}(b_1)=\sum_i(y_i^c-b_1x_i^c)^2. \]

Centralizar não altera a inclinação; apenas incorpora o intercepto.

Agora derive em relação à inclinação

\[ \frac{d\operatorname{SSE}}{db_1} =-2\sum_i x_i^c(y_i^c-b_1x_i^c). \]

Igualando a zero:

\[ \sum_i x_i^cy_i^c =b_1\sum_i(x_i^c)^2. \]

A segunda derivada é \(2\sum_i(x_i^c)^2>0\) quando há variação em \(X\), confirmando o mínimo único.

A solução convencional

\[ \widehat\beta_1 =\frac{\sum_i(x_i-\bar x)(y_i-\bar y)} {\sum_i(x_i-\bar x)^2}, \qquad \widehat\beta_0=\bar y-\widehat\beta_1\bar x. \]

A solução exige \(\sum_i(x_i-\bar x)^2>0\): se todos os \(x_i\) forem iguais, não há inclinação identificável.

Inclinação é covariância dividida pela variância

Divida numerador e denominador por \(n-1\):

\[ \widehat\beta_1 =\frac{s_{XY}}{s_X^2} =\frac{\operatorname{Cov}(X,Y)}{\operatorname{Var}(X)}. \]

  • \(s_{XY}\) mede variação conjunta;
  • \(s_X^2\) mede quanta variação em \(X\) está disponível;
  • a unidade de \(\widehat\beta_1\) é [unidade de Y]/[unidade de X].

A ligação com a correlação

Como

\[ r=\frac{s_{XY}}{s_Xs_Y}, \]

temos

\[ \widehat\beta_1=r\frac{s_Y}{s_X}. \]

Correlação fornece sinal e força padronizada; a razão \(s_Y/s_X\) devolve as unidades necessárias à inclinação.

Nos dados padronizados, inclinação é correlação

Se

\[ Z_X=\frac{X-\bar X}{s_X}, \qquad Z_Y=\frac{Y-\bar Y}{s_Y}, \]

então ambos têm média zero e desvio-padrão um. A regressão de \(Z_Y\) em \(Z_X\) possui:

\[ \widehat\beta_0=0, \qquad \widehat\beta_1=r. \]

Isso vale para regressão linear simples com intercepto.

O ajuste na base de seguros

Para despesas em função da idade:

\[ \widehat{\text{despesa}} =3165{,}89+257{,}72\times\text{idade}. \]

quantidade valor
intercepto US$ 3.165,89
inclinação US$ 257,72 por ano
\(R^2\) 0,089
RMSE US$ 11.551,67

Interprete os coeficientes no domínio

Intercepto: \(\widehat\beta_0=3165{,}89\)

É a previsão quando idade \(=0\), fora da faixa observada de 18 a 64 anos. Ele posiciona a reta, mas não possui interpretação substantiva confiável aqui.

Inclinação: \(\widehat\beta_1=257{,}72\) US$/ano

Dentro do modelo, acrescentar um ano à idade está associado a um aumento médio previsto de aproximadamente US$ 258 nas despesas.

Não é um efeito causal: tabagismo e outras variáveis não foram controlados.

A reta passa pelo centro dos dados

Reta global de mínimos quadrados, centro dos dados e pontos por tabagismo.
Código do gráfico
b1 = np.sum((x-x.mean())*(y-y.mean())) / np.sum((x-x.mean())**2)
b0 = y.mean()-b1*x.mean()
yhat = b0+b1*x

Ajuste médio não é previsão individual exata

Para uma pessoa de 40 anos:

\[ \widehat y=3165{,}89+257{,}72\times40 \approx 13\,475. \]

O resultado está em dólares (US$). Essa é uma estimativa da despesa média condicional segundo o modelo. Uma pessoa específica pode ficar muito distante desse valor.

O resíduo observado será \(e_i=y_i-13.475\).

Há duas incertezas diferentes

  • Incerteza da média: quão precisamente estimamos \(E[Y\mid X=x]\)?
  • Incerteza individual: quão variável pode ser uma nova observação \(Y\) em torno dessa média?

Intervalos de previsão individuais são mais largos que intervalos para a média, pois incluem a dispersão de \(\varepsilon\).

Nesta aula, o bootstrap quantificará a incerteza dos coeficientes; a formulação paramétrica virá com a visão probabilística.

\(R^2\) compara com o modelo da média

O modelo-base ignora \(X\) e prevê \(\bar y\) para todos:

\[ \operatorname{SST}=\sum_i(y_i-\bar y)^2. \]

O modelo ajustado deixa resíduos:

\[ \operatorname{SSE}=\sum_i(y_i-\widehat y_i)^2. \]

\(R^2\) compara quanto erro quadrático restou após usar a reta.

Definição do coeficiente de determinação

\[ R^2=1-\frac{\operatorname{SSE}}{\operatorname{SST}}. \]

  • \(R^2=1\): ajuste perfeito na amostra;
  • \(R^2=0\): não melhora a previsão constante \(\bar y\);
  • com intercepto e ajuste OLS nos mesmos dados, \(0\leq R^2\leq1\);
  • fora desse contexto — teste, modelo sem intercepto ou previsões fixas — \(R^2\) pode ser negativo.

A decomposição é visual

Erros em torno da média comparados a resíduos em torno da reta.

Na regressão OLS com intercepto:

\[ \operatorname{SST}=\operatorname{SSR}+\operatorname{SSE}, \]

em que SSR é a soma de quadrados explicada pela regressão.

Código do gráfico
sst = np.sum((y-y.mean())**2)
sse = np.sum((y-yhat)**2)
r2 = 1-sse/sst

Em regressão simples, \(R^2=r^2\)

Com um preditor e intercepto:

\[ R^2=r_{XY}^2. \]

Na base:

\[ r_{\text{idade,despesa}}=0{,}299 \quad\Longrightarrow\quad R^2=0{,}299^2\approx0{,}089. \]

A idade captura cerca de 8,9% da variabilidade amostral das despesas sob o critério quadrático.

\(R^2\) não mede tudo que importa

Um \(R^2\) alto não garante:

  • causalidade;
  • ausência de viés;
  • boa previsão fora da amostra;
  • resíduos bem comportados;
  • relevância prática;
  • forma funcional correta.

Um \(R^2\) baixo pode coexistir com uma associação real e cientificamente relevante.

Diagnósticos verificam o que a reta deixou para trás

Depois do ajuste, procure nos resíduos:

  • curvatura: média condicional não linear;
  • funil: variância não constante;
  • grupos: variável omitida ou interação;
  • dependência temporal/espacial;
  • pontos influentes;
  • caudas muito diferentes da distribuição assumida.

Resíduos deveriam parecer estrutura sem padrão sistemático.

Aqui os resíduos ainda têm estrutura

Resíduos contra valores ajustados coloridos por tabagismo.

O tabagismo separa os resíduos em patamares. A variabilidade também cresce em partes da faixa ajustada.

Código do gráfico
resid = y-yhat
sns.scatterplot(x=yhat, y=resid, hue=df.fumante)
plt.axhline(0)

Normalidade e homoscedasticidade não são fatos automáticos

Histograma e QQ plot dos resíduos.

Os resíduos são assimétricos e desviam da reta normal. Isso alerta contra inferência paramétrica ingênua no modelo simples.

Código do gráfico
sns.histplot(resid)
scipy.stats.probplot(resid, dist="norm", plot=ax)

Condições para a leitura estatística

Para interpretar a reta como modelo da média e fazer inferência convencional, examinamos:

  1. linearidade: \(E[Y\mid X=x]=\beta_0+\beta_1x\);
  2. média condicional zero: \(E[\varepsilon\mid X]=0\);
  3. independência entre unidades, conforme o desenho;
  4. variância constante para fórmulas clássicas simples de erro-padrão;
  5. normalidade condicional quando usamos resultados exatos em amostras pequenas.

Normalidade não é necessária para calcular OLS.

Bootstrap de pares para a inclinação

Distribuição bootstrap da inclinação com intervalo de 95%.

Reamostramos linhas completas \((x_i,y_i)\) e reajustamos a reta. O IC percentil de 95% é aproximadamente US$ 214 a US$ 300 por ano.

Código do gráfico
for _ in range(4000):
    sample = df.sample(len(df), replace=True)
    slopes.append(ols(sample.age, sample.charges)[1])

Permutação representa ausência de associação

Distribuição nula de inclinações após permutar a resposta.

Permutar \(Y\) mantém idades e despesas, mas quebra seus pares. A inclinação observada fica muito distante da distribuição nula.

Código do gráfico
for _ in range(4000):
    y_perm = rng.permutation(y)
    null_slopes.append(ols(x, y_perm)[1])

O que esta inferência permite dizer?

Os dados fornecem evidência de associação linear entre idade e despesas, e o bootstrap mostra que a inclinação é estimada com alguma precisão.

Mas:

  • a amostra pode não representar toda a população-alvo;
  • o modelo omite tabagismo e outras variáveis;
  • os resíduos violam condições simples;
  • associação estatística não identifica efeito causal.

A máxima verossimilhança dará uma interpretação probabilística aos mesmos coeficientes em uma aula posterior.

Qual afirmação está correta?

Considere regressão linear simples ajustada por OLS com intercepto.

  • A reta passa por \((\bar x,\bar y)\) e os resíduos somam zero
  • \(R^2\) mede a probabilidade de o modelo estar correto
  • Normalidade é necessária para calcular \(\widehat\beta_0\) e \(\widehat\beta_1\)
  • A inclinação é causal sempre que seu valor-p é pequeno

Fechamento: tabagismo, IMC e quatro retas

A reta global mistura grupos. Vamos ajustar despesas em função da idade em quatro subgrupos definidos por características observadas:

  • fumantes com IMC < 30 e fumantes com IMC ≥ 30;
  • não fumantes com IMC < 30 e não fumantes com IMC ≥ 30.

Pergunta: o IMC ajuda a explicar as diferentes nuvens de despesas dentro de cada grupo de tabagismo?

O IMC não mede diretamente autocuidado. Não vamos chamar esses grupos de pessoas que “se cuidam mais” ou “se cuidam menos”.

Como definimos os grupos?

Cruzamos tabagismo com duas faixas de IMC, em kg/m²:

Grupo IMC < 30 IMC ≥ 30
Fumantes 129 pessoas 145 pessoas
Não fumantes 502 pessoas 562 pessoas

Cada pessoa pertence a um único grupo. A despesa não participa da classificação.

Código do recorte
dados["faixa_imc"] = np.where(dados.bmi < 30, "IMC < 30", "IMC ≥ 30")
grupos = dados.groupby(["smoker", "faixa_imc"])

O corte em 30 é fixo neste exercício; não foi otimizado para obter o maior R².

Fumantes: duas faixas de IMC

Retas dos fumantes por IMC. Abaixo de 30: R² 0,482 e RMSE 3.633 dólares. A partir de 30: R² 0,445 e RMSE 4.477 dólares. O segundo grupo tem despesas mais altas.

O recorte por IMC distingue bem os dois patamares de despesas. As inclinações são próximas, mas há dispersão e pontos afastados das retas.

Não fumantes: duas faixas de IMC

Retas dos não fumantes por IMC. Abaixo de 30: R² 0,382 e RMSE 4.585 dólares. A partir de 30: R² 0,399 e RMSE 4.730 dólares. Os dois grupos mantêm pontos nos patamares baixo e alto.

As retas são muito semelhantes. O IMC não separa as duas nuvens dos não fumantes: ainda há despesas altas e baixas em ambas as faixas.

Comparando os quatro ajustes

Cada reta tem a forma \(\widehat y=b_0+b_1\times\text{idade}\), com despesas em dólares.

Grupo / IMC \(n\) \(b_0\) \(b_1\) (US$/ano) \(R^2\) RMSE (US$)
Fumantes / < 30 129 11.503,36 260,64 0,482 3.633,16
Fumantes / ≥ 30 145 30.558,13 281,15 0,445 4.477,15
Não fumantes / < 30 502 −2.118,37 265,95 0,382 4.584,75
Não fumantes / ≥ 30 562 −2.029,05 267,39 0,399 4.729,81

\(R^2\) usa a média do próprio subgrupo como referência. O RMSE mede o erro quadrático em dólares. Todas as métricas são calculadas nos dados do ajuste.

Normalidade dos resíduos: fumantes

QQ-plots dos fumantes nas duas faixas de IMC, com desvios importantes da diagonal, sobretudo na cauda direita.

Comparamos quantis dos resíduos padronizados aos da Normal. Nas duas faixas de IMC, os desvios da diagonal e a cauda direita indicam que o ajuste deixa resíduos não normais.

Normalidade dos resíduos: não fumantes

QQ-plots dos não fumantes nas duas faixas de IMC, com forte curvatura e assimetria à direita.

As duas faixas mantêm uma mistura de patamares de despesas. A assimetria dos resíduos persiste: separar por IMC não resolve essa heterogeneidade.

Anderson–Darling: diagnóstico complementar

\(H_0\): os valores seguem uma distribuição Normal, com média e variância estimadas. Quanto maior \(A^2\), maior a discrepância, com atenção às caudas.

Grupo / IMC \(A^2\) Valor-p aproximado Leitura nominal a 5%
Fumantes / < 30 10,996 < 0,001 Rejeita normalidade
Fumantes / ≥ 30 10,697 < 0,001 Rejeita normalidade
Não fumantes / < 30 104,361 < 0,001 Rejeita normalidade
Não fumantes / ≥ 30 109,327 < 0,001 Rejeita normalidade
Código do teste em cada grupo
from statsmodels.stats.diagnostic import normal_ad

residuos = grupo.charges - (b0 + b1 * grupo.age)
estatistica, valor_p = normal_ad(residuos)

Leitura exploratória: os resíduos resultam de retas estimadas e não são uma amostra independente. Os valores-p usuais não corrigem esse efeito.

Como interpretar esse diagnóstico?

  • QQ-plots e teste indicam desvios da Normal nos quatro grupos.
  • O tamanho amostral afeta a sensibilidade do teste: examine também a forma e a magnitude dos desvios nos gráficos.
  • Normalidade não é necessária para calcular OLS; ela importa para certas inferências paramétricas exatas.
  • Esse diagnóstico não verifica independência, variância constante ou causalidade.

Os quatro testes são exploratórios, sem ajuste para múltiplas comparações. Não interpretamos valores-p arredondados a zero como probabilidades exatamente nulas.

O que aprendemos com as quatro retas?

  • Entre fumantes, o IMC distingue patamares de despesas bastante diferentes.
  • Entre não fumantes, os coeficientes são próximos: inclinações de aproximadamente 266 e 267 dólares por ano.
  • O recorte por IMC não reproduz quatro nuvens bem separadas; ainda há estrutura nos resíduos.

A classificação usa tabagismo e IMC, disponíveis sem conhecer a despesa. Mesmo assim, as métricas são de ajuste na amostra: avaliar previsão exige dados separados.

O material de apoio contém o recorte, os ajustes, as métricas e os diagnósticos.

E a hipótese de autocuidado?

O IMC ajuda a descrever parte da heterogeneidade, mas não identifica quem se cuida mais ou menos.

  • Precisaríamos medir hábitos, atividade física, prevenção e adesão a tratamentos, além de condições de saúde e acesso ao atendimento.
  • Despesas baixas podem refletir pouco acesso ou cuidado adiado; despesas altas podem incluir prevenção e tratamentos necessários.
  • Tabagismo, IMC e despesas são observados, não atribuídos aleatoriamente.

As retas descrevem associações. A hipótese de autocuidado permanece aberta e exige dados e desenho de estudo adequados.

Bibliografia da aula

Síntese e próxima aula

  • regressão linear modela a média condicional;
  • OLS minimiza a soma dos resíduos ao quadrado;
  • \(\widehat\beta_1=s_{XY}/s_X^2=r(s_Y/s_X)\);
  • a reta passa por \((\bar x,\bar y)\);
  • \(R^2\) compara a reta com prever apenas \(\bar y\);
  • resíduos revelam limitações do modelo.

Hoje resolvemos OLS por cálculo. Nas próximas aulas, veremos como uma distribuição probabilística leva à mesma solução por máxima verossimilhança e como algoritmos iterativos a encontram por gradiente descendente.