Análise Multivariada - LDA

Linear Discriminant Analysis

Vinicius Rogério da Silva

2022-01-04

Introdução

O presente trabalho visa o entendimento e aplicação do método LDA - Linear Discriminant Analysis, tendo como base um exemplo apresentado no livro “Análise Multivariada”, de Hair.

Método LDA

O método LDA - Linear Discriminant Analysis, ou simplesmente Análise Discriminante, é empregado quando se deseja uma forma de classificar o conjunto de dados com base nos grupos presentes na variável resposta.

Ele é considerado um método de classificação, além da redução de dimensionalidade, estando no páreo de outros métodos como Árvores de Decisão, a depender da aplicação desejada. Porém, possui a vantagem de ser simples e ainda assim oferecer resultados robustos em termos de classificação. O método se mostra uma alternativa inicial, um ponto de partida antes da aplicação de outros métodos de classificação mais complexos.

Conjunto de dados

O conjunto de dados HBAT foi utilizado pelo autor e também nesse presente trabalho. Ele visa a classificação das empresas com base na região em que estão localizadas. O grupo 0 se refere às empresas nos USA ou América do Norte. Já o grupo 1 é para as demais empresas, que estão fora dessa região.

Através dos dados das empresas (variáveis independentes), procura-se entender se há diferenças significativas entre os tipos de clientes das duas regiões.

Aplicação do método

A partir daqui, damos início ao tratamento dos dados e à aplicação do método LDA.

Leitura dos dados

Variável dependente (Região): X4 Variáveis independentes: X6 a X18

dados=read.csv2("hbat.csv")

dados$X4=as.factor(dados$X4)

table(dados$X4)

 0  1 
39 61 

Realizando o particionamento dos dados, utilizando a proporção de 60 observações para treino e 40 para teste:

set.seed(201910)
particao=sample(1:100,40)
treino=dados[-particao,-1]
teste=dados[particao,-1]

table(treino$X4)

 0  1 
22 38 

A coluna “ID” foi removida para não influenciar na análise, visto que é apenas um identificador para cada uma das 100 observações.

Além disso, foi escolhida uma seed para garantir que a mesma partição seja obtida em todas as rodadas de aplicação do método.

Como observado, ao final obtivemos 22 observações no grupo referente ao 0 e 38 no grupo referente a 1. Com isso, temos respeitado o mínimo de 20 observações abordado na bibliografia, o que faz com que o método possa ser aplicado sem problemas para a comparação dos dois grupos.

Sobre as suposições do método

No que diz respeito às suposições necessárias para a aplicação do método LDA, podemos nos basear na bibliografia. O texto de apoio afirma que as suposições para esse conjunto de dados foram suficientemente atendidas.

A saber: a diferença nas matrizes de covariância para os dois grupos mostrou significância de 0.011, que é um nível aceitável para o teste considerado (boxM).

Assim, a estimação do modelo discriminante pode ser feita sem preocupações.

Aplicação do LDA

O autor utiliza o LDA-stepwise. Nós não usaremos este método. Vamos utilizar todas as variáveis no método LDA, segundo as orientações da tarefa.

lda_result=lda(X4~.,treino)
lda_result
Call:
lda(X4 ~ ., data = treino)

Prior probabilities of groups:
        0         1 
0.3666667 0.6333333 

Group means:
        X1        X2         X3        X5       X6       X7       X8       X9
0 2.318182 0.5000000 0.09090909 0.6363636 8.781818 3.604545 5.895455 5.813636
1 1.868421 0.3684211 0.76315789 0.3684211 7.184211 3.760526 5.013158 5.663158
       X10      X11      X12      X13      X14      X15      X16      X17
0 3.818182 6.845455 4.581818 5.859091 6.304545 4.781818 4.404545 3.786364
1 4.318421 5.389474 5.557895 7.642105 5.978947 5.110526 4.497368 5.389474
       X18      X19      X20      X21      X22 X23
0 3.968182 7.104545 7.190909 7.777273 61.64545 0.5
1 4.078947 7.013158 7.073684 7.697368 58.49474 0.5

Coefficients of linear discriminants:
             LD1
X1  -0.669991340
X2  -0.202025334
X3   2.414912383
X5   2.314469611
X6  -0.561289543
X7  -2.393838105
X8  -0.267283043
X9   0.347712811
X10  0.004189063
X11 -0.641601868
X12  1.940086952
X13  0.304285542
X14  0.526908472
X15  0.338154352
X16  0.575081000
X17 -0.122190666
X18 -0.313722693
X19 -1.959001194
X20 -0.105066430
X21  0.279062201
X22  0.118917263
X23  0.985643099

Acima, podemos visualizar as médias dos grupos (regiões 0 e 1) para cada uma das variáveis explicativas.

As probabilidades a priori são simplesmente as proporções de cada grupo dentro do conjunto de dados de treino (22/60 e 38/60, respectivamente), considerando a partição obtida.

Por último, temos cada um dos coeficientes da função discriminante obtida a princípio. É válido lembrar que não foi utilizada a estratégia stepwise usada pelo autor. Assim sendo, ficamos com uma função discriminante muito grande, com 22 variáveis/coeficientes.

Agora, vamos visualizar um plot com a discriminação dos dois grupos:

plot(lda_result)

Nesse modelo discriminante com todas as variáveis, podemos perceber uma boa diferenciação entre os grupos da Região 0 e Região 1. Ou seja, é esperado que ele tenha um bom desempenho quando aplicado para classificar cada uma das regiões, o que será feito mais adiante.

No entanto, só teremos uma real medida do quão bom é o desempenho quando aplicarmos o modelo na partição de teste que foi obtida anteriormente.

Avaliando o modelo

