Analisis

Analisis Bayesian dengan menggunakan Kumpulan data United States Congressional Voting 1984 (HouseVotes84) diambil dari UCI Repository Of Machine Learning Database melalui mlbench package. Data meliputi 435 observasi dengan 17 variabel. 1 variabel class (demokrat, republik) dan 16 suara (ya, tidak) pada topik yang berbeda.

Persiapan Data

Untuk langkah pertama dalam proses analisis United Stats Congressional voting 1984 menggunakan bayesian dengan mengimport library

library(e1071)
## Warning: package 'e1071' was built under R version 4.0.4
library(mlbench)
## Warning: package 'mlbench' was built under R version 4.0.4
library(ggplot2)
library(caret)
## Warning: package 'caret' was built under R version 4.0.4
## Loading required package: lattice
library(gmodels)
## Warning: package 'gmodels' was built under R version 4.0.4

Selanjutnya mengambil data HouseVotes84

data(HouseVotes84)

Menampilkan data dari HouseVotes84

str(HouseVotes84)
## 'data.frame':    435 obs. of  17 variables:
##  $ Class: Factor w/ 2 levels "democrat","republican": 2 2 1 1 1 1 1 2 2 1 ...
##  $ V1   : Factor w/ 2 levels "n","y": 1 1 NA 1 2 1 1 1 1 2 ...
##  $ V2   : Factor w/ 2 levels "n","y": 2 2 2 2 2 2 2 2 2 2 ...
##  $ V3   : Factor w/ 2 levels "n","y": 1 1 2 2 2 2 1 1 1 2 ...
##  $ V4   : Factor w/ 2 levels "n","y": 2 2 NA 1 1 1 2 2 2 1 ...
##  $ V5   : Factor w/ 2 levels "n","y": 2 2 2 NA 2 2 2 2 2 1 ...
##  $ V6   : Factor w/ 2 levels "n","y": 2 2 2 2 2 2 2 2 2 1 ...
##  $ V7   : Factor w/ 2 levels "n","y": 1 1 1 1 1 1 1 1 1 2 ...
##  $ V8   : Factor w/ 2 levels "n","y": 1 1 1 1 1 1 1 1 1 2 ...
##  $ V9   : Factor w/ 2 levels "n","y": 1 1 1 1 1 1 1 1 1 2 ...
##  $ V10  : Factor w/ 2 levels "n","y": 2 1 1 1 1 1 1 1 1 1 ...
##  $ V11  : Factor w/ 2 levels "n","y": NA 1 2 2 2 1 1 1 1 1 ...
##  $ V12  : Factor w/ 2 levels "n","y": 2 2 1 1 NA 1 1 1 2 1 ...
##  $ V13  : Factor w/ 2 levels "n","y": 2 2 2 2 2 2 NA 2 2 1 ...
##  $ V14  : Factor w/ 2 levels "n","y": 2 2 2 1 2 2 2 2 2 1 ...
##  $ V15  : Factor w/ 2 levels "n","y": 1 1 1 1 2 2 2 NA 1 NA ...
##  $ V16  : Factor w/ 2 levels "n","y": 2 NA 1 2 2 2 2 2 2 NA ...

Menampilkan ringkasan jumlah kelompok HouseVotes84 dari kolom democrat dan republican

summary(HouseVotes84$Class)
##   democrat republican 
##        267        168

Menampilkan ringkasan dari data HouseVotes84

summary(HouseVotes84)
##         Class        V1         V2         V3         V4         V5     
##  democrat  :267   n   :236   n   :192   n   :171   n   :247   n   :208  
##  republican:168   y   :187   y   :195   y   :253   y   :177   y   :212  
##                   NA's: 12   NA's: 48   NA's: 11   NA's: 11   NA's: 15  
##     V6         V7         V8         V9        V10        V11        V12     
##  n   :152   n   :182   n   :178   n   :206   n   :212   n   :264   n   :233  
##  y   :272   y   :239   y   :242   y   :207   y   :216   y   :150   y   :171  
##  NA's: 11   NA's: 14   NA's: 15   NA's: 22   NA's:  7   NA's: 21   NA's: 31  
##    V13        V14        V15        V16     
##  n   :201   n   :170   n   :233   n   : 62  
##  y   :209   y   :248   y   :174   y   :269  
##  NA's: 25   NA's: 17   NA's: 28   NA's:104

Dari data diatas ada data yang hilang dengan keterangan NA. Maka akan dihapus baris dengan keterangan NA.

head(is.na(HouseVotes84))
##   Class    V1    V2    V3    V4    V5    V6    V7    V8    V9   V10   V11   V12
## 1 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE
## 2 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## 3 FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## 4 FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## 5 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE
## 6 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##     V13   V14   V15   V16
## 1 FALSE FALSE FALSE FALSE
## 2 FALSE FALSE FALSE  TRUE
## 3 FALSE FALSE FALSE FALSE
## 4 FALSE FALSE FALSE FALSE
## 5 FALSE FALSE FALSE FALSE
## 6 FALSE FALSE FALSE FALSE

Menampilkan dalam bentuk grafik, dari hasil data yang sudah dibersihkan.

CleanDataset <- na.omit(HouseVotes84)
qplot(Class, data=CleanDataset, geom = "bar") + theme(axis.text.x = element_text(angle = 90, hjust = 1))

Pembagian Data

