Laporan Praktikum STA582

Principal Component Analysis

Panggil Package

Pertama panggil package yang dibutuhkan dengan sintaks berikut:

## Loading required package: lattice
## Loading required package: ggplot2
## corrplot 0.84 loaded
## Loading required package: magrittr
## 
## Attaching package: 'imager'
## The following object is masked from 'package:magrittr':
## 
##     add
## The following objects are masked from 'package:stats':
## 
##     convolve, spectrum
## The following object is masked from 'package:graphics':
## 
##     frame
## The following object is masked from 'package:base':
## 
##     save.image
## Warning in rgl.init(initValue, onlyNULL): RGL: unable to open X11 display
## Warning: 'rgl.init' failed, running with 'rgl.useNULL = TRUE'.
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
## 
## Attaching package: 'plotly'
## The following object is masked from 'package:imager':
## 
##     highlight
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout

Load Data

Lalu, load data yang dibutuhkan dan lakukan praproses serta eksplorasi data. decathlon2 adalah data penampilan atlet selama dua pertemuan olahraga. Praproses yang dilakukan berupa mengambil subset data yaitu kolom 1 sampai 10 karena kolom rank, points dan competition tidak diperlukan dalam hal ini.

Eksplorasi Data

Berdasarkan plot korelasi, terlihat adanya korelasi negatif antara lompatan panjang (long,jump) dan x100m. Selain itu, terdapat korelasi yang positif antara rintangan x110m (x110m hurdle) dan x100m. Berdasarkan plot histogram, tidak didapati adanya sebaran data dari peubah yang miring atau menjulur ke kiri maupun ke kanan.

Menerapkan Principal Component Analysis

Principal Component Analysis (PCA) yaitu mentransfer satu himpunan peubah yang berkorelasi ke dalam himpunan peubah tak berkorelasi baru. Pada tahap ini akan dicobakan fungsi PCA dari package FactoMineR.

Penentuan Banyaknya Komponen Utama

Komponen utama pertama dapat menjelaskan 37.5% dari total keragaman data sementara komponen utama kedua dapat menjelaskan sekitar 17%% dari total keragaman data sedangkan komponen utama kedua dapat menjelaskan sekitar 15% dari total keragaman data, sehingga jika menggunakan ketiga komponen utama maka total keragaman yang dapat dijelaskan adalah 70.1297% dari total keragaman data. Oleh karena itu, dipilih komponen utama sebanyak 3 karena kumulatif proporsi keragaman total yang mampu dijelaskan sudah lebih dari 70%

Clustering Analysis

K-Means merupakan salah satu metode pengelompokan data nonhierarki yang mempartisi data yang ada kedalam bentuk dua atau lebih kelompok. Metode ini mempartisi data kedalam kelompok sehingga data yang berkarakteristik sama dimasukkan kedalam satu kelompok yang sama dan data yang berkarakteristik berbeda dikelompokkan kedalam kelompok yang lain.

K-Means Clustering

## K-means clustering with 5 clusters of sizes 45, 28, 27, 22, 28
## 
## Cluster means:
##   Sepal.Length Sepal.Width Petal.Length Petal.Width
## 1     6.264444    2.884444     4.886667   1.6666667
## 2     5.242857    3.667857     1.500000   0.2821429
## 3     7.014815    3.096296     5.918519   2.1555556
## 4     4.704545    3.122727     1.413636   0.2000000
## 5     5.532143    2.635714     3.960714   1.2285714
## 
## Clustering vector:
##   [1] 2 4 4 4 2 2 4 2 4 4 2 4 4 4 2 2 2 2 2 2 2 2 4 2 4 4 2 2 2 4 4 2 2 2 4 4 2
##  [38] 2 4 2 2 4 4 2 2 4 2 4 2 4 1 1 1 5 1 5 1 5 1 5 5 5 5 1 5 1 5 5 1 5 1 5 1 1
##  [75] 1 1 1 1 1 5 5 5 5 1 5 1 1 1 5 5 5 1 5 5 5 5 5 1 5 5 3 1 3 1 3 3 5 3 3 3 1
## [112] 1 3 1 1 1 1 3 3 1 3 1 3 1 3 3 1 1 3 3 3 3 3 1 1 3 3 1 1 3 3 3 1 3 3 3 1 1
## [149] 1 1
## 
## Within cluster sum of squares by cluster:
## [1] 17.014222  4.630714 15.351111  3.114091  9.749286
##  (between_SS / total_SS =  92.7 %)
## 
## Available components:
## 
## [1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
## [6] "betweenss"    "size"         "iter"         "ifault"

