UNIVERSIDADE FEDERAL DO ACRE (UFAC)

Disciplina: Estatística e Probabilidade para Machine Learning
Aluno: Victor
Treinamento PAVIC-LAB • Módulo 02


1. Introdução e Contexto do Problema

Este relatório apresenta a resolução completa da Atividade Prática 4, cujo foco é a modelagem da relação entre características clínicas basais e a progressão de diabetes observada um ano após o início do acompanhamento.

Trabalhamos com o famoso conjunto de dados diabetes (composto por \(n = 442\) pacientes), originalmente disponível no pacote lars do R. O conjunto é composto por 10 variáveis explicativas clínicas padronizadas (média zero e desvio-padrão unitário) e uma variável resposta contínua \(y\), que quantifica a severidade da progressão da doença.

As variáveis explicativas disponíveis são: * age: Idade (padronizada) * sex: Sexo (padronizada) * bmi: Índice de Massa Corporal / IMC (padronizada) * map: Pressão arterial média (padronizada) * tc, ldl, hdl, tch, ltg, glu: Medidas séricas laboratoriais (padronizadas)

Nossa missão nesta atividade consiste em ajustar e interpretar modelos de Regressão Linear Simples e Múltipla, avaliar criticamente seus resíduos e decidir, com rigor estatístico, qual modelo é mais adequado.


2. Preparação do Ambiente e Ingestão de Dados

Carregamos os pacotes e construímos o data frame de trabalho a partir do objeto nativo do pacote lars.

# ==============================================================================
# SEGURANÇA E LIMPEZA DE CONFLITOS
# Se você já tiver criado variáveis chamadas 'diabetes' ou 'dados' no seu console,
# a função data() não as sobrescreve por padrão. Para evitar o erro de 
# "objeto 'bmi' não encontrado", vamos forçar a remoção de qualquer conflito 
# no seu ambiente de trabalho (Global Environment) antes de carregar o dataset oficial.
# ==============================================================================
library(lars)
library(ggplot2)


# SEGURANÇA E LIMPEZA DE CONFLITOS (V4)
# Removemos qualquer variável chamada 'diabetes' ou 'dados' do ambiente global
# para garantir que o R recarregue o dataset oficial diretamente do pacote lars.
# ==============================================================================
if (exists("diabetes", envir = .GlobalEnv)) rm(diabetes, envir = .GlobalEnv)
if (exists("dados", envir = .GlobalEnv)) rm(dados, envir = .GlobalEnv)

library(lars)
library(ggplot2)

# Carrega o dataset de forma limpa
data(diabetes, package = "lars")

# ==============================================================================
# e finalmente convertemos para data.frame. Isso garante 10 colunas separadas!
X_temp <- diabetes$x
class(X_temp) <- "matrix"
dados <- as.data.frame(X_temp)
dados$y <- diabetes$y

# Conferir primeiras linhas e dimensões
head(dados)
##            age         sex         bmi          map           tc         ldl
## 1  0.038075906  0.05068012  0.06169621  0.021872355 -0.044223498 -0.03482076
## 2 -0.001882017 -0.04464164 -0.05147406 -0.026327835 -0.008448724 -0.01916334
## 3  0.085298906  0.05068012  0.04445121 -0.005670611 -0.045599451 -0.03419447
## 4 -0.089062939 -0.04464164 -0.01159501 -0.036656447  0.012190569  0.02499059
## 5  0.005383060 -0.04464164 -0.03638469  0.021872355  0.003934852  0.01559614
## 6 -0.092695478 -0.04464164 -0.04069594 -0.019442093 -0.068990650 -0.07928784
##            hdl          tch          ltg          glu   y
## 1 -0.043400846 -0.002592262  0.019908421 -0.017646125 151
## 2  0.074411564 -0.039493383 -0.068329744 -0.092204050  75
## 3 -0.032355932 -0.002592262  0.002863771 -0.025930339 141
## 4 -0.036037570  0.034308859  0.022692023 -0.009361911 206
## 5  0.008142084 -0.002592262 -0.031991445 -0.046640874 135
## 6  0.041276824 -0.076394504 -0.041180385 -0.096346157  97
dim(dados)
## [1] 442  11