Pada pengujian kali ini, dilakukan pembagian 2 data menjadi data training dan data testing. dengan 75% untuk data training, dan sisanya data testing.

hv_train<-HouseVotes84[1:326,-1]
hv_test<-HouseVotes84[327:435,-1]

hv_train_labels <- HouseVotes84[1:326, ]$Class 
hv_test_labels<- HouseVotes84[327:435, ]$Class

Melatih Model Data dengan naive bayes

hv_classifier <- naiveBayes(hv_train, hv_train_labels)

Evaluasi Model Kinerja

Lalu saya akan menyimpan prediksi Naive Bayes di hv_test_pred dan kemudian membandingkannya dengan label yang sebenarnya.

hv_test_pred <- predict(hv_classifier, hv_test)
head(hv_test_pred)
## [1] democrat   republican democrat   democrat   republican democrat  
## Levels: democrat republican

Kemudian saya melakukan analisis tabulasi silang (crosstable) untuk melihat hubungan antar variable.

CrossTable(hv_test_pred, hv_test_labels,
           prop.chisq = FALSE, prop.t = FALSE, prop.r = FALSE,
           dnn = c('predicted', 'actual'))
## 
##  
##    Cell Contents
## |-------------------------|
## |                       N |
## |           N / Col Total |
## |-------------------------|
## 
##  
## Total Observations in Table:  109 
## 
##  
##              | actual 
##    predicted |   democrat | republican |  Row Total | 
## -------------|------------|------------|------------|
##     democrat |         55 |          3 |         58 | 
##              |      0.833 |      0.070 |            | 
## -------------|------------|------------|------------|
##   republican |         11 |         40 |         51 | 
##              |      0.167 |      0.930 |            | 
## -------------|------------|------------|------------|
## Column Total |         66 |         43 |        109 | 
##              |      0.606 |      0.394 |            | 
## -------------|------------|------------|------------|
## 
## 

Dari hasil diatas memiliki Tingkat akurasi keseluruhan model adalah 87%. 3 suara demokrat diidentifikasi sebagai republik dan 11 suara republik diidentifikasi sebagai demokrat.

Menampilakn data dari hv_test_pred

hv_test_pred
##   [1] democrat   republican democrat   democrat   republican democrat  
##   [7] democrat   democrat   democrat   republican democrat   democrat  
##  [13] democrat   republican republican democrat   democrat   republican
##  [19] democrat   republican republican republican democrat   republican
##  [25] democrat   republican democrat   republican democrat   democrat  
##  [31] republican republican democrat   republican democrat   democrat  
##  [37] democrat   republican republican republican democrat   democrat  
##  [43] democrat   republican democrat   democrat   republican republican
##  [49] republican republican democrat   republican republican republican
##  [55] democrat   democrat   republican democrat   republican republican
##  [61] democrat   democrat   republican democrat   republican democrat  
##  [67] republican democrat   democrat   democrat   democrat   republican
##  [73] democrat   republican republican republican democrat   republican
##  [79] republican republican democrat   republican democrat   republican
##  [85] republican democrat   republican republican democrat   democrat  
##  [91] republican democrat   democrat   democrat   republican democrat  
##  [97] democrat   democrat   democrat   democrat   democrat   republican
## [103] democrat   democrat   republican democrat   republican republican
## [109] republican
## Levels: democrat republican

Meningkatkan Model Kinerja

Selanjutnya dalam meningkatkan model kinerja yaitu dengan mengatur parameter Laplace ke model untuk memeriksa apakah itu dapat meningkatkan akurasi?

hv_classifier2 <- naiveBayes(hv_train, hv_train_labels, laplace = 3)
hv_test_pred2 <- predict(hv_classifier2, hv_test)
CrossTable(hv_test_pred2, hv_test_labels,
           prop.chisq = FALSE, prop.t = FALSE, prop.r = FALSE,
           dnn = c('predicted', 'actual'))
## 
##  
##    Cell Contents
## |-------------------------|
## |                       N |
## |           N / Col Total |
## |-------------------------|
## 
##  
## Total Observations in Table:  109 
## 
##  
##              | actual 
##    predicted |   democrat | republican |  Row Total | 
## -------------|------------|------------|------------|
##     democrat |         55 |          3 |         58 | 
##              |      0.833 |      0.070 |            | 
## -------------|------------|------------|------------|
##   republican |         11 |         40 |         51 | 
##              |      0.167 |      0.930 |            | 
## -------------|------------|------------|------------|
## Column Total |         66 |         43 |        109 | 
##              |      0.606 |      0.394 |            | 
## -------------|------------|------------|------------|
## 
## 

Dalam hasil diatas dapat dilihat bahwa tingkat akurasi tetap sama, parameter laplace tidak membantu model untuk berkinerja lebih baik.

Kesimpulan

Hasil dari pengujian analisis data United States Congressional Voting 1984 dengan bayesian memiliki Akurasi prediksi model 87%. Dalam meningkatkan kinerja model dengan menambahkan Metode Transformasi Laplace, yang dimana metode ini meruapakan suatu metode yang dapat digunakan untuk menyelesaikan persamaan diferensial, yang memetakan masalah nilai awal ke dalam suatu persamaan aljabar atau suatu sistem persamaan yang dapat diselesaikan dengan metode aljabar dan tabel transformasi Laplace, Tidak dapat meningkatkan model yang diuji.