Output diatas menunjukan banyaknya data pada cluster 1 adalah sebanyak 28, clluster 2 sebanyak 27 data, cluster 3 sebanyak 28 data, cluster 4 sebanyak 22 data, cluster 5 sebanyak 45 data. Pada cluster 1 rata-rata sepal length adalah 5.242857, sepal width adalah 3.667857 dan seterusnya.

##             
##               1  2  3  4  5
##   setosa      0 28  0 22  0
##   versicolor 23  0  0  0 27
##   virginica  22  0 27  0  1

Output diatas menunjukan bahwa cluster 1 terdiri dari 28 jenis species sentosa, cluster 2 27 jenis species virginica dan seterusnya

Plot tersebut merupakan sebaran cluster berdasarkan nilai atribut Sepal Length dan Sepal Width, pada gambar tersebut tanda bintang menunjukkan pusat cluster untuk setiap kelas.

Visualisasi menggunakan fviz_cluster

K-Medoids Clustering

Algoritma k-medoids hampir sama dengan algoritma k-means, di mana keduanya sama- sama mempartisi data yang ada ke dalam bentuk dua atau lebih kelompok berdasarkan pendekatan partisi. Perbedaanya adalah jika pada k-means cluster diwakili dengan pusat dari cluster, sedangkan pada k-medoids, cluster diwakili oleh objek terdekat dari pusat cluster.

Melakukan pengklasteran dengan menggunakan fungsi pamk()

Menampilkan jumlah cluster yang terbentuk

## [1] 2
##    
##     setosa versicolor virginica
##   1     50          1         0
##   2      0         49        50

Dari hasil algoritma pamk() diperoleh 2 klaster: 1) Kluster 1 adalah teridiri atas beberapa jenis “setosa” dan satu “versicolor” 2) Kluster 2 terdiri atas banyak “ versicolor" ditambah banayk dari “ virginica ".

Melihat plot dari hasil pamk.result

Gambar sebelah kiri adalah clusplot 2-dimensi (clustering plot) dari dua kelompok dan garis menunjukkan jarak antara cluster. Gambar sebelah kanan menunjukkan silhouettes. Dalam silhouettes, nilai Si yang besar (hampir 1) menunjukkan bahwa pengamatan yang sesuai terkelompok sangat baik, nilai Si yang mendekati 0 berarti pengamatan terletak di antara dua kelompok, dan pengamatan dengan Si negatif mungkin ditempatkan di cluster yang salah. Karena Si rata-rata adalah masing- masing 0,81 dan 0,62 di silhouettes di atas, mengidentifikasikan bahwa dua kelompok ini baik.

Hierarchical Clustering

Hierarchical Clustering adalah algoritma clustering yang mengelompokkan data dengan membuat suatu hirarki berupa dendogram dimana data yang mirip akan ditempatkan pada hirarki yang berdekatan dan yang tidak pada hirarki yang berjauhan.

Ambil 40 data dari dataset iris, simpan pada irisSample dan hapus variabel Species

Melakukan pengklasteran hierarchical clustering dengan menggunakan metode complete linked dan simpan hasilnya pada hc

Hasil clustering plot dengan pelabelan berdasarkan atribut Species pada data iris

Market Basket Analysis

Analisis asosiasi berguna untuk menemukan hubungan penting yang tersembunyi di antara set data yang sangat besar. Hubungan yang sudah terbuka direpresentasikan dalam bentuk aturan asosiasi (association rule) atau set aturan item yang sering muncul. Kekuatan aturan asosiasi dapat diukur dengan support dan confidence. Support digunakan untuk menentukan seberapa banyak aturan dapat diterapkan pada set data, sedangkan confidence digunakan untuk menentukan seberapa sering item di dalam 𝑌 muncul dalam transaksi yang berisi 𝑋.

