Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the astra-sites domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /home/statplace/public_html/site/wp-includes/functions.php on line 6114

Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the jetpack domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /home/statplace/public_html/site/wp-includes/functions.php on line 6114

Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the wpforms-lite domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /home/statplace/public_html/site/wp-includes/functions.php on line 6114

Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the wordpress-seo domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /home/statplace/public_html/site/wp-includes/functions.php on line 6114

Notice: A função _load_textdomain_just_in_time foi chamada incorretamente. O carregamento da tradução para o domínio astra foi ativado muito cedo. Isso geralmente é um indicador de que algum código no plugin ou tema está sendo executado muito cedo. As traduções devem ser carregadas na ação init ou mais tarde. Leia como Depurar o WordPress para mais informações. (Esta mensagem foi adicionada na versão 6.7.0.) in /home/statplace/public_html/site/wp-includes/functions.php on line 6114
Regressão Logística Multinomial - Statplace
artigo_jozi-34

Regressão Logística Multinomial

A Regressão Logística Multinomial é utilizada para verificar se há relação entre a variável resposta com uma ou mais variáveis independentes.

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.

Share the Post:
Compartilhar no facebook
Compartilhar no twitter
Compartilhar no linkedin

1 comentário em “Regressão Logística Multinomial”

Deixe um comentário

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

Related Posts

Mineração de Dados

A importância do pré-processamento para melhorar a eficiência e a facilidade do processo de mineração de dados A crescente quantidade

Read More