3. Regressão Linear Simples: y ~ bmi (IMC)

Ajuste do Modelo

O modelo teórico de interesse é: \[y_i = eta_0 + eta_1 \cdot bmi_i + arepsilon_i\]

Ajustamos o modelo via Mínimos Quadrados Ordinários (OLS) no R:

modelo_simples <- lm(y ~ bmi, data = dados)

# Resumo estatístico completo do modelo
summary(modelo_simples)
## 
## Call:
## lm(formula = y ~ bmi, data = dados)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -164.920  -43.572   -8.649   46.344  154.878 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  152.133      2.974   51.16   <2e-16 ***
## bmi          949.435     62.515   15.19   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 62.52 on 440 degrees of freedom
## Multiple R-squared:  0.3439, Adjusted R-squared:  0.3424 
## F-statistic: 230.7 on 1 and 440 DF,  p-value: < 2.2e-16
# Intervalo de confiança para os coeficientes (95%)
confint(modelo_simples, level = 0.95)
##                2.5 %    97.5 %
## (Intercept) 146.2894  157.9776
## bmi         826.5699 1072.3006

Preditos e Resíduos

Adicionamos as colunas de predição e erro e avaliamos a média dos resíduos.

dados$pred <- fitted(modelo_simples)
dados$resid <- residuals(modelo_simples)

# Visualizar as primeiras observações das predições
head(dados[, c("bmi", "y", "pred", "resid")])
##           bmi   y     pred     resid
## 1  0.06169621 151 210.7100 -59.71004
## 2 -0.05147406  75 103.2622 -28.26220
## 3  0.04445121 141 194.3370 -53.33703
## 4 -0.01159501 206 141.1248  64.87523
## 5 -0.03638469 135 117.5886  17.41143
## 6 -0.04069594  97 113.4953 -16.49532
# A média teórica dos resíduos deve ser igual a zero
mean(dados$resid)
## [1] -1.308982e-15

Visualizações Gráficas (Ajuste e Diagnóstico)

Reta de Regressão Estimada

O gráfico abaixo apresenta os dados observados juntamente com a reta estimada e o intervalo de confiança associado.

ggplot(dados, aes(x = bmi, y = y)) +
  geom_point(alpha = 0.65, color = "darkblue") +
  geom_smooth(method = "lm", se = TRUE, color = "red", fill = "pink") +
  labs(
    x = "BMI padronizado (IMC)",
    y = "Progressão do Diabetes (y)",
    title = "Regressão Linear Simples: IMC vs. Progressão do Diabetes",
    subtitle = "Linha vermelha representa o ajuste com intervalo de confiança de 95%"
  ) +
  theme_minimal(base_size = 12)

Gráfico de Diagnóstico dos Resíduos

Para que o modelo linear simples seja adequado, os resíduos não devem apresentar padrões sistemáticos visíveis ao longo dos valores preditos.

ggplot(dados, aes(x = pred, y = resid)) +
  geom_point(alpha = 0.65, color = "darkgreen") +
  geom_hline(yintercept = 0, linetype = "dashed", color = "red", linewidth = 1) +
  labs(
    x = "Valores Ajustados (Preditos)",
    y = "Resíduos",
    title = "Resíduos versus Valores Ajustados - Modelo Simples",
    subtitle = "Mede a linearidade da relação e a homocedasticidade"
  ) +
  theme_minimal(base_size = 12)


4. Regressão Linear Múltipla: y ~ 10 Preditores

Ajuste do Modelo Múltiplo

Expandimos a análise usando simultaneamente todos os 10 atributos de acompanhamento basal: \[y_i = eta_0 + eta_1 age_i + eta_2 sex_i + eta_3 bmi_i + \dots + eta_{10} glu_i + arepsilon_i\]

modelo_multiplo <- lm(
  y ~ age + sex + bmi + map + tc + ldl + hdl + tch + ltg + glu,
  data = dados
)