Panggil Package

Pertama panggil package yang dibutuhkan dengan sintaks berikut:

## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.0 ──
## ✓ tibble  3.1.0     ✓ dplyr   1.0.5
## ✓ tidyr   1.1.3     ✓ stringr 1.4.0
## ✓ readr   1.4.0     ✓ forcats 0.5.0
## ✓ purrr   0.3.4
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x imager::add()       masks magrittr::add()
## x stringr::boundary() masks imager::boundary()
## x tidyr::extract()    masks magrittr::extract()
## x tidyr::fill()       masks imager::fill()
## x dplyr::filter()     masks plotly::filter(), stats::filter()
## x dplyr::lag()        masks stats::lag()
## x purrr::lift()       masks caret::lift()
## x purrr::set_names()  masks magrittr::set_names()
## Loading required package: Matrix
## 
## Attaching package: 'Matrix'
## The following objects are masked from 'package:tidyr':
## 
##     expand, pack, unpack
## 
## Attaching package: 'arules'
## The following object is masked from 'package:dplyr':
## 
##     recode
## The following objects are masked from 'package:base':
## 
##     abbreviate, write
## 
## Attaching package: 'igraph'
## The following object is masked from 'package:arules':
## 
##     union
## The following objects are masked from 'package:dplyr':
## 
##     as_data_frame, groups, union
## The following objects are masked from 'package:purrr':
## 
##     compose, simplify
## The following object is masked from 'package:tidyr':
## 
##     crossing
## The following object is masked from 'package:tibble':
## 
##     as_data_frame
## The following object is masked from 'package:plotly':
## 
##     groups
## The following object is masked from 'package:imager':
## 
##     spectrum
## The following objects are masked from 'package:stats':
## 
##     decompose, spectrum
## The following object is masked from 'package:base':
## 
##     union

Selanjutnya, load data yang dibutuhkan dan lakukan praproses data.

Titanic dataset (dataset bawaan R) merupakan data yang terdiri dari 4 dimensi dengan informasi penumpang di kapal Titanic menurut Class, Sex, Age, dan Survived. Data ini sudah berbentuk ringkasan berupa frekuensi atau banyak penumpang berdasarkan karakteristiknya, sehingga perlu dilakukan praproses untuk melakukan association rule mining. Praproses yang dilakukan adalah membentuk informasi pada setiap baris menjadi mewakili satu orang.

Panggil Data

##  'table' num [1:4, 1:2, 1:2, 1:2] 0 0 35 0 0 0 17 0 118 154 ...
##  - attr(*, "dimnames")=List of 4
##   ..$ Class   : chr [1:4] "1st" "2nd" "3rd" "Crew"
##   ..$ Sex     : chr [1:2] "Male" "Female"
##   ..$ Age     : chr [1:2] "Child" "Adult"
##   ..$ Survived: chr [1:2] "No" "Yes"
## [1] "Banyaknya seluruh penumpang adalah 2201 org."

Praproses Data

##     Class               Sex                Age              Survived        
##  Length:2201        Length:2201        Length:2201        Length:2201       
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character

Penerapan Algoritme Apriori

## Warning: Column(s) 1, 2, 3, 4 not logical or factor. Applying default
## discretization (see '? discretizeDF').
## Apriori
## 
## Parameter specification:
##  confidence minval smax arem  aval originalSupport maxtime support minlen
##         0.8    0.1    1 none FALSE            TRUE       5     0.1      1
##  maxlen target  ext
##      10  rules TRUE
## 
## Algorithmic control:
##  filter tree heap memopt load sort verbose
##     0.1 TRUE TRUE  FALSE TRUE    2    TRUE
## 
## Absolute minimum support count: 220 
## 
## set item appearances ...[0 item(s)] done [0.00s].
## set transactions ...[10 item(s), 2201 transaction(s)] done [0.00s].
## sorting and recoding items ... [9 item(s)] done [0.00s].
## creating transaction tree ... done [0.00s].
## checking subsets of size 1 2 3 4 done [0.00s].
## writing ... [27 rule(s)] done [0.00s].
## creating S4 object  ... done [0.00s].

