Lembaga : Universitas Islam Negeri Maulana Malik Ibrahim Malang
Jurusan : Teknik Informatika
Fakultas : Sains dan Teknologi
Pada sub-Chapter sebelumnya penulis telah menjelaskan uji rata-rata untuk satu sampel dan dua sampel. Pada kenyataannya dalam sebuah percobaan laboratorium, kita tidak hanya membandingkan dua buah grup sampel saja, namun beberapa grup dan sejumlah faktor. Untuk menganalisa apakah variasi perlakuan pada kelompok sampel akan memberikan hasil yang berbeda-beda pada rata-rata tiap grup atau tidak diperlukan analisis varians untuk menganilisa variasi perlakuan atau faktor pada masing-masing grup. Analisis varians dapat dilakukan baik untuk satu faktor maupun dua faktor atau lebih. Untuk melakukannya pada R, kita dapat menggunakan fungsi aov() untuk analisis varians dengan metode parametrik dan kruskal.test() untuk analisis varians dengan menggunakan metode nonparametrik. Berikut adalah format kedua fungsi tersebut:
aov(formula, data = NULL)
kruskal.test(formula, data)
Catatan:
formula: formula model yang digunakan.
data: dataset yang akan digunakan.
Berikut adalah contoh penerapan kedua fungsi tersebut untuk melihat apakah terdapat beda pada rata-rata konsentrasi bulanan ozon menggunakan dataset airquality:
summary(aov(Ozone~Month, airquality))
## Df Sum Sq Mean Sq F value Pr(>F)
## Month 1 3387 3387 3.17 0.078 .
## Residuals 114 121756 1068
## ---
## Signif. codes:
## 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 37 observations deleted due to missingness
kruskal.test(Ozone~Month, airquality)
##
## Kruskal-Wallis rank sum test
##
## data: Ozone by Month
## Kruskal-Wallis chi-squared = 29, df = 4, p-value
## = 7e-06
Berdasarkan hasil yang diperoleh diketahui bahwa rata-rata konsentrasi bulanan ozon tidak sama tiap bulannya atau minimal terdapat satu bulan dimana konsentrasi ozonnya berbeda secara signifikan dengan konsentrasi ozon pada bulan-bulan lainnya. Untuk lebih memahami terkait analisis varians pada R dan cara membaca output kedua fungsi tersebut, pembaca dapat membaca tulisan pada halaman situs sthda.
Analisis komponen utama menggunakan transformasi ortogonal (umumnya nilai singular atau dekomposisi nilai eigen) untuk mengubah seperangkat variabel pengamatan yang mungkin berkorelasi menjadi seperangkat variabel tidak berkorelasi (ortogonal) yang disebut komponen utama. Transformasi didefinisikan sedemikian rupa sehingga komponen utama pertama memiliki varians setinggi mungkin (menyumbang variabilitas pada data sebanyak mungkin), dan masing-masing komponen berikutnya pada gilirannya memiliki varians tertinggi yang mungkin di bawah kendala, dimana komponen tersebut menjadi ortogonal ke komponen sebelumnya.
Dalam R, analisis komponen utama umumnya dilakukan dengan fungsi prcomp (). Format fungsi tersebut adalah sebagai berikut:
prcomp(x, retx = TRUE, center = TRUE, scale. = FALSE,
tol = NULL)
Catatan:
x: data frame atau matriks kompleks numerik.
retx: nilai logik yang mengindikasikan apakah variabel hasil rotasi perlu ditampilkan.
center: nilai logik yang mengidikasikan apakah variabel perlu dilakukan pergeseran sehingga nilai rata-ratanya berpusat pada nilai nol.
scale: nilai logik yang mengidikasikan apakah variabel perlu dilakukan penskalaan sebelum dilakukan analisis.
tol: nilai toleransi yang menunjukkan batas nilai bagi komponen yang akan dipertahankan. Komponen yang dihilangkan jika simpangan bakunya kurang dari atau sama dengantol x simpangan baku pc1.
Untuk memahami penerapan fungsi tersebut, kita akan melakukan simulasi menggunakan dataset iris. Output yang dihasilkan di bawah ini menunjukkan bagaimana empat variabel numerik ditransformasikan menjadi empat komponen utama. Penskalaan data mungkin tidak diperlukan dalam kasus ini, karena keempat pengukuran memiliki unit yang sama dan besarnya sama. Namun, penskalaan umumnya merupakan praktik yang baik.
iris_use <- iris[,-5] # menghilangkan variabel non-numerik
iris_pca <- prcomp(iris_use, scale. = TRUE)
iris_pca
## Standard deviations (1, .., p=4):
## [1] 1.7084 0.9560 0.3831 0.1439
##
## Rotation (n x k) = (4 x 4):
## PC1 PC2 PC3 PC4
## Sepal.Length 0.5211 -0.37742 0.7196 0.2613
## Sepal.Width -0.2693 -0.92330 -0.2444 -0.1235
## Petal.Length 0.5804 -0.02449 -0.1421 -0.8014
## Petal.Width 0.5649 -0.06694 -0.6343 0.5236
Fungsi summary memberikan proporsi varians total yang dikaitkan dengan masing-masing komponen utama, dan proporsi kumulatif ketika masing-masing komponen ditambahkan. Kita melihat bahwa dua komponen pertama berperan lebih dari 95% dari total varians.
summary(iris_pca)
## Importance of components:
## PC1 PC2 PC3 PC4
## Standard deviation 1.71 0.956 0.3831 0.14393
## Proportion of Variance 0.73 0.229 0.0367 0.00518
## Cumulative Proportion 0.73 0.958 0.9948 1.00000
Histogram (hasil plot dalam analisis prcomp) secara grafis merekapitulasi proporsi varian yang disumbangkan oleh masing-masing komponen utama, sementara biplot menunjukkan bagaimana variabel awal diproyeksikan pada dua komponen utama pertama (Gambar 11.1). Ini juga menunjukkan koordinat dari masing-masing sampel dalam ruang (PC1, PC2). Satu spesies iris (yang berubahmenjadi setosa dari analisis kluster di bawah ini) secara jelas dipisahkan dari dua spesies lain dalam ruang koordinat ini.
Analisis komponen utama data iris.
Gambar 11.1: Analisis komponen utama data iris.
Untuk informasi lebih lanjut terkait metode analisis komponen utama, pembaca dapat membacanya pada laman Little Book of R for Multivariate Analysis.
Analisis cluster mencoba untuk mengurutkan satu set objek ke dalam kelompok (cluster) sedemikian rupa sehingga objek dalam cluster yang sama lebih mirip satu sama lain dibandingkan objek pada cluster lainnya. Ini digunakan untuk analisis eksplorasi melalui proses penambangan data (data mining) di banyak bidang, seperti bioinformatika, biologi evolusi, analisis gambar, lingkungan, dan pembelajaran mesin.
Menurut Wikipedia: "Analisis Cluster itu sendiri bukanlah salah satu algoritma spesifik, tetapi tugas umum yang harus dipecahkan. Ini dapat dicapai dengan berbagai algoritma yang berbeda secara signifikan dalam pengertian mereka tentang apa yang merupakan sebuah cluster dan bagaimana cara menemukannya secara efisien. Gagasan populer mengenai cluster termasuk kelompok dengan jarak rendah di antara anggota cluster, area padat ruang data, interval atau distribusi statistik tertentu. Algoritma pengelompokan dan pengaturan parameter yang sesuai (termasuk nilai-nilai seperti fungsi jarak yang akan digunakan, ambang kepadatan atau jumlah cluster yang diharapkan) tergantung pada dataset individual dan tujuan penggunaan hasil. Analisis cluster seperti itu bukan tugas otomatis, tetapi proses berulang penemuan pengetahuan yang melibatkan trial and error. Seringkali diperlukan untuk memodifikasi preprocessing dan parameter sampai hasilnya mencapai properti yang diinginkan.
Hierarchical clustering membangun hierarki cluster, di mana metrik hierarki adalah suatu ukuran ketidaksamaan antar cluster. Menurut halaman bantuan untuk hclust(), metode pengelompokan hierarkis aglomeratif, “Fungsi ini melakukan analisis hierarki cluster menggunakan seperangkat ketidaksamaan untuk n objek yang dikelompokkan. Awalnya, masing-masing objek ditugaskan ke cluster sendiri dan kemudian algoritma melanjutkan secara iteratif, pada setiap tahap bergabung dengan dua cluster yang paling mirip, terus sampai hanya ada satu cluster. Pada setiap tahap, jarak antar kluster dihitung ulang dengan formula pembaruan ketidaksamaan Lance Williams sesuai dengan metode pengelompokan tertentu yang digunakan.”Ada tujuh metode aglomerasi yang tersedia, dengan lengkap — yang mencari kluster kompak, bola — sebagai default. Format umum fungsi hclust() adalah sebagai berikut:
hclust(d, method = "complete", members = NULL)
Catatan:
d: struktur ketidaksamaan yang dihasilkan dengan fungsidist.
method: metode alglomerasi yang digunakan. Metode yang dapat digunakan antara lain: “ward.D”, “ward.D2”, “single”, “complete”, “average” (= UPGMA), “mcquitty” (= WPGMA), “median” (= WPGMC) atau “centroid” (= UPGMC)
members: NULL atau vektor dengan ukuran sama dengand. Untuk info lebih lanjut jalankan sintaks?hclust.
Untuk memahami penerapan fungsi hclust(), kita akan kembali menggunakan data iris_use. Berikut adalah sintaks yang digunakan:
# menghitung jarak antar observasi
iris_hclust <- dist(iris_use)
# Pembentukan Cluster
hc <- hclust(iris_hclust)
hc
##
## Call:
## hclust(d = iris_hclust)
##
## Cluster method : complete
## Distance : euclidean
## Number of objects: 150
Visualisasi cluster dibentuk melalui dendogram yang ditampilkan pada Gambar 11.2.
Analisis pengelompokan hierarkis alglomeratif data iris.
Gambar 11.2: Analisis pengelompokan hierarkis alglomeratif data iris.
Menurut halaman bantuan diana() (DIvisive ANAlysis Clustering) dalam library cluster, "Algoritma diana membangun hierarki pengelompokan, dimulai dengan satu kluster besar yang berisi semua n pengamatan. Cluster dibagi sampai masing-masing cluster hanya berisi satu pengamatan. Pada setiap tahap, cluster dengan diameter terbesar dipilih. Format fungsi diana() adalah sebagai berikut:
diana(x, metric = "euclidean", stand = FALSE)
Catatan:
x: struktur ketidaksamaan yang dihasilkan dengan fungsidistatau data frame.
metric: karakter string yang menyatakan metode pengukuran jarak yang digunakan. Metode pengukuran jarak dapat berupa “euclidean” dan “manhattan”.
stand: vektor logik yang menyatakan apakah data akan dilakukan standardisasi terlebih dahulu sebelum dilakukan analisis.
Analisis pengelompokan divisif data iris.
Gambar 11.3: Analisis pengelompokan divisif data iris.
k-means melakukan pengelompokan n pengamatan ke dalam k cluster di mana setiap pengamatan akan tergabung dengan pusat cluster terdekat. Pengguna harus menentukan jumlah pusat (cluster) yang diinginkan sebagai output. Untuk melakukan pengelompokan dengan algoritma k-means pada R dapat menggunakan fungsi kmeans(). Format fungsi tersebut secara umum adalah sebagai berikut:
kmeans(x, centers, iter.max = 10,
algorithm = c("Hartigan-Wong", "Lloyd", "Forgy",
"MacQueen"))
Catatan:
x: data frame.
centers: jumlah cluster yang ingin di buat.
iter.max: jumlah iterasi maksimum yang diijinkan.
algorithm: algoritma pengelompokan yang digunakan. Untuk informasi lebih lanjut jalankan sintaks?kmeans.
iris_kmeans <- kmeans(iris_use, centers = 3)
iris_kmeans
## K-means clustering with 3 clusters of sizes 50, 38, 62
##
## Cluster means:
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## 1 5.006 3.428 1.462 0.246
## 2 6.850 3.074 5.742 2.071
## 3 5.902 2.748 4.394 1.434
##
## Clustering vector:
## [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [26] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [51] 3 3 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [76] 3 3 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [101] 2 3 2 2 2 2 3 2 2 2 2 2 2 3 3 2 2 2 2 3 2 3 2 3 2
## [126] 2 3 3 2 2 2 2 2 3 2 2 2 2 3 2 2 2 3 2 2 2 3 2 2 3
##
## Within cluster sum of squares by cluster:
## [1] 15.15 23.88 39.82
## (between_SS / total_SS = 88.4 %)
##
## Available components:
##
## [1] "cluster" "centers" "totss"
## [4] "withinss" "tot.withinss" "betweenss"
## [7] "size" "iter" "ifault"
# menghitung lokasi pusat cluster
ccent = function(cl) {
f = function(i) colMeans(iris_use[cl==i,])
x = sapply(sort(unique(cl)), f)
colnames(x) = sort(unique(cl))
return(x)
}
ccent(iris_kmeans$cluster)
## 1 2 3
## Sepal.Length 5.006 6.850 5.902
## Sepal.Width 3.428 3.074 2.748
## Petal.Length 1.462 5.742 4.394
## Petal.Width 0.246 2.071 1.434
pam mem-partisi data menjadi k cluster di sekitar medoid. Medoid dari set data yang terbatas merupakan titik data dengan nilai ketidaksamaan rata-rata untuk semua titik data adalah minimum. Hal tersebut menujukkan bahwa medoid merupakan pusat dari set cluster. Menurut halaman bantuan pam(), pendekatan k-medoid lebih kuat daripada pendekatan k-means “karena meminimalkan jumlah ketidaksamaan daripada jumlah jarak euclidean kuadrat”. Format umum fungsi pam() adalah sebagai berikut:
pam(x, k, diss = inherits(x, "dist"),
metric = c("euclidean", "manhattan"))
Catatan:
x: data frame.
k: jumlah cluster yang ingin di buat.
method: metode perhitungan jarak yang digunakan. Untuk informasi lebih lanjut jalankan sintaks?pam.
library(cluster)
iris_pam <- pam(iris_use, k=3)
iris_pam
## Medoids:
## ID Sepal.Length Sepal.Width Petal.Length
## [1,] 8 5.0 3.4 1.5
## [2,] 79 6.0 2.9 4.5
## [3,] 113 6.8 3.0 5.5
## Petal.Width
## [1,] 0.2
## [2,] 1.5
## [3,] 2.1
## Clustering vector:
## [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [26] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [51] 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [76] 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [101] 3 2 3 3 3 3 2 3 3 3 3 3 3 2 2 3 3 3 3 2 3 2 3 2 3
## [126] 3 2 2 3 3 3 3 3 2 3 3 3 3 2 3 3 3 2 3 3 3 2 3 3 2
## Objective function:
## build swap
## 0.6709 0.6542
##
## Available components:
## [1] "medoids" "id.med" "clustering"
## [4] "objective" "isolation" "clusinfo"
## [7] "silinfo" "diss" "call"
## [10] "data"
Analisis pengelompokan metode pam data iris.
Gambar 11.4: Analisis pengelompokan metode pam data iris.
Bloomfield, V.A. 2014. Using R for Numerical Analysis in Science and Engineering. CRC Press.
Coqhlan, A. Tanpa Tahun. Using R for Multivariate Analysis. https://little-book-of-r-for-multivariate-analysis.readthedocs.io/en/latest/src/multivariateanalysis.html#principal-component-analysis.
Primartha, R. 2018. Belajar Machine Learning Teori dan Praktik. Penerbit Informatika : Bandung
Rosadi,D. 2016. Analisis Statistika dengan R. Gadjah Mada University Press: Yogyakarta.
Rosidi, M. 2019. Uji Hipotesis. https://environmental-data-modeling.netlify.com/tutorial/11_uji_hipotesis/.
STHDA. Tanpa Tahun. Comparing Means in R. http://www.sthda.com/english/wiki/comparing-means-in-r.