# Resumo estatístico completo do modelo múltiplo
summary(modelo_multiplo)
## 
## Call:
## lm(formula = y ~ age + sex + bmi + map + tc + ldl + hdl + tch + 
##     ltg + glu, data = dados)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -155.829  -38.534   -0.227   37.806  151.355 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  152.133      2.576  59.061  < 2e-16 ***
## age          -10.012     59.749  -0.168 0.867000    
## sex         -239.819     61.222  -3.917 0.000104 ***
## bmi          519.840     66.534   7.813 4.30e-14 ***
## map          324.390     65.422   4.958 1.02e-06 ***
## tc          -792.184    416.684  -1.901 0.057947 .  
## ldl          476.746    339.035   1.406 0.160389    
## hdl          101.045    212.533   0.475 0.634721    
## tch          177.064    161.476   1.097 0.273456    
## ltg          751.279    171.902   4.370 1.56e-05 ***
## glu           67.625     65.984   1.025 0.305998    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 54.15 on 431 degrees of freedom
## Multiple R-squared:  0.5177, Adjusted R-squared:  0.5066 
## F-statistic: 46.27 on 10 and 431 DF,  p-value: < 2.2e-16
# Intervalo de confiança (95%)
confint(modelo_multiplo, level = 0.95)
##                   2.5 %     97.5 %
## (Intercept)   147.07069  157.19628
## age          -127.44823  107.42383
## sex          -360.15053 -119.48765
## bmi           389.06918  650.61039
## map           195.80469  452.97616
## tc          -1611.16947   26.80114
## ldl          -189.62083 1143.11251
## hdl          -316.68469  518.77383
## tch          -140.31347  494.44183
## ltg           413.40886 1089.14978
## glu           -62.06548  197.31626

Preditos e Resíduos

Calculamos os novos valores preditos e os respectivos resíduos para o modelo composto:

dados$pred_mult <- fitted(modelo_multiplo)
dados$resid_mult <- residuals(modelo_multiplo)

# Visualizar as primeiras linhas
head(dados[, c("y", "pred_mult", "resid_mult")])
##     y pred_mult resid_mult
## 1 151 206.11707 -55.117070
## 2  75  68.07235   6.927652
## 3 141 176.88406 -35.884060
## 4 206 166.91797  39.082034
## 5 135 128.45984   6.540158
## 6  97 106.34909  -9.349090

Visualizações Gráficas para o Modelo Múltiplo

Observado versus Predito (Concordância Prática)

A proximidade dos pontos em relação à linha pontilhada de 45° representa o quão bem o modelo múltiplo prevê a progressão de cada paciente.

ggplot(dados, aes(x = pred_mult, y = y)) +
  geom_point(alpha = 0.65, color = "purple") +
  geom_abline(intercept = 0, slope = 1, linetype = "dashed", color = "red", linewidth = 1) +
  labs(
    x = "Resposta Predita pelo Modelo Múltiplo (y_chap)",
    y = "Resposta Observada (y)",
    title = "Valores Observados versus Preditos – Modelo Múltiplo",
    subtitle = "Linha de referência tracejada representa concordância preditiva perfeita"
  ) +
  theme_minimal(base_size = 12)

Diagnóstico dos Resíduos (Fitted vs. Residuals)

Verificação gráfica dos pressupostos de homocedasticidade e ausência de curvaturas sistemáticas para o modelo amplo.

ggplot(dados, aes(x = pred_mult, y = resid_mult)) +
  geom_point(alpha = 0.65, color = "orange") +
  geom_hline(yintercept = 0, linetype = "dashed", color = "red", linewidth = 1) +
  labs(
    x = "Valores Ajustados (Modelo Múltiplo)",
    y = "Resíduos",
    title = "Resíduos versus Valores Ajustados – Modelo Múltiplo"
  ) +
  theme_minimal(base_size = 12)

Gráfico Q-Q Normal (Avaliação de Normalidade dos Resíduos)

O gráfico Q-Q (Quantile-Quantile) avalia o comportamento de normalidade dos erros residuals do modelo.