Output diatas menunjukan Absolute minimum support countadalah sebesar 220 dan jumlah aturan yang terbentuk adalah sebanyak 27. Minimum support bawaan 0.1.

Menampilkan hasil rules yang terbentuk secara terurut

##      lhs                                   rhs           support   confidence
## [1]  {Class=Crew,Survived=No}           => {Sex=Male}    0.3044071 0.9955423 
## [2]  {Class=Crew,Age=Adult,Survived=No} => {Sex=Male}    0.3044071 0.9955423 
## [3]  {Class=Crew}                       => {Sex=Male}    0.3916402 0.9740113 
## [4]  {Class=Crew,Age=Adult}             => {Sex=Male}    0.3916402 0.9740113 
## [5]  {Class=3rd,Sex=Male,Age=Adult}     => {Survived=No} 0.1758292 0.8376623 
## [6]  {Class=3rd,Sex=Male}               => {Survived=No} 0.1917310 0.8274510 
## [7]  {Age=Adult,Survived=No}            => {Sex=Male}    0.6038164 0.9242003 
## [8]  {Survived=No}                      => {Sex=Male}    0.6197183 0.9154362 
## [9]  {Class=Crew}                       => {Age=Adult}   0.4020900 1.0000000 
## [10] {Class=Crew,Survived=No}           => {Age=Adult}   0.3057701 1.0000000 
##      coverage  lift     count
## [1]  0.3057701 1.265851  670 
## [2]  0.3057701 1.265851  670 
## [3]  0.4020900 1.238474  862 
## [4]  0.4020900 1.238474  862 
## [5]  0.2099046 1.237379  387 
## [6]  0.2317129 1.222295  422 
## [7]  0.6533394 1.175139 1329 
## [8]  0.6769650 1.163995 1364 
## [9]  0.4020900 1.052103  885 
## [10] 0.3057701 1.052103  673

Output diatas menunjukan 10 aturan terbaik berdasarkan nilai lift. Lift Ratio lebih besar dari 1.0 menunjukkan bahwa ada beberapa kegunaan aturan tersebut.Semakin besar lift ratio, semakin besar kekuatan asosiasi.

Mengatur parameter yang digunakan pada algoritme Apriori

## Warning: Column(s) 1, 2, 3, 4 not logical or factor. Applying default
## discretization (see '? discretizeDF').
## Apriori
## 
## Parameter specification:
##  confidence minval smax arem  aval originalSupport maxtime support minlen
##         0.8    0.1    1 none FALSE            TRUE       5   0.005      2
##  maxlen target  ext
##      10  rules TRUE
## 
## Algorithmic control:
##  filter tree heap memopt load sort verbose
##     0.1 TRUE TRUE  FALSE TRUE    2    TRUE
## 
## Absolute minimum support count: 11 
## 
## set item appearances ...[0 item(s)] done [0.00s].
## set transactions ...[10 item(s), 2201 transaction(s)] done [0.00s].
## sorting and recoding items ... [10 item(s)] done [0.00s].
## creating transaction tree ... done [0.00s].
## checking subsets of size 1 2 3 4 done [0.00s].
## writing ... [71 rule(s)] done [0.00s].
## creating S4 object  ... done [0.00s].

Total rules yang terbentuk lebih banyak (71 rules) dibandingkan sebelumnya (27 rules) karena minimum support diatur lebih rendah, yaitu 0.005 dibandingkan dengan minimum support bawaan 0.1. Fungsi apriori di R dapat menyaring rules yang digunakan pada sisi kiri (𝑋) dan/atau sisi kanan (𝑌). Misalkan hal yang ingin diamati adalah rules dengan 𝑌 menjelaskan keselamatan penumpang.

Aturan yang Menjelaskan Keselamatan Penumpang

