Disciplina: Estatística e Probabilidade para Machine
Learning
Aluno: Victor
Treinamento PAVIC-LAB • Módulo 02
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.
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
## [1] 442 11
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
## 2.5 % 97.5 %
## (Intercept) 146.2894 157.9776
## bmi 826.5699 1072.3006
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
## [1] -1.308982e-15
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)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)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
## 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
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
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)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)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)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")| 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 |
## 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
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.