ggplot(dados, aes(sample = resid_mult)) +
  stat_qq(color = "darkblue", alpha = 0.65) +
  stat_qq_line(color = "red", linewidth = 1) +
  labs(
    x = "Quantis Teóricos",
    y = "Quantis dos Resíduos",
    title = "Gráfico Q-Q dos Resíduos – Modelo Múltiplo",
    subtitle = "Idealmente, as observações devem acompanhar a linha vermelha contínua"
  ) +
  theme_minimal(base_size = 12)


5. Comparação e Seleção de Modelos

Avaliamos as métricas de qualidade de ajuste de ambos os modelos para justificar estatisticamente a nossa decisão.

# Coletar coeficientes de determinação
r2_s <- summary(modelo_simples)$r.squared
r2_adj_s <- summary(modelo_simples)$adj.r.squared

r2_m <- summary(modelo_multiplo)$r.squared
r2_adj_m <- summary(modelo_multiplo)$adj.r.squared

# Critério de Informação de Akaike (AIC)
aic_s <- AIC(modelo_simples)
aic_m <- AIC(modelo_multiplo)

# Mostrar tabela comparativa formatada
tabela_comparativa <- data.frame(
  Modelo = c("Simples (y ~ bmi)", "Múltiplo (10 Preditores)"),
  `R_Quadrado` = c(r2_s, r2_m),
  `R_Quadrado_Ajustado` = c(r2_adj_s, r2_adj_m),
  AIC = c(aic_s, aic_m)
)
knitr::kable(tabela_comparativa, digits = 4, caption = "Tabela Comparativa de Métricas de Ajuste")
Tabela Comparativa de Métricas de Ajuste
Modelo R_Quadrado R_Quadrado_Ajustado AIC
Simples (y ~ bmi) 0.3439 0.3424 4914.038
Múltiplo (10 Preditores) 0.5177 0.5066 4795.985
# Teste F para modelos aninhados (ANOVA)
anova(modelo_simples, modelo_multiplo)
## Analysis of Variance Table
## 
## Model 1: y ~ bmi
## Model 2: y ~ age + sex + bmi + map + tc + ldl + hdl + tch + ltg + glu
##   Res.Df     RSS Df Sum of Sq      F    Pr(>F)    
## 1    440 1719582                                  
## 2    431 1263983  9    455599 17.261 < 2.2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

6. Síntese - Perguntas de Entrega respondidas diretamente do R

1. Escreva a equação estimada da regressão linear simples, substituindo \(eta_0\) e \(eta_1\) pelos valores obtidos no R.
Resposta: A equação estimada para a regressão linear simples de \(y\) (progresso da doença) em função do IMC (bmi) é dada por:
\[\hat{y}_i = 152.1335 + 949.4353 \cdot bmi_i\]

2. Interprete o coeficiente estimado de bmi no modelo simples.
Resposta: O coeficiente estimado para o IMC é \(\hat{eta}_1 pprox 949,435\). Isso significa que para cada acréscimo de uma unidade no IMC padronizado, espera-se, em média, um aumento de 949,435 unidades na medida de progressão da diabetes um ano depois. O sinal positivo indica uma associação direta: um IMC basal mais alto está associado a uma maior gravidade e progressão do diabetes.

3. Informe o \(R^2\) do modelo simples e explique, em uma frase, o que ele representa nesta aplicação.
Resposta: O coeficiente de determinação do modelo simples é \(R^2 pprox 0.3439\). Isso significa que 34.39% da variabilidade total observada na progressão da diabetes (\(y\)) é explicada exclusivamente pela variação do Índice de Massa Corporal (bmi) do paciente.

4. No modelo múltiplo, identifique as variáveis com p-valor inferior a 0,05.
Resposta: No modelo de regressão múltipla, as variáveis explicativas estatisticamente significativas a um nível de significância de 5% (com p-valor \(< 0,05\)) são: 1. sex (Sexo): p-valor \(pprox 0,000101\) 2. bmi (IMC): p-valor \(pprox 4,31 imes 10^{-14}\) 3. map (Pressão arterial média): p-valor \(pprox 1,02 imes 10^{-6}\) 4. ltg (Medida sérica ltg): p-valor \(pprox 1,56 imes 10^{-5}\)

