Análise de Regressão é utilizada para verificar se há relação entre a variável resposta – também chamada de variável dependente – e uma ou mais variáveis independentes.

A Regressão mais conhecida é a regressão linear, mais simples e amplamente utilizada. Para esse método, a variável resposta precisa ser quantitativa contínua. E a variável resposta deve ter uma relação linear com as variáveis independentes.

Temos também a Regressão Logística que é usada quando a variável resposta é categórica binária, ou seja, com apenas duas categorias.

Regressão Logística Multinomial

Regressão Logística Multinomial é similar à Regressão Logística. A diferença é que, para utilizá-la, a variável resposta deve ser qualitativa nominal com três ou mais categorias. Entre as categorias deve-se escolher uma de referência, assim como na regressão logística binária, para conseguir compará-la às outras categorias. O recomendado é que as categorias sejam 0, 1, 2, …, k, sendo k a quantidade de categorias da variável resposta menos um. Assim, a categoria 0 será a de referência.

Para previsão da variável resposta é utilizada a fórmula:

fórmula para previsão da variável resposta numa regressão logística multinomial

Exemplos da regressão logística no cotidiano

  • Pode ser usada para prever qual melhor plano de saúde, odontológico etc. dentre três ou mais planos;
  • Previsão de faixa etária;
  • Mostrar os fatores que influenciam na escolha do modo de transporte por estudantes universitários, idosos, etc.;
  • Análise de sentimentos.

Aplicação (Script)

O banco de dados contém informações de 167 eleitores que votaram nas eleições de 2016 nos Estados Unidos. O banco traz as seguintes informações: em quem o eleitor votou (Donald Trump – 0, Hillary Clinton – 1 ou Outros – 2), qual a sua etnia (não-caucasiano – 0 ou caucasiano – 1), qual a sua confiança na política (avaliada em uma escala de 1 a 10) e o resultado de uma escala sobre liberalismo econômico (também, de 1 a 10). Vamos avaliar quais desses fatores influenciam na decisão de voto.

O pacote utilizado é o VGAM.

if(!require(tidyverse)){install.packages('tidyverse'); require(tidyverse)} ## Manipulação de dados
if(!require(VGAM)){install.packages('VGAM'); require(VGAM)} ## Pacote com a função ara criar o modelo

Modelo

dados <- readxl::read_xlsx('RegressãoMultinomial.xlsx')
dados %>% DT::datatable()
VotoEtniaEscala_confLib_econ
12133
21127
30171
40195
51126
modelo <- VGAM::vglm(formula = Voto ~ ., 
                      family = multinomial, 
                      data = dados)

t0 <- summary(modelo)@coef3
O.R. <- exp(t0[,1])
L.I <- exp(confintvglm(modelo)[,1])
L.S <- exp(confintvglm(modelo)[,2])
I.C.95 <- c()
for(i in 1:length(O.R.)) {
  I.C.95[i] <- paste('[', format(round(L.I[i], 2), nsmall=2),
                     '; ', format(round(L.S[i], 2), nsmall=2),
                     ']', sep='')}
t.final <- data.frame(round(O.R.,2), I.C.95, round(t0[,4], 3))
colnames(t.final) <- c('O.R.', 'I.C. - 95% (O.R.)', 'Valor-p')
rownames(t.final) <- c('Intercepto - 1',
                       'Intercepto - 2',
                       'Etnia - 1',
                       'Etnia - 2',
                       'Escala de confiança - 1',
                       'Escala de confiança - 2',
                       'Liberalismo Econômico - 1',
                       'Liberalismo Econômico - 2')
t.final %>% DT::datatable()
O.R.I.C. – 95% (O.R.)Valor-p
Intercepto – 11.2[0.33; 4.37]0.787
Intercepto – 20.05[0.01; 0.27]0
Etnia – 14.78[1.81; 12.59]0.002
Etnia – 21.47[0.58; 3.75]0.421
Escala de confiança – 11.12[0.96; 1.30]0.163
Escala de confiança – 21.14[0.96; 1.34]0.129
Liberalismo econômico – 10.75[0.62; 0.90]0.003
Liberalismo econômico – 21.51[1.24; 1.86]0

Coeficiente de Determinação

### Forma 1

prob <- predict(modelo, type = "response")
pred <- apply(prob, MARGIN = 1, FUN = which.max)
pred <- factor(pred, labels = levels(as.factor(dados$Voto)))

R2 <- cbind(dados$Voto, pred) %>% 
    Hmisc::rcorr(type = 'spearman')

print(paste0(round((R2$r[2,1]^2)*100, 2), '%'))
## [1] "17.09%"

Acurácia, Sensibilidade e Especificidade

mod.confusion <- caret::confusionMatrix(pred, as.factor(dados$Voto))
mod.accuracy <- round(as.numeric(mod.confusion$overall[1]),3)
mod.sensitivity <- round(as.numeric(mod.confusion$byClass[,1]),3)
mod.specificity <- round(as.numeric(mod.confusion$byClass[,2]),3)

tabela <- data.frame(Acurácia = mod.accuracy,
           Sensibilidade = mod.sensitivity,
           Especificidade = mod.specificity)

rownames(tabela) <- c('Donald Trump', 'Hillary Clinton', 'Outros')

tabela %>% DT::datatable()
AcuráciaSensibilidadeEspecificidade
Donald Trump0.6650.8130.717
Hillary Clinton0.6650.7450.812
Outros0.6650.2430.931

Muitas pessoas optam por transformar uma variável com três ou mais categorias em uma variável com duas categorias por não saberem que tem a possibilidade de fazer a Regressão Logística Multinomial.

0 respostas

Deixe uma resposta

Quer participar dessa discussão?
Sinta-se livre para contribuir!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *