Primeiro, carregamos o conjunto de dados do arquivo Excel e preparamos a variável sexo como um fator, que é o tipo de dado correto em R para uma variável categórica.
## # A tibble: 6 × 7
## id turma sexo altura peso idade n_irmaos
## <dbl> <chr> <fct> <dbl> <dbl> <dbl> <dbl>
## 1 1 A 1 166 58 245 2
## 2 2 C 1 169 61 237 1
## 3 3 C 1 155 60 255 1
## 4 4 C 0 172 83 284 0
## 5 5 C 1 162 62 310 1
## 6 6 B 1 160 48 227 3
O bjetivo é modelar a variável quantitativa peso em função das outras covariáveis.
Começamos com um modelo linear completo e usamos o método ‘step()’ (baseado no critério AIC) para selecionar o modelo mais parcimonioso e com melhor ajuste.No nosso caso, o resultado do comando step() foi o próprio modelo completo. Como todos os p-valores são menores que o nível de significância padrão de 0.05, confirmamos a decisão do step().
ml_peso <- lm(peso ~ altura + idade + sexo, data = dados)
ml_peso <- step(ml_peso, direction = "backward", trace = 0)
summary(ml_peso)##
## Call:
## lm(formula = peso ~ altura + idade + sexo, data = dados)
##
## Residuals:
## Min 1Q Median 3Q Max
## -15.514 -6.746 -2.165 3.992 38.649
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -41.44286 32.89815 -1.260 0.21102
## altura 0.58778 0.18361 3.201 0.00189 **
## idade 0.05286 0.01992 2.653 0.00942 **
## sexo1 -7.19632 3.39600 -2.119 0.03684 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 10.5 on 90 degrees of freedom
## Multiple R-squared: 0.4318, Adjusted R-squared: 0.4128
## F-statistic: 22.8 on 3 and 90 DF, p-value: 4.57e-11
par(mfrow=c(1, 3))
plot(dados$altura, dados$peso, main = "Peso vs. Altura", xlab = "Altura", ylab = "Peso", pch = 19)
abline(lm(peso ~ altura, data = dados), col = "red", lwd = 2)
plot(dados$idade, dados$peso, main = "Peso vs. Idade", xlab = "Idade", ylab = "Peso", pch = 19)
abline(lm(peso ~ idade, data = dados), col = "red", lwd = 2)
boxplot(peso ~ sexo, data = dados, main = "Peso vs. Sexo", xlab = "Sexo", ylab = "Peso")Com base na análise de significância, o modelo final escolhido utiliza altura e peso como preditores.
mlogit_sexo <- glm(sexo ~ altura + peso,
data = dados,
family = binomial(link = "logit"))
summary(mlogit_sexo)##
## Call:
## glm(formula = sexo ~ altura + peso, family = binomial(link = "logit"),
## data = dados)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 81.38394 18.84766 4.318 1.57e-05 ***
## altura -0.43835 0.10462 -4.190 2.79e-05 ***
## peso -0.09863 0.04180 -2.360 0.0183 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 129.246 on 93 degrees of freedom
## Residual deviance: 41.085 on 91 degrees of freedom
## AIC: 47.085
##
## Number of Fisher Scoring iterations: 7
Analisamos o resumo do modelo e calculamos a Razão de Chances (Odds Ratio) para facilitar a interpretação dos coeficientes.
razao_chances <- exp(coef(mlogit_sexo))
knitr::kable(razao_chances, col.names = c("Odds Ratio"), caption = "Razão de Chances para o Modelo Logístico")| Odds Ratio | |
|---|---|
| (Intercept) | 2.211027e+35 |
| altura | 6.451015e-01 |
| peso | 9.060821e-01 |
dados$sexo_num <- as.numeric(dados$sexo) - 1
p1 <- ggplot(dados, aes(x = altura, y = sexo_num)) +
geom_point(position = position_jitter(width=0, height=0.05), alpha=0.5) +
stat_smooth(method = "glm", method.args = list(family = "binomial"), se = FALSE) +
labs(title = "Probabilidade de Sexo vs. Altura", y = "Probabilidade (Sexo)")
p2 <- ggplot(dados, aes(x = peso, y = sexo_num)) +
geom_point(position = position_jitter(width=0, height=0.05), alpha=0.5) +
stat_smooth(method = "glm", method.args = list(family = "binomial"), se = FALSE) +
labs(title = "Probabilidade de Sexo vs. Peso", y = "Probabilidade (Sexo)")
p1Para entender melhor o modelo, criamos uma tabela que mostra como a probabilidade estimada e o logit mudam para diferentes valores de altura, mantendo o peso fixo na média.
alturas_simuladas <- seq(min(dados$altura), max(dados$altura), by = 1)
peso_medio <- mean(dados$peso)
dados_para_predicao <- data.frame(altura = alturas_simuladas, peso = peso_medio)
prob_estimada <- predict(mlogit_sexo, newdata = dados_para_predicao, type = "response")
resultado <- data.frame(
Altura_Simulada = alturas_simuladas,
Probabilidade_Estimada = prob_estimada
)
resultado$Probabilidade_Complementar <- 1 - resultado$Probabilidade_Estimada
resultado$Log_Razao_de_Chances <- log(resultado$Probabilidade_Estimada / resultado$Probabilidade_Complementar)
knitr::kable(head(resultado), caption = "Início da Tabela de Predição")| Altura_Simulada | Probabilidade_Estimada | Probabilidade_Complementar | Log_Razao_de_Chances |
|---|---|---|---|
| 150 | 0.9998769 | 0.0001231 | 9.002372 |
| 151 | 0.9998092 | 0.0001908 | 8.564024 |
| 152 | 0.9997042 | 0.0002958 | 8.125677 |
| 153 | 0.9995416 | 0.0004584 | 7.687329 |
| 154 | 0.9992896 | 0.0007104 | 7.248981 |
| 155 | 0.9988992 | 0.0011008 | 6.810633 |
| Altura_Simulada | Probabilidade_Estimada | Probabilidade_Complementar | Log_Razao_de_Chances | |
|---|---|---|---|---|
| 39 | 188 | 0.0004735 | 0.9995265 | -7.654840 |
| 40 | 189 | 0.0003055 | 0.9996945 | -8.093188 |
| 41 | 190 | 0.0001971 | 0.9998029 | -8.531536 |
| 42 | 191 | 0.0001272 | 0.9998728 | -8.969883 |
| 43 | 192 | 0.0000820 | 0.9999180 | -9.408231 |
| 44 | 193 | 0.0000529 | 0.9999471 | -9.846579 |
Este trabalho realizou uma análise estatística abrangente sobre um
conjunto de dados de 94 alunos, com o duplo objetivo de modelar tanto
uma variável quantitativa (peso) quanto uma variável
categórica binária (sexo), utilizando as ferramentas de
regressão apropriadas para cada tarefa.
A análise para a predição do peso, através da
Regressão Linear, revelou que as variáveis
altura, idade e sexo são, em
conjunto, preditores estatisticamente significativos. O modelo final se
mostrou robusto, explicando aproximadamente 41.3% da variabilidade no
peso dos alunos e satisfazendo todas as suposições fundamentais,
conforme validado pela análise de resíduos. Isso confirma que o modelo
linear é uma ferramenta eficaz e confiável para estimar valores
numéricos.
Por outro lado, para a tarefa de classificação do
sexo, a Regressão Logística foi a
abordagem correta e se provou muito poderosa. O modelo final, utilizando
altura e peso como preditores, demonstrou uma
alta capacidade de discriminação entre as categorias. A análise gráfica
e dos Odds Ratios deixou claro o forte impacto, principalmente da
altura, na probabilidade de um indivíduo ser de um determinado sexo. Os
diagnósticos do modelo logístico também foram positivos, validando sua
adequação.
Finalmente, este estudo respondeu à questão sobre qual modelo seria
“melhor”. A conclusão é que a escolha do modelo não se baseia em qual é
superior em um sentido abstrato, mas sim em qual ferramenta é apropriada
para a pergunta de pesquisa. * Para responder “Quanto?”
(prever peso), o modelo linear é o correto. * Para
responder “Qual categoria?” (classificar
sexo), o modelo logístico é o correto.
Em suma, a análise demonstrou com sucesso a aplicação de dois modelos estatísticos fundamentais, revelou as relações significativas entre as características físicas dos alunos e reforçou o princípio de que a escolha da técnica analítica deve ser sempre guiada pela natureza dos dados e pelos objetivos da investigação.