Tópico Especial – INTRODUÇÃO À ESTATÍSTICA PARA ESTUDOS URBANOS

Aula 3

Prof. Responsável: Prof. Dr. Júlio Celso Borello Vargas

August 22, 2023

Para acompanhar a aula, instalar o R e o Rstudio aqui ou usar o R na nuvem aqui.

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.

l_binaria = read.csv2('Logistica_binaria.csv', fileEncoding = "latin1")


pca = read.csv2("PCA.csv",fileEncoding = "latin1")

banco1 = WVS

banco2 = birthwt

#Para mais detalhes de cada banco, digitar ?'nome_do_banco'. Por exemplo:

#?birthwt

ANÁLISES MULTIVARIADAS

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:

1. Técnicas de DEPENDÊNCIA:

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:

2.Regressão Logística:

3.Análise Discriminante;

4.Análise Conjunta;

5.Regressão PLS;

6.Modelagem de Equações Estruturais (SEM).

2. Técnicas de INTERDEPENDÊNCIA:

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.

  1. Análise de Componentes Principais (PCA);

  2. Análise Fatorial (FA);

  3. Análise de Agrupamentos/aglomerados (“cluster”):

Regressão PLS…?

REGRESSÃO LINEAR

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.

REGRESSÃO LINEAR SIMPLES

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 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")

REGRESSÃO LINEAR MÚLTIPLA

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')

REGRESSÃO LINEAR: PRESSUPOSTOS E QUALIDADE DO AJUSTE

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.

summary(rlm)
## 
## 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
vif(rlm)
##             pca$Idade pca$Grau.de.instrução 
##              1.055485              1.055485
#Checando pressupostos
par(mfrow=c(2,2))

plot(rlm)

Escolha de variáveis/modelo

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:

Métodos de escolha/seleção para modelos:

REGRESSÕES LOGÍSTICAS:

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
#Checando a multicolinearidade
vif(rlb)
##      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
BIC(rlb, rlb2)
##      df      BIC
## rlb   4 93.81720
## rlb2  2 91.08103
anova(rlb2, rlb, test='Chisq')
## 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)
#Checando a multicolinearidade
m = lm(as.numeric(Raça) ~ Fuma + Idade, data = banco2)
vif(m)
##    Fuma   Idade 
## 1.00197 1.00197
#Comparando com um modelo "nulo"
rln = multinom(Raça ~ Fuma + Idade, data = banco2, model = TRUE)
## # weights:  12 (6 variable)
## initial  value 207.637723 
## iter  10 value 169.392042
## final  value 169.390936 
## converged
rln2 = multinom(Raça ~ 1, data = banco2, model = TRUE)
## # 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
anova(rln, rln2)
## 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