Prof. Responsável: Prof. Dr. Júlio Celso Borello Vargas
August 22, 2023
Serão utilizados os pacotes ggplot2, scatterplot3d, car, sjPlot, carData, MASS e nnet.
Use os comandos:
#install.packages('ggplot2')
#install.packages('scatterplot3d')
#install.packages('car')
#install.packages('sjPlot')
#install.packages('carData')
#install.packages('MASS')
#install.packages('nnet')
library(ggplot2)
library(scatterplot3d)
library(car)
library(sjPlot)
library(carData)
library(MASS)
library(nnet)Serão usados os bancos de dados “Logistica_binaria.csv”, “PCA.csv”, “WVS” e “birthwt”. Para usar os dois primeiros, coloque o arquivo na mesma pasta do projeto, ou, caso use o Posit.cloud, clique em “upload” e selecione o arquivo. O banco “WVS” vem do pacote carData e o banco “birthwt” vem do pacote MASS.
São técnicas estatísticas que simultaneamente analisam múltiplas medidas sobre indivíduos, casos ou objetos sob investigação (Hair et al. 2009). Podem ser classificadas em:
Quando uma variável ou conjunto de variáveis é identificada como DEPENDENTE - aquela a ser prevista ou explicada por outras variáveis, as INDEPENDENTES.
1.Regressão linear:
Simples – uma explicativa (X)
Múltipla – várias explicativas (X)
2.Regressão Logística:
Binária
Ordinal
Multinomial
3.Análise Discriminante;
4.Análise Conjunta;
5.Regressão PLS;
6.Modelagem de Equações Estruturais (SEM).
Quando as variáveis são analisadas simultaneamente para encontrar ESTRUTURAS SUBJACENTES (“variáveis latentes” ou “construtos”) a todo o conjunto de variáveis ou indivíduos/observações.
Análise de Componentes Principais (PCA);
Análise Fatorial (FA);
Análise de Agrupamentos/aglomerados (“cluster”):
Variáveis/atributos
Objetos/casos/observações
Regressão PLS…?
Nas ciências sociais e estudos urbanos em particular, existe a tendência a (tentar) explicar o resultado numérico de um fenômeno, processo ou objeto (quantidade, ocorrência, tamanho) por meio de uma função que relacione esses valores com os valores medidos de outro fenômeno, processo, objeto, etc.
A técnica mais comumente utilizada para modelar essa variação conjunta (“enquanto uma coisa varia a outra também”) é a regressão. A tradicional regressão linear, simples ou múltipla, é amplamente utilizada nas mais diversas áreas, e se apoia na técnica dos mínimos quadrados ordinários (OLS) para estimar seus coeficientes de regressão.
O método OLS é muito eficiente e versátil, mas apresenta resultados instáveis para tamanhos de amostra pequenos em relação ao número de variáveis independentes e quando existe alto grau de correlação entre as covariáveis - multicolineariedade – que aumenta a variância dos coeficientes estimados.
A regressão linear simples se aplica a casos onde há apenas duas variáveis de interesse que podem possuir uma relação de causa e efeito.
Podemos dizer que é um passo adiante em relação à correlação, pois, apesar de ainda ser uma análise bivariada (duas variáveis), exige que se defina “quem explica quem” ou “quem exerce efeito sobre quem”:
A variável \(X\) é a causa, sendo chamada de variável independente, antecedente, fator controlável, explicativa, explanatória, regressora, etc.
A variável \(Y\) é o efeito, sendo chamada de variável dependente, resposta, desfecho, etc.
A relação entre as variáveis é descrita através de uma FUNÇÃO \(Y = f(x)\) supostamente linear, sendo, portanto, passível de representação através de uma reta, com sua respectiva equação: \(Y = aX + b\)
Essa equação da geometria é reescrita para enfatizar os coeficientes \(\beta\) (beta) que são os números pelos quais os valores da variável \(X\) são multiplicados.
Na equação, cada observação \(Y\) pode ser descrita assim:
\(Y = \beta_0 + \beta_1X + \epsilon\)
\(\beta_0\) é a interseção no eixo y (valor de y para x = 0) = intercepto
\(\beta_1\) é o multiplicador da variável \(X\), que expressa a inclinação da reta (coeficiente angular) e descreve a variação de \(Y\) para cada unidade de \(X\).
\(\epsilon\) é o erro aleatório, com média \(0\) e variância \(\sigma^2\).
Nesse caso, a variável resposta é a quantidade de empregos durante a vida enquanto a variável explicativa é a idade. A função lm estabelece um modelo de RLS entre a variável resposta (Emprego) e a variável explicativa (Idade).
rls = lm(pca$Emprego ~ pca$Idade)
#Para ver os coeficientes, resíduos, etc
#summary(rls)
#A função geom_smooth serve para traçar uma linha
ggplot(rls, aes(x = pca$Idade , y = pca$Emprego)) + geom_point(shape=1, size=3) + geom_smooth(method = "lm", se = FALSE, col=4, lwd=1) + labs(x="Idade", y="Emprego")A regressão linear múltipla estima uma equação que expressa a relação entre uma variável dependente (\(Y\)) e duas ou mais variáveis independentes (\(X\)). Na equação, cada observação Y pode ser descrita assim:
\(Y = \beta_0 + \beta_1X + \beta_2X + \beta_3X + ... + \epsilon\)
rlm = lm(pca$Emprego ~ pca$Idade + pca$Grau.de.instrução)
#summary(rlm)
#Usando a biblioteca scatterplot3d, é possível criar um gráfico em 3 dimensões
rlm_grafico = scatterplot3d(pca$Emprego ~ pca$Idade + pca$Grau.de.instrução, xlab = 'Idade', ylab = 'Grau de Instrução', zlab = 'Emprego', box = FALSE, angle = 42, pch = 16)
rlm_grafico$plane3d(rlm, draw_polygon = TRUE, col = 'black')A qualidade do ajuste é medida pelo coeficiente de determinação \(R^2\) que equivale à proporção da variância dos valores de Y que pode ser atribuída à regressão com a variável \(X\). Ele varia de 0 a 1 (não tem negativo).
Na regressão múltipla, o \(R^2\) deve ser ajustado para considerar o número de variáveis independentes.
Faz-se um o teste F para confirmar a “inexistência de relação entre \(X\) e \(Y\)”, cuja hipótese nula será rejeitada quando o p-valor for menor que o “alfa” especificado.
TRADUZINDO: se \(p < 0,05\) podemos dizer com 95% de certeza que existe relação entre \(X\) e \(Y\).
A adequação do ajuste às suposições do modelo devem ser verificadas através da análise dos resíduos, que são a diferença entre os valor observados e o valores previstos pela equação de regressão estimada.
“Resumidamente”, os resíduos devem ter distribuição normal com média zero, variância constante e serem independentes dos \(Y\) observados.
TRADUZINDO: olhe para os gráficos de resíduos e veja se eles “se comportam bem”.
O mais interessante, porém, são os coeficientes de regressão (os “beta”) que descrevem o tamanho e a direção do efeito de cada preditor \(X\) sobre a variável de resposta \(Y\).
Tanto na regressão linear simples como na múltipla, a significância de cada um dos coeficientes é atestada por testes (T e F geralmente), cujo p-valor deve ser menor que o \(\alpha\) (5%, por exemplo).
TRADUZINDO: podemos aceitar com 95% de certeza que aquele coeficiente estimado para o preditor \(X_i\).
Finalmente, podemos observar o VIF (fator de inflação de variância) que indica quanta variância de um coeficiente foi “inflada” devido às correlações entre as preditoras no modelo.
Temos como “regra de bolso” que VIF acima de 5 ou 10 (a depender do autor) indica alta multicolinearidade.
##
## Call:
## lm(formula = pca$Emprego ~ pca$Idade + pca$Grau.de.instrução)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.2042 -1.3042 0.2229 1.6053 3.4551
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -13.40912 3.27704 -4.092 0.000347 ***
## pca$Idade 0.69968 0.07961 8.789 2.1e-09 ***
## pca$Grau.de.instrução -0.26465 0.17273 -1.532 0.137116
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.931 on 27 degrees of freedom
## Multiple R-squared: 0.7416, Adjusted R-squared: 0.7225
## F-statistic: 38.75 on 2 and 27 DF, p-value: 1.164e-08
## pca$Idade pca$Grau.de.instrução
## 1.055485 1.055485
Ao escolher um certo modelo com um determinado grupo de variáveis, temos que ter em mente que o que caracteriza um “bom modelo” é, em primeiro lugar, sua capacidade de predição/explicação, e, em segundo lugar, sua simplicidade, que podemos entender como um modelo bem “ajustado”. Um “overfit” se dá quando o modelo contém mais parâmetros que possam ser justificados pelos dados disponíveis, assim como um “underfit” acontece quando o modelo não capta a estrutura dos dados (um modelo linear para dados não-lineares, por exemplo).
Métodos de escolha/seleção para variáveis:
Verificar se elas são significativas (usando a função summary, por exemplo).
Neste caso, há algoritmos que selecionam essas variáveis automaticamente conforme o p-valor delas é significativo. São eles: backward e forward. O primeiro parte de um modelo com todas variáveis e vai retirando-as, enquanto o segundo começa sem nenhum e vai adicionando-as. Há também o método bi-direcional, que mistura os dois.
Usar métodos mais avançados (como LASSO).
Métodos de escolha/seleção para modelos:
Para modelos de regressão linear, podemos usar o \(R^2\).
Para modelos de regressão logística, podemos usar medidas como AIC, BIC ou HQ. Ao comparar as medidas de modelos diferentes, consideramos a menor delas como um critério para escolher o seu respectivo modelo.
Validação cruzada
Regressão logística binária
Modela a relação entre preditores e uma resposta que tem dois resultados, como aprovado ou reprovado. No Minitab, selecione Estat > Regressão > Regressão Logística Binária > Ajuste de Modelo Logístico Binário.
#Manipulando o banco para transformar as respostas binárias em fatores
l_binaria$Compra[l_binaria$Compra == 0] = "Não"
l_binaria$Compra[l_binaria$Compra == 1] = "Sim"
l_binaria$Compra = as.factor(l_binaria$Compra)
rlb = glm(Compra ~ Renda + Crianças + ViuAnúncio, family = 'binomial'(link = 'logit'), data = l_binaria)
#Para visualizar os p-valores
#Anova(rlb, type = 'II', test = "Wald")
tab_model(rlb, show.stat = TRUE)| Compra | ||||
|---|---|---|---|---|
| Predictors | Odds Ratios | CI | Statistic | p |
| (Intercept) | 0.05 | 0.01 – 0.26 | -3.21 | 0.001 |
| Renda | 1.01 | 0.98 – 1.05 | 0.71 | 0.481 |
| Crianças [Sim] | 4.19 | 0.92 – 30.65 | 1.67 | 0.094 |
| ViuAnúncio [Sim] | 2.81 | 0.93 – 9.01 | 1.81 | 0.070 |
| Observations | 71 | |||
| R2 Tjur | 0.154 | |||
## Renda Crianças ViuAnúncio
## 1.145490 1.119152 1.027483
#Comparando 2 modelos
rlb2 = glm(Compra ~ ViuAnúncio, family = 'binomial'(link = 'logit'), data = l_binaria)
AIC(rlb, rlb2)## df AIC
## rlb 4 84.76648
## rlb2 2 86.55567
## df BIC
## rlb 4 93.81720
## rlb2 2 91.08103
## Analysis of Deviance Table
##
## Model 1: Compra ~ ViuAnúncio
## Model 2: Compra ~ Renda + Crianças + ViuAnúncio
## Resid. Df Resid. Dev Df Deviance Pr(>Chi)
## 1 69 82.556
## 2 67 76.766 2 5.7892 0.05532 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Regressão logística ordinal
Modela a relação entre preditores e uma resposta que tem três ou mais resultados que têm uma ordem, como baixo, médio e alto. No Minitab, selecione Estat > Regressão > Regressão Logística Ordinal.
#Manipulando a variável "poverty" para ordenar os fatores
banco1$poverty = factor(banco1$poverty, levels = c('Too Little', 'About Right', 'Too Much'), ordered = TRUE)
rlo = polr(poverty ~ religion + age + gender, data = banco1, Hess = TRUE)
#Para verificar os p-valores
#Anova(rlo, type = "II", test = "Wald")
#exp(cbind(OR = coef(rlo), confint(rlo)))
tab_model(rlo, show.stat = TRUE)| poverty | ||||
|---|---|---|---|---|
| Predictors | Odds Ratios | CI | Statistic | p |
| Too Little|About Right | 1.88 | 1.55 – 2.28 | 6.44 | <0.001 |
| About Right|Too Much | 10.67 | 8.71 – 13.08 | 22.84 | <0.001 |
| religion [yes] | 0.95 | 0.82 – 1.09 | -0.75 | 0.453 |
| age | 1.01 | 1.01 – 1.02 | 8.62 | <0.001 |
| gender [male] | 1.16 | 1.05 – 1.29 | 2.88 | 0.004 |
| Observations | 5381 | |||
| R2 Nagelkerke | 0.018 | |||
Regressão logística nominal / multinomial
Modela a relação entre preditores e uma resposta que tem três ou mais resultados que não têm uma ordem, são nomes, alternativas.
#Traduzindo as variáveis
names(banco2)[2] = "Idade"
names(banco2)[4] = "Raça"
names(banco2)[5] = "Fuma"
#Manipulando as variáveis para transformá-las em fatores
banco2$Raça[banco2$Raça == 1] = "Branca"
banco2$Raça[banco2$Raça == 2] = "Negra"
banco2$Raça[banco2$Raça == 3] = "Outras"
banco2$Raça = as.factor(banco2$Raça)
banco2$Fuma[banco2$Fuma == 0] = "Não"
banco2$Fuma[banco2$Fuma == 1] = "Sim"
banco2$Fuma = as.factor(banco2$Fuma)## Fuma Idade
## 1.00197 1.00197
## # weights: 12 (6 variable)
## initial value 207.637723
## iter 10 value 169.392042
## final value 169.390936
## converged
## # weights: 6 (2 variable)
## initial value 207.637723
## iter 10 value 186.087844
## iter 10 value 186.087844
## iter 10 value 186.087844
## final value 186.087844
## converged
## Likelihood ratio tests of Multinomial Models
##
## Response: Raça
## Model Resid. df Resid. Dev Test Df LR stat. Pr(Chi)
## 1 1 376 372.1757
## 2 Fuma + Idade 372 338.7819 1 vs 2 4 33.39382 9.920249e-07
#exp(coef(rln))
#exp(confint(rln))
#Anova(rln, type="II", test="Wald")
tab_model(rln, show.stat = TRUE)| Raça | |||||
|---|---|---|---|---|---|
| Predictors | Odds Ratios | CI | Statistic | p | Response |
| (Intercept) | 5.65 | 0.60 – 53.44 | 1.52 | 0.130 | Negra |
| Fuma [Sim] | 0.46 | 0.19 – 1.16 | -1.65 | 0.100 | Negra |
| Idade | 0.89 | 0.81 – 0.98 | -2.41 | 0.017 | Negra |
| (Intercept) | 9.94 | 1.89 – 52.16 | 2.73 | 0.007 | Outras |
| Fuma [Sim] | 0.17 | 0.08 – 0.36 | -4.61 | <0.001 | Outras |
| Idade | 0.92 | 0.86 – 0.98 | -2.54 | 0.012 | Outras |
| Observations | 189 | ||||
| R2 / R2 adjusted | 0.090 / 0.084 | ||||