Agora podemos avaliar o desempenho do modelo obtido, com base na partição de teste.

Uma forma pela qual podemos avaliar o modelo quanto à classificação/descriminação é através da medida de acurácia, que nos dá a proporção de observações que foram corretamente classificadas pelo modelo.

Para fazê-lo, é necessário obter a matriz de confusão.

predito=predict(lda_result,teste)

cm=confusionMatrix(predito$class,teste$X4)

cm
Confusion Matrix and Statistics

          Reference
Prediction  0  1
         0 14  5
         1  3 18
                                          
               Accuracy : 0.8             
                 95% CI : (0.6435, 0.9095)
    No Information Rate : 0.575           
    P-Value [Acc > NIR] : 0.002412        
                                          
                  Kappa : 0.597           
                                          
 Mcnemar's Test P-Value : 0.723674        
                                          
            Sensitivity : 0.8235          
            Specificity : 0.7826          
         Pos Pred Value : 0.7368          
         Neg Pred Value : 0.8571          
             Prevalence : 0.4250          
         Detection Rate : 0.3500          
   Detection Prevalence : 0.4750          
      Balanced Accuracy : 0.8031          
                                          
       'Positive' Class : 0               
                                          

Acima, além de outras medidas que também poderiam ser utilizadas, focamos na medida de acurácia do modelo, que apresentou valor 0.8. Ou seja, 80% das observações na partição de teste foram corretamente classificadas, o que pode ser considerado satisfatório.

Pela matriz de confusão, vemos que 3 observações eram do grupo 0 e foram classificadas como sendo do grupo 1, e 5 observações que eram do grupo 1 foram classificadas como sendo do grupo 0. As demais observações, referentes à diagonal da matriz de confusão, foram corretamente discriminadas.

Assim sendo, em 80% dos casos o modelo obteve sucesso em discriminar corretamente os dois grupos presentes no conjunto de dados, referentes às duas regiões.

Comparação

Para termos um parâmetro de comparação do nosso modelo, vamos verificar o desempenho do modelo empregado pelo autor, tendo em mente que os resultados obtidos aqui podem ser levemente diferentes, graças às partições de treino e teste que não são as mesmas.

Modelo do autor: variáveis X11, X13 e X17

lda_autor=lda(X4~X11+X13+X17,treino)
lda_autor
Call:
lda(X4 ~ X11 + X13 + X17, data = treino)

Prior probabilities of groups:
        0         1 
0.3666667 0.6333333 

Group means:
       X11      X13      X17
0 6.845455 5.859091 3.786364
1 5.389474 7.642105 5.389474

Coefficients of linear discriminants:
           LD1
X11 -0.4186248
X13  0.2532130
X17  0.6734618

Duas observações podem ser feitas: em primeiro lugar, a probabilidade a priori dos grupos se manteve a mesma porque trata-se da mesma partição de treino utilizada anteriormente. Além disso, podemos perceber que as médias dos grupos para essas variáveis são mais distantes entre si, o que não se verificava nas médias dos grupos no modelo obtido inicialmente.

plot(lda_autor)

Através do plot, temos a sensação de que os grupos “se misturam”, ou seja, de que a separação não é tão heterogênea quanto aquela que foi observada no modelo completo.

Para entender o desempenho, vamos testar o modelo na partição de teste e obter sua acurácia:

predito_autor=predict(lda_autor,teste)

cm_autor=confusionMatrix(predito_autor$class,teste$X4)

cm_autor
Confusion Matrix and Statistics

          Reference
Prediction  0  1
         0 15  4
         1  2 19
                                          
               Accuracy : 0.85            
                 95% CI : (0.7016, 0.9429)
    No Information Rate : 0.575           
    P-Value [Acc > NIR] : 0.0001956       
                                          
                  Kappa : 0.6977          
                                          
 Mcnemar's Test P-Value : 0.6830914       
                                          
            Sensitivity : 0.8824          
            Specificity : 0.8261          
         Pos Pred Value : 0.7895          
         Neg Pred Value : 0.9048          
             Prevalence : 0.4250          
         Detection Rate : 0.3750          
   Detection Prevalence : 0.4750          
      Balanced Accuracy : 0.8542          
                                          
       'Positive' Class : 0               
                                          

A acurácia do modelo do autor foi de 0.85, superior ao nosso modelo obtido anteriormente Ou seja, 85% das observações na partição de teste foram corretamente classificadas, o é satisfatório e melhor do que o resultado anterior.

Pela matriz de confusão, vemos que 2 observações eram do grupo 0 e foram classificadas como sendo do grupo 1, e 4 observações que eram do grupo 1 foram classificadas como sendo do grupo 0. As demais observações, referentes à diagonal da matriz de confusão, foram corretamente discriminadas.

Assim sendo, em 85% dos casos o modelo obteve sucesso em discriminar corretamente os dois grupos presentes no conjunto de dados, referentes às duas regiões.

Conclusão

No presente trabalho, o método LDA foi aplicado para a classificação de empresas quanto ao pertencimento a duas regiões: USA/América do Norte ou fora dela.

Através dos resultados obtidos, concluímos que o modelo com todas as variáveis possui menor acurácia do que aquele proposto pelo autor, que foi obtido pelo método stepwise e considera apenas as variáveis independentes X11, X13 e X17. Ou seja, o modelo do autor se mostrou mais eficaz no que diz respeito à discriminação dos dois grupos, com acurácia de 85%.

Assim sendo, a LDA se mostra um bom método para obtenção de modelos de classificação, visto que sua acurácia foi satisfatória. Seu uso, portanto, extrapola a redução de dimensionalidade e possibilita a utilização nas mais diversas aplicações que envolvam classificação.