## Warning: Column(s) 1, 2, 3, 4 not logical or factor. Applying default
## discretization (see '? discretizeDF').
## Apriori
## 
## Parameter specification:
##  confidence minval smax arem  aval originalSupport maxtime support minlen
##         0.8    0.1    1 none FALSE            TRUE       5   0.005      2
##  maxlen target  ext
##      10  rules TRUE
## 
## Algorithmic control:
##  filter tree heap memopt load sort verbose
##     0.1 TRUE TRUE  FALSE TRUE    2    TRUE
## 
## Absolute minimum support count: 11 
## 
## set item appearances ...[1 item(s)] done [0.00s].
## set transactions ...[10 item(s), 2201 transaction(s)] done [0.00s].
## sorting and recoding items ... [10 item(s)] done [0.00s].
## creating transaction tree ... done [0.00s].
## checking subsets of size 1 2 3 4 done [0.00s].
## writing ... [4 rule(s)] done [0.00s].
## creating S4 object  ... done [0.00s].

Output diatas menunjukan terdapat 4 aturan yang terbentuk

##     lhs                               rhs           support   confidence
## [1] {Class=2nd,Sex=Male,Age=Adult} => {Survived=No} 0.0699682 0.9166667 
## [2] {Class=2nd,Sex=Male}           => {Survived=No} 0.0699682 0.8603352 
## [3] {Class=3rd,Sex=Male,Age=Adult} => {Survived=No} 0.1758292 0.8376623 
## [4] {Class=3rd,Sex=Male}           => {Survived=No} 0.1917310 0.8274510 
##     coverage   lift     count
## [1] 0.07632894 1.354083 154  
## [2] 0.08132667 1.270871 154  
## [3] 0.20990459 1.237379 387  
## [4] 0.23171286 1.222295 422

Hasil di atas menunjukkan terdapat 4 rules yang bersifat redundan atau rules yang merupakan subset dari rules lainnya. Contohnya terdapat pada rules pertama dan kedua. Pada rules kedua merupakan subset dari rules pertama, yaitu penumpang laki-laki dengan kelas sosial kedua. Begitu juga terjadi pada rules ketiga dan keempat. Untuk menyaring rules yang bersifat redundan tersebut, lakukan langkah berikut.

Menghilangkan Aturan yang Redundan

##     lhs                     rhs           support   confidence coverage  
## [1] {Class=2nd,Sex=Male} => {Survived=No} 0.0699682 0.8603352  0.08132667
## [2] {Class=3rd,Sex=Male} => {Survived=No} 0.1917310 0.8274510  0.23171286
##     lift     count
## [1] 1.270871 154  
## [2] 1.222295 422

Visualisasi Rules yang Terbentuk

## Warning: Unknown control parameters: type
## Available control parameters (with default values):
## layout    =  list(fun = function (graph, dim = 2, ...)  {     if ("layout" %in% graph_attr_names(graph)) {         lay <- graph_attr(graph, "layout")         if (is.function(lay)) {             lay(graph, ...)         }         else {             lay         }     }     else if (all(c("x", "y") %in% vertex_attr_names(graph))) {         if ("z" %in% vertex_attr_names(graph)) {             cbind(V(graph)$x, V(graph)$y, V(graph)$z)         }         else {             cbind(V(graph)$x, V(graph)$y)         }     }     else if (vcount(graph) < 1000) {         layout_with_fr(graph, dim = dim, ...)     }     else {         layout_with_drl(graph, dim = dim, ...)     } }, call_str = c("layout_nicely(<graph>, input = \"/Users/azzahraamonra/LAPORAN STA582 ke 4.Rmd\", ", "    encoding = \"UTF-8\")"), args = list())
## edges     =  <environment>
## nodes     =  <environment>
## nodetext  =  <environment>
## colors    =  c("#EE0000FF", "#EEEEEEFF")
## engine    =  ggplot2
## max   =  100
## verbose   =  FALSE

Berdasarkan dari rules yang terbentuk, terlihat karakteristik penumpang yang berasosiasi kuat dengan tidak selamat dari kecelakaan kapal Titanic. Karakteristik penumpang tersebut adalah penumpang laki-laki dengan kelas sosial kedua atau kelas sosial ketiga.