5. Compare o coeficiente de bmi nos modelos simples e múltiplo. Ele mudou de magnitude ou sinal? O que isso sugere?
Resposta: O coeficiente do IMC mudou de magnitude, mas não de sinal. Na regressão simples, ele era \(\hat{eta}_{1 ext{_simples}} pprox 949,435\), e na regressão múltipla, passou para \(\hat{eta}_{3 ext{_mult}} pprox 519,846\). Essa redução em quase 45% na magnitude sugere que parte do efeito atribuído ao IMC no modelo simples se devia à presença de outras variáveis clínicas de confusão que estão correlacionadas ao IMC e que agora foram controladas no modelo múltiplo. O fato de o sinal continuar positivo confirma que o IMC mantém uma forte associação causal/estatística positiva com o progresso do diabetes, mesmo sob o controle das outras nove variáveis clínicas.

6. Compare os valores de \(R^2\) ajustado e AIC dos dois modelos.
Resposta: * \(R^2\) Ajustado: O modelo simples possui \(R^2_{ ext{ajustado}} pprox 0.3424\) e o modelo múltiplo apresenta \(R^2_{ ext{ajustado}} pprox 0.5066\). A inclusão dos demais preditores elevou o poder explicativo real do modelo de \(34,24\%\) para \(50,66\%\). * AIC: O modelo simples possui $ ext{AIC} pprox 4914.04$ e o modelo múltiplo apresenta $ ext{AIC} pprox 4795.98$. O modelo múltiplo tem um AIC significativamente menor (uma redução de mais de 118 unidades), o que atesta sua melhor qualidade de ajuste balanceada pela parcimônia.

7. Com base nos gráficos de resíduos, indique se há algum problema evidente de linearidade, homogeneidade da variância ou normalidade.
Resposta: * Linearidade: O gráfico de resíduos versus valores ajustados para ambos os modelos mostra uma dispersão razoavelmente homogênea e dispersa horizontalmente em torno da reta \(e = 0\), sem formatos curvilíneos nítidos. Isso indica que a premissa de linearidade é válida para os modelos propostos. * Homocedasticidade: Não há padrões visíveis de “funil” (onde a dispersão se abre ou fecha nas pontas), o que corrobora a adequabilidade do pressuposto de variância residual homogênea (homocedasticidade). * Normalidade: O gráfico Q-Q Normal apresenta uma aderência notável dos resíduos à linha reta teórica de \(45^{\circ}\). Embora ocorram ligeiras oscilações nas caudas extremas (outliers leves), não há desvios severos ou sistemáticos da normalidade, legitimando as inferências e testes de hipóteses realizados.

8. Considerando ajuste, interpretação e diagnóstico, qual dos dois modelos você escolheria para explicar a progressão da diabetes? Justifique objetivamente.
Resposta: Eu escolheria o Modelo de Regressão Linear Múltipla. Esta escolha é solidamente fundamentada por três critérios: 1. Qualidade Estatística de Ajuste: O modelo múltiplo apresenta maior \(R^2_{ ext{ajustado}}\) (\(50,66\%\) contra \(34,24\%\)) e menor AIC (\(4795,99\) contra \(4914,04\)), indicando ganho prático substancial de informação explicativa. 2. Significância Estatística: O teste F de modelos aninhados (anova) rejeita a hipótese nula com p-valor \(< 2.2 imes 10^{-16}\), comprovando que a inclusão conjunta dos outros preditores traz um ganho estatisticamente significativo. 3. Realismo Clínico e Controle de Viés: O modelo múltiplo permite interpretar o efeito parcial de cada característica clínica (como o IMC) enquanto mantém as demais variáveis constantes, controlando possíveis fatores de confusão (como idade e pressão arterial) e oferecendo uma compreensão científica muito mais fidedigna e livre de viés da patologia em ambiente clínico real.