1 PENDAHULUAN
1.1 Latar Belakang Kasus
Kendaraan listrik pada saat ini disebut sebagai moda trasnportasi paling ramah lingkungan dikarenakan penggunaan energi tidak terbarukan seperti pada kendaraan konvensional (menggunakan bahan bakar minyak bumi) merupakan faktor utama dari permasalahan lingkungan yang timbUl (Permana, dkk. 2023). Pemerintah Indoneisa saat ini terus berupaya untuk mempercepat peralihan penggunaan teknologi kendaraan listrik dengan diterbitkannya Perpres No. 55 Tahun 2019.
Mobil listrik cenderung dibangun dengan teknologi terkini berfitur canggih, adapun keunggulan yang ditawarkan oleh kendaraan listrik ialah:
Ramah Lingkungan (Minim Polusi)
Hemat Biaya Bahan Bakar
Perawatan Mudah
Peningkatan kebutuhan akan transportasi ramah lingkungan telah mendorong penggunaan kendaraan listrik yang lebih luas. Terlebih lagi dengan keunggulan diatas, terjadi pertumbuhan cepat dalam industri kendaraan listrik. penting untuk memahami dan mengelompokkan kendaraan berdasarkan karakteristik tertentu, seperti performa, daya tahan baterai, dan efisiensi, untuk mengoptimalkan desain dan pengembangan kendaraan listrik. Analisis statistik dan teknik pengelompokkan data menjadi penting dalam memahami keragaman kendaraan listrik yang ada di pasaran.
1.2 Data
Data yang digunakan adalah data sebanyak 50 Electric Vehicle
atau Kendaraan Listrik yang didapat dari kaggle.com . Aspek
yang diukur dalam data ini adalah:
Accel : Akselerasi (Detik)
TopSpeed : Kecepatan Tertinggi (Km/Jam)
Range : Jarak Maksimal (Km)
Efficiency : Efisiensi (Wh/Km)
FastCharge : Penambahan Jarak Tempuh Selama Pengecasan (Km/Jam)
PriceEuro : Harga Kendaran (Ribuan Euro)
1.3 Latar Belakang Metode
Metode clustering atau klasterisasi dapat menjadi metode pendekatan yang efektif dalam segmentasi atau pengelompokan suatu hal didasari oleh variabel tertentu yang mempengaruhinya. Salah satu metode klaster ialah metode analsisi klaster non hierarki yakni dengan penggunaan algoritma K-Means. Metode ini bekerja dengan memberikan kumpulan data point dan jumlah k kelompok yang diinginkan, lalu algoritma akan berjalan mengulangi partisi data ke k kelompok berdasarkan fungsi jarak (Robani,dkk. 2016).
Data yang didapatkan perlu dilakukan uji asumsi sebelum dilakukan klasterisasi, dalam beberapa kasus, variabel yang digunakan untuk pengelompokkan bisa bersifat multikolinieritas, yakni ketergantungan yang tinggi antara variabel variabel tersebut. Penyelesaian masalah ini dapat diselesaikan dengan teknik yang tepat salah satunya adalah penggunaan Analisis Komponen Utama (PCA) (Mutallib,dkk. 2019).
Analisis Komponen Utama (PCA) merupakan teknik reduksi dimensi yang digunakan unruk mengurangi kompleksitas dataset dengan menjaga sebagian besar varians data dan mengurangi variabel yang memiliki ketergantungan yang kurang tinggi. Dengan menggunakan PCA, variabel-variabel yang memiliki ketergantungan tinggi dapat diubah menjadi sejumlah komponen utama yang saling independen. Penggunaan PCA dalam Analisis klaster dapat membantu memperoleh hasil yang lebih akurat dan informatif karena meminimalkan terjadinya multikolinieritas data dalam analisis.
1.4 Tujuan
Tujuan dari penelitian ini ialah untuk menganalisis bagaimana cara mengoptimalkan pengelompokkan kendaraan listrik mengunakan metode klaster non-hierarki algoritma K-Means dengan pendekatan PCA. Pengelompokkan didasari oleh beberapa variabel terkait. Melalui klasterisasi, peneliti mengharapkan dapat memberikan kontribusi dalam pemahaman yang lebih baik tentang keragaman kendaraan listrik ke kalangan umum terutama calon pembeli kendaraan listrik dalam memahami produk produk terkait sesuai pengelompokan spesifikasinya dan harga yang ada agar dapat lebih memudahkan ketika hendak memiliki kendaraan listrik yang disesuaikan dengan kebutuhan.
1.5 Tinjauan Pustaka
1.5.1 Analisis Klaster
Analisis klaster adalah teknik multivariat yang mempunyai tujuan utama untuk mengelompokkan objek-objek/cases berdasarkan karakteristik yang dimilikinya. Analisis klaster mengklasifikasi objek sehingga setiap objek yang memiliki sifat yang mirip (paling dekat kesamaannya) akan mengelompok ke dalam satu klaster (kelompok) yang sama. Proses pengelompokan data pada analisis klaster dapat dilakukan dengan dua metode, yakni:
- Metode Hierarki
Metode ini dimulai dengan pengelompokkan 2 atau lebih objek yang memiliki kesamaan paling dekat, dilanjutkan proses yang sama yang mempunyai kedekatan kedua, dan seterusnya sampai membentuk semacam ‘pohon’ (dendogram) dimana ada hirarki (tingkatan) yang jelas antar objek, dari yang paling mirip sampai paling tidak mirip. Beberapa metode untuk proses klastering secara hirarki yaitu single linkage, complete linkage, average linkage, ward’s method, dan centroid method (Santoso, 2010).
- Metode Non-Hierarki
Metode ini diawali dengan penentuan jumlah klaster yang diinginkan.Hal ini berbeda dengan Metode Hierarki dimana pada metode ini penentuan jumlah klaster dilakukan secara manual. Selanjutnya proses klaster dilakukan tanpa mempertimbangkan struktur hierarki (Santoso, 2010). Beberapa metodenya yakni K-Means, K-Medoids, dan DBSCAN.
1.5.2 K-Means
Klasterisasi dengan metode K-Means secara umum dilakukan dengan algoritma K-Means. Algoritma K-means adalah metode klasterisasi berbasis jarak yang hanya bekerja pada atribut numerik dan pembagian data dilakukan ke dalam sejumlah klaster. Algoritma ini dimulai dengan memilih secara acak sejumlah komponen dari populasi sebagai pusat awal klaster (centroid). Langkah pertama ini melibatkan pemilihan centroid dari data populasi dengan cara acak. Selanjutnya, algoritma mengukur jarak antara setiap objek data dengan centroid yang terdekat. Objek data akan masuk ke dalam klaster yang memiliki centroid terdekat, membentuk klaster baru. Kemudian, centroid baru untuk klaster tersebut dihitung dengan mengambil rata-rata dari semua objek yang berada dalam klaster yang sama. Jika terdapat perbedaan yang signifikan dengan centroid yang telah dibentuk sebelumnya, maka algoritma akan menghitung kembali centroid baru untuk memastikan akurasi dan ketepatan klaster yang terbentuk. Proses ini berulang hingga tidak ada perbedaan yang signifikan dengan centroid yang ada, sehingga membentuk klaster yang optimal berdasarkan data yang diberikan (Afriana,dkk. 2012).
1.5.3 PCA (Analisis Komponen Utama)
Analisis Komponen Utama atau Principal Component Analysis (PCA) ialah salah satu metode untuk mengekstraksi struktur dari suatu set data dengan dimensi yang banyak. Metode ini digunakan pada penelitian untuk meringkas data ke jumlah variabel yang lebih kecil (Santosa. 2007). Selain mereduksi variabel variabel yang ada dengan menjaga sebagian besar varians data, PCA dapat mengatasi kecurigaan beberapa variabel yang bersifat tumpang tindih juga memiliki nilai korelasi yang sangat tinggi (multikolinieritas).
Adapun langkah-langkah dalam melakukan PCA ialah:
Data Prepocessing (standarisasi data)
Perhitungan Matriks Kovarian/Korelasi
Dekomposisi Nilai dan Ventor Eigen
Pemilihan KU (Komponen Utama)
Pengurangan Dimensi/Variabel
Analisis Komponen Utama (PCA) adalah teknik serbaguna dan kuat untuk mengungkap pola, mengurangi dimensi, dan mengeksplorasi struktur yang mendasari dalam kumpulan data dimensi tinggi. Dengan mengekstraksi variasi paling signifikan dan menyimpan informasi penting, PCA telah menemukan aplikasi di berbagai bidang, termasuk analisis data, visualisasi, ekstraksi fitur, dan kompresi.
2 SOURCE CODE
2.1 Library
> library("knitr")
> library("rmarkdown")
> library("prettydoc")
> library(readxl)
> library(purrr)
> library(NbClust)
> library(ggplot2)
> library(factoextra)
> library(cluster)
> library(gridExtra)
> library(grid)
> library(psych)
> library(corrplot)
> library(dplyr)
> library(DT)Syntax library() digunakan dalam R untuk memuat
paket/package tertentu ke dalam sesi R. Adapun untuk detail library yang
digunakan ialah sebagai berikut:
knitr: Digunakan untuk menghasilkan laporan dinamis dan dokumentasi dalam format berbeda, termasuk HTML, PDF, dan Word.rmarkdown: Digunakan untuk membuat laporan interaktif dan dinamis dengan menggunakan sintaks Markdown di R.prettydoc: Memberikan tema tata letak yang menarik untuk dokumen R Markdown.readxl: Digunakan untuk membaca data dari file Excel (.xls dan .xlsx) ke dalam R.purrr: Memberikan fungsi-fungsi utilitas untuk memanipulasi dan memproses data dalam bentuk list.NbClust: Digunakan untuk mengevaluasi jumlah klaster yang optimal dalam analisis klaster.ggplot2: Package grafik yang powerful dan fleksibel untuk membuat visualisasi data menggunakan sintaksis “grammar of graphics”.factoextra: Memperluas fungsionalitas paket-paket analisis faktor seperti factoMineR dengan menambahkan visualisasi dan interpretasi hasil analisis faktor.cluster: Menyediakan berbagai algoritma analisis klaster, termasuk K-Means dan Hierarchical Clustering.gridExtra: Digunakan untuk menggabungkan beberapa plot dalam satu tata letak grid.grid: Memberikan alat untuk membuat dan mengelola tata letak grid grafik.psych: Menyediakan fungsi-fungsi statistik deskriptif dan visualisasi untuk analisis data psikologi.corrplot: Digunakan untuk membuat visualisasi matriks korelasi.dplyr: Package untuk melakukan manipulasi data, penggabungan data, dan transformasi data menggunakan ekspresi chaining (%>%).DT: Digunakan untuk membuat tabel interaktif di R Markdown dan Shiny menggunakan library DataTables JavaScript.
2.2 Syntax
2.2.1 Import Data
- Import Data
> data <- read_excel("C:/Users/ASUS/Downloads/ElectricCarData_Norm.xlsx")
> datatable(data, caption = "Data Kendaraan Listrik")Syntax menggunakan fungsi read_excel() dari paket
readxl untuk membaca data dari file Excel yang disimpan di
lokasi
“C:/Users/ASUS/Downloads/ElectricCarData_Norm.xlsx”.
Data dari file Excel ini dibaca dan disimpan ke dalam variabel data.
Selanjutnya penggunaan fungsi datatable() dari paket
DT untuk menampilkan data dalam format tabel interaktif
dengan data sebagai data yang dipakai dan pemberian
caption bertuliskan ‘Data Kendaraan Listrik’.
- Struktur Data
Syntax names() digunakan untuk emenampilkam nama nama
kolom dari dataset yang digunakan sebagai identitas variabel yang
dimuat. Syntax str() digunakan untuk menampilkan struktur
dataset berupa tipe data dan jumlah observasi pada setiap kolom
- Statistika Deskriptif
Syntax summary() digunakan untuk memberikan ringkasan
statistik deskriptif dari dataset data. Fungsi ini memberikan informasi
seperti rata-rata , nilai tengah , kuartil, minimum, dan maksimum untuk
setiap variabel dalam dataset. Jika variabel bersifat kategorik, maka
summary() akan memberikan informasi berupa distribusi
kategori dan jumlah observasinya
2.2.2 Uji Asumsi
- Uji Sampel Representatif
Uji sampel representatif dijalankan dengan syntax KMO()
dari paket psych yang digunakan untuk menghitung nilai
Kaiser-Meyer-Olkin (KMO) untuk variabel yang ditentukan. Pada syntax ini
perhitungan KMO dilakukan pada dataset data hanya dari
kolom 2 hingga 7
- Uji Non-Multikolinieritas
Pada uji Non-Multikolinieritas digunakan syntax cor()
untuk menghitung matriks korelasi antar variabel di dataset yang ada.
Pada syntax ini perhitungan hanya dilakukan pada dataset
data kolom 2 hingga 7 dan disimpan pada
korelasi. Selanjutnya untuk lebih memudahkan
interpretasi, digunakan corrplot() sebagai visualisasi
matriks korelasi yang diplotkan
2.2.3 PCA (Mengatasi Multikolinieritas)
2.2.3.1 Matriks Kovarians
- Standarisasi Nilai Eigen
Syntax di atas dilakukan untuk menyesuaikan data sebelum dilakukannya PCA
scale()digunakan untuk pengukuran standar deviasi (Z-score) pada variabel yang ditentukan dimana pada syntax ini standarisasi dilakukan pada data kolom 2 hingga 7 dan disimpan pada datastand.cov()digunakan untuk menghitung matriks kovarians dari data standarisasi sebelumnya dan disimpan pada standeigen()digunakan untuk menghitung nilai eigen dan vektor eigen dari matriks kovarians sebelumnya dan disimpan pada stand_eig. Nilai eigen memberikan informasi tentang seberapa banyak variabilitas yang dijelaskan oleh setiap komponen utama (eigenvalue), sedangkan vektor eigen memberikan bobot atau kontribusi dari masing-masing variabel terhadap komponen utama.
- Scree Plot
> plot(stand_eig$values, xlab="Eigenvalue Number", ylab = "Eigenvalue Size", main = "Scree Plot")
> lines(stand_eig$values)Visualisasi scree plot dilakukan untuk melihat dan memilih komponen utama yang dipertahankan.
plot()digunakan untuk membuat plot dimana pada syntax ini plot digambarkan dari nilai eigen dengan ‘xlab’ sebagai judul garis sumbu-x, ‘ylab’ sebagai judul garis sumbu-y, dan ‘main’ sebagai judul utama plot.lines()digunakan untuk menambah garis penghubung antar nilai eigen value pada syntaxplot()sebelumnya sehingga visualisasi komponen utama mana yang dipertahankan lebih jelas.
- Kumulatif Eigen
Fungsi for(){} merupakan suatu looping dimana pada
syntax ini dilakukan untuk mendapatkan nilai kumulatif eigen sebagai
penentuan jumlah komponen utama yang dipertahankan.
- Persamaan PCA
Syntax ini bertujuan untuk mengakses vektor eigen pertama sampai ketiga dimana sebelumnya telah ditentukan komponen utama yang dipertahankan.
2.2.3.2 Matriks Korelasi
- Korelasi Nilai Eigen
eigen() digunakan untuk menghitung nilai eigen dan
vektor eigen dari matriks korelasi dan disimpan pada
kor_eig. Nilai eigen memberikan informasi tentang
seberapa banyak variabilitas yang dijelaskan oleh setiap komponen utama
(eigenvalue), sedangkan vektor eigen memberikan bobot atau kontribusi
dari masing-masing variabel terhadap komponen utama.
- Scree Plot
> plot(kor_eig$values, xlab="Eigenvalue Number", ylab = "Eigenvalue Size", main = "Scree Plot")
> lines(kor_eig$values)Visualisasi scree plot dilakukan untuk melihat dan memilih komponen utama yang dipertahankan.
plot()digunakan untuk membuat plot dimana pada syntax ini plot digambarkan dari nilai eigen dengan ‘xlab’ sebagai judul garis sumbu-x, ‘ylab’ sebagai judul garis sumbu-y, dan ‘main’ sebagai judul utama plot.lines()digunakan untuk menambah garis penghubung antar nilai eigen value pada syntaxplot()sebelumnya sehingga visualisasi komponen utama mana yang dipertahankan lebih jelas.
- Kumulatif Eigen
Fungsi for(){} merupakan suatu looping dimana pada
syntax ini dilakukan untuk mendapatkan nilai kumulatif eigen sebagai
penentuan jumlah komponen utama yang dipertahankan.
- Persamaan PCA
Syntax ini bertujuan untuk mengakses vektor eigen pertama sampai ketiga dimana sebelumnya telah ditentukan komponen utama yang dipertahankan.
2.2.3.3 PCA
> pca_data <- prcomp(data[,2:7], center = TRUE, scale = TRUE)
> summary(pca_data)
> pers_KU <- as.data.frame(-pca_data$rotation[,1:3])
> rekon_data <- as.data.frame(-pca_data$x[,1:3])Syntax diatas merupakan kumpulan syntax untuk melakukan PCA
prcomp()digunakan untuk melakukan analisis komponen utama (PCA) dimana data yang digunakan adalah dataset data kolom 2 sampai 7 dengan ‘center = TRUE’ sebagai indikasi bahwa variabel akan dicenter sebelum analisis PCA dan ‘scale = TRUE’ sebagai indikas variabel akan di-scale sebelum analisis PCA.summary)digunakan untuk menampilkan ringkasan hasil analisis PCA mencakup nilai eigen dan varianas pada setiap komponen utama.as.data.frame()digunakan unruk mengonversi hasil ke dalam bentuk data frame. Pada pers_KU digunakan untuk melihat persamaan komponen utama sedangkan rekon_data digunakan untuk representasi ulang data asli ke dalam PCA
2.2.4 Uji Asumsi PCA (Variabel Tereduksi)
- Uji Sampel Representatif
Uji sampel representatif dijalankan dengan syntax KMO()
dari paket psych yang digunakan untuk menghitung nilai
Kaiser-Meyer-Olkin (KMO) untuk variabel yang ditentukan. Pada syntax ini
perhitungan KMO dilakukan pada dataset rekon_data.
- Uji Non-Multikolinieritas
Pada uji Non-Multikolinieritas digunakan syntax cor()
untuk menghitung matriks korelasi antar variabel di dataset yang ada.
Pada syntax ini perhitungan dilakukan pada dataset
rekon_data dan disimpan pada
korelasi_lagi. Selanjutnya untuk lebih memudahkan
interpretasi, digunakan corrplot() sebagai visualisasi
matriks korelasi yang diplotkan
2.2.5 K-Means Clustering
- Penentuan K Optimal
> #Metode Elbow
> iss <- function(k) {
+ kmeans(datastand[,1:3],k,iter.max=50,nstart=100,algorithm="Lloyd")$tot.withinss
+ }
> k.values <- 1:8
> iss_values <- map_dbl(k.values, iss)
> plot(k.values, iss_values,
+ type="b", pch = 19, frame = FALSE,
+ xlab="Jumlah cluster K",
+ ylab="Jumlah Total Intra-cluster Kuadrat")
>
> #Metode Lainnya
> fviz_nbclust(datastand[,1:3], kmeans, method = "wss")
> fviz_nbclust(datastand[,1:3], kmeans, method = "silhouette")
> fviz_nbclust(datastand[,1:3], kmeans, method = "gap_stat")
>
> #K yang ditentukan
> set.seed(111)
> k2<-kmeans(datastand[,1:3],centers = 2,iter.max=100,nstart=50,algorithm="Lloyd")Syntax diatas digunakan untuk mencari k yang tepat dan optimal dimana
pada ‘#Metode Elbow’ menggunakan fungsi nbernama iss
sekaligus menggunakan syntax plot() untuk menggambarkan
titik penurunan. Metode lainnya menggunakan fungsi
fviz_nbclust() dari paket factoextra untuk
menghasilkan grafik nilai tiap metode (WSS,Silhoutte, dan Gap
Statistic). Setelah penentuan k didapat secara optimal, selanjutnya
dengan fungsi ‘kmeans()’ dilakukan algoritma K-Means dengan dataset dari
datastand kolom 1 sampai 3, ‘centers’ berisi nilai k
yang optimal, ‘iter.max’ berisi nilai iterasi maksimal yang
dilakukan
- Pengembalian Nilai Terstandarisasi
> rerata.klaster <- data %>% mutate(Klaster = k2$cluster) %>% group_by(Klaster) %>% summarise(Mean_Accel = mean(Accel), Mean_TopSpeed = mean(TopSpeed), Mean_Range = mean(Range)) %>% mutate(Total_Mean = Mean_Accel + Mean_TopSpeed + Mean_Range) %>% arrange(Klaster)Pada analisis sebelumnya nilai masih berupa standarisasi sehingga
perlu dikembalikan ke nilai awal agar tiap klaster dapat diketahui
karakteristik sebenarnya. pada syntax ini digunakan %>%
dari paket dplyr sebagai penggabungan beberapa fungsi atau
operasi ke dalam urutan yang mudah dibaca (dari kiri ke kanan).
mutate(Klaster = k2$cluster) : Menambahkan kolom baru bernama “Klaster” ke dataset, dan mengisinya dengan hasil klaster yang telah ditentukan oleh cluster di k2. Setiap baris data sekarang memiliki label klaster.
group_by(Klaster) %>% summarise(Mean_Accel = mean(Accel), Mean_TopSpeed = mean(TopSpeed), Mean_Range = mean(Range)): Mengelompokkan data berdasarkan kolom “Klaster”, kemudian menghitung rata-rata dari variabel “Accel”, “TopSpeed”, dan “Range” untuk setiap klaster. Hasilnya adalah dataframe baru yang berisi rata-rata variabel-variabel tersebut untuk setiap klaster.
mutate(Total_Mean = Mean_Accel + Mean_TopSpeed + Mean_Range): Menambahkan kolom baru bernama “Total_Mean” ke dataframe hasil kelompokkan, yang berisi total rata-rata dari variabel “Accel”, “TopSpeed”, dan “Range” untuk setiap klaster.
arrange(Klaster): Mengurutkan hasil berdasarkan kolom “Klaster”, sehingga dataframe diurutkan berdasarkan nomor klaster.
Hasil akhir berupa data frame bernama rerata.klaster berisi informasi klaster, rata rata 3 variabel (Accel, Top Speed, Range) yang didapat sebelumnya dari reduksi PCA, dan total rata rata ke-3 variabel tersebut
- Klasterisasi Objek
> klasterisasi <- data %>% mutate (Klaster = k2$cluster) %>% select(Brand_Model, Klaster) %>% arrange(Klaster)
> datatable(klasterisasi)Kali ini akan dibuat daftar klaster dari tiap tiap objek di variabel
Y. Pada syntax ini digunakan %>% dari paket
dplyr sebagai penggabungan beberapa fungsi atau operasi ke
dalam urutan yang mudah dibaca (dari kiri ke kanan).
mutate(Klaster = k2$cluster): Menambahkan kolom baru bernama “Klaster” ke dataset data, dan mengisinya dengan hasil klaster yang telah ditentukan oleh cluster di k2.. Setiap baris data sekarang memiliki label klaster.
select(Brand_Model, Klaster): Memilih kolom “Brand_Model” dan “Klaster” dari dataset. Kedua kolom ini akan ditampilkan dalam hasil klasterisasi.
arrange(Klaster): Mengurutkan baris berdasarkan kolom “Klaster”, sehingga baris-baris data disusun berdasarkan klasternya.
datatable(klasterisasi): Menggunakan fungsi
datatable()dari paketDTuntuk membuat tabel interaktif dari data klasterisasi. Tabel ini dapat ditampilkan dan dijelajahi secara interaktif dalam lingkungan RStudio atau dalam aplikasi web menggunakan paket shiny.
Hasil akhir berupa data frame bernama klasterisasi berisi daftar subjek disertai klaster yang memenuhinya.
- Cluster Plot
> #Cluster Plot
> fviz_cluster(k2, data=datastand[,1:3])
> clusplot(datastand[,1:3], k2$cluster, main='2D representation of the Cluster solution',
+ color=TRUE, shade=TRUE,labels=2, lines=0)Syntax diatas digunakan untuk menampilkan plot klasterisasi dari
Algoritma K-Means. Plot yang digunakan ada 2 yakni
fviz_cluster() dari paket factoextra dan
clusplot() dari paket cluster. Hasil yang ditunjukkan tidak
ada perbedaan signifikan dan mencakup bentuk dan data klaster yang
sama.
Perbedaan dari penggunaan kedua plot ini ialah
clusterplot() secara khusus digunakan untuk membuat scatter
plot data klaster dalam visualisasi 2 atau 3 variabel secara bersamaan
dalam 2 atau 3 dimensi, sedangkan fviz_cluster() merupakan
fungsi yang dapat menghasilkan berbagai jenis viasualisasi klaster
(scatter plot, heatmap, dan dendogram) tergantung metode klaster yang
digunakan.
- Visualisasi Plot
> set.seed(1)
> ggplot(data,
+ aes(x = Accel, y = TopSpeed)) +
+ geom_point(stat = "identity", aes(color = as.factor(k2$cluster))) +
+ scale_color_discrete(name=" ",breaks=c("1", "2"),
+ labels=c("Cluster 1", "Cluster 2")) +
+ ggtitle("Segmen Kendaraan Listrik berdasarkan Akselerasi dan Top Speed",
+ subtitle = "Menggunakan K-means Clustering")
>
> set.seed(2)
> ggplot(data,
+ aes(x = Accel, y = Range)) +
+ geom_point(stat = "identity", aes(color = as.factor(k2$cluster))) +
+ scale_color_discrete(name=" ",breaks=c("1", "2"),
+ labels=c("Cluster 1", "Cluster 2")) +
+ ggtitle("Segmen Kendaraan Listrik berdasarkan Akselerasi dan Range",
+ subtitle = "Menggunakan K-means Clustering")
>
> set.seed(3)
> ggplot(data,
+ aes(x = Range, y = TopSpeed)) +
+ geom_point(stat = "identity", aes(color = as.factor(k2$cluster))) +
+ scale_color_discrete(name=" ",breaks=c("1", "2"),
+ labels=c("Cluster 1", "Cluster 2")) +
+ ggtitle("Segmen Kendaraan Listrik berdasarkan Range dan Top Speed",
+ subtitle = "Menggunakan K-means Clustering")Pada Syntax diatas, digunakan fungsi ggplot() untuk
membuat visualisasi hasil klaster berdasarkan variabel yang ada.
Ditambah dengan fungsi ggtitle() yang berfungsi untuk
penambahan judul dan subjudul. Adapun plot klasterisasi disyntax ini
dibuat berdasarkan:
Segmen Kendaraan Listrik berdasarkan Akselerasi dan Top Speed
Segmen Kendaraan Listrik berdasarkan Akselerasi dan Range
Segmen Kendaraan Listrik berdasarkan Range dan Top Speed
3 HASIL DAN PEMBAHASAN
3.1 Import Data
3.1.1 Import Data
Data yang digunakan ialah sebanyak 50 kendaran listrik dari brand dan model yang berbeda, adapun variabel yang mempengaruhinya ialah Accel (Akselerasi ~ Detik), Top Speed (Kecepatan Tertinggi ~ Km/Jam), Range (Jarak ~ Km), Efficiency (Efisiensi ~ Wh/Km), Fast Charge (Penambahan Jarak Tempuh Selama Pengecasan ~ Km/Jam), dan PriceEuro (Harga Kendaraan ~ Ribuan Euro)
3.1.2 Struktur Data
> names(data)
[1] "Brand_Model" "Accel" "TopSpeed" "Range" "Efficiency"
[6] "FastCharge" "PriceEuro"
> str(data)
tibble [50 × 7] (S3: tbl_df/tbl/data.frame)
$ Brand_Model: chr [1:50] "Tesla Model 3 Long Range Dual Motor" "Volkswagen ID.3 Pure" "Polestar 2" "BMW iX3" ...
$ Accel : num [1:50] 4.6 10 4.7 6.8 9.5 2.8 9.6 8.1 5.6 6.3 ...
$ TopSpeed : num [1:50] 233 160 210 180 145 250 150 150 225 180 ...
$ Range : num [1:50] 450 270 400 360 170 610 190 275 310 400 ...
$ Efficiency : num [1:50] 161 167 181 206 168 180 168 164 153 193 ...
$ FastCharge : num [1:50] 940 250 620 560 190 620 220 420 650 540 ...
$ PriceEuro : num [1:50] 55.5 30 56.4 68 33 ...Dapat diketahui dari data tersebut, variabel yang ada sejumlah 7 variabel yakni:
Brand_Model dengan struktur data character
Accel dengan struktur data numeric
Top Speed dengan struktur data numeric
Range dengan struktur data numeric
Efficiency dengan struktur data numeric
Fast Charge dengan struktur data numeric
PriceEuro dengan struktur data numeric
3.1.3 Statistika Deskriptif
> summary(data)
Brand_Model Accel TopSpeed Range
Length:50 Min. : 2.80 Min. :130.0 Min. :170.0
Class :character 1st Qu.: 5.10 1st Qu.:150.0 1st Qu.:258.8
Mode :character Median : 7.50 Median :160.0 Median :342.5
Mean : 7.28 Mean :176.2 Mean :342.2
3rd Qu.: 9.00 3rd Qu.:200.0 3rd Qu.:400.0
Max. :12.30 Max. :261.0 Max. :750.0
Efficiency FastCharge PriceEuro
Min. :104.0 Min. :170.0 Min. : 20.13
1st Qu.:166.0 1st Qu.:232.5 1st Qu.: 33.00
Median :173.0 Median :420.0 Median : 40.87
Mean :178.5 Mean :443.6 Mean : 52.73
3rd Qu.:187.0 3rd Qu.:585.0 3rd Qu.: 61.22
Max. :267.0 Max. :940.0 Max. :180.78 Statistika deskriptif menunjukkan rata rata, kuartil, median, min dan max dari tiap tiap variabel. dapat dilihat dari output bahwa variabel Brand_Model tidak menunjukkan hal itu karena berjenis data character. Dapat ditarik kesimpulan bahwa data variabel sangat beragam karena rentang antara nilai min dan max cukup besar sehingga perlu dilakukan standarisasi nantinya.
3.2 Uji Asumsi
3.2.1 Uji Sampel Representatif
> kmo <- KMO(data[,2:7])
> kmo
Kaiser-Meyer-Olkin factor adequacy
Call: KMO(r = data[, 2:7])
Overall MSA = 0.82
MSA for each item =
Accel TopSpeed Range Efficiency FastCharge PriceEuro
0.80 0.77 0.85 0.75 0.86 0.89 Uji sampel representatif menggunakan uji KMO (Kaiser-Maiyer-Olkin) dimana pada penelitian ini hanya menggunakan kolom 2 sampai 7 dari dataset data dikarenakan kolom 1 bukan merupakan numerik, lalu didapati pada masing masing variabel telah bernilai lebih dari sama dengan 0.5. Oleh karena itu dapat disimpulkan bahwa pada dataset ini sampel telah representatif.
3.2.2 Uji Non-Multikolinieritas
> korelasi <- cor(data[,2:7], method = 'pearson')
> korelasi
Accel TopSpeed Range Efficiency FastCharge PriceEuro
Accel 1.0000000 -0.8786955 -0.6506122 -0.4974076 -0.8023902 -0.6150945
TopSpeed -0.8786955 1.0000000 0.6051384 0.3599214 0.8400310 0.6845862
Range -0.6506122 0.6051384 1.0000000 0.2984722 0.7056489 0.5879588
Efficiency -0.4974076 0.3599214 0.2984722 1.0000000 0.2870451 0.2951050
FastCharge -0.8023902 0.8400310 0.7056489 0.2870451 1.0000000 0.6303883
PriceEuro -0.6150945 0.6845862 0.5879588 0.2951050 0.6303883 1.0000000
> corrplot(korelasi, method="number")Berdasarkan output diatas dan dilihat dari plot yang dihasilkan, dapat diketahui bahwa terdapat variabel yang memiliki nilai korelasi diatas 0.8 yakni variabel Accel dengan TopSpeed dan variabel FastCharge dengan Accel. Jika nilai korelasi lebih dari 0.8 maka terjadi multikolinieritas (Gujarati. 1997). Dengan ini perlu dilakukan tindakan sehingga peneliti pada penelitian ini akan menggunakan Analisis Komponen Utama (PCA) untuk mengatasi multikolinieritas
3.3 PCA (Mengatasi Multikolinieritas)
Pada penelitian ini, PCA difokuskan untuk menghilangkan multikolinieritas dengan mereduksi variabel tanpa mengorbankan banyak informasi. Terdapat dua jenis bentuk input dalam pemrosesan pembentukan komponen utama yaitu matriks kovarians dan matriks korelasi. Keduanya mmeiliki langkah yang sama seperti berikut:
3.3.1 Matriks Kovarians
3.3.1.1 Standarisasi Nilai Eigen
> datastand <- scale(data[,2:7])
> datastand
Accel TopSpeed Range Efficiency FastCharge PriceEuro
[1,] -1.054798511 1.5173586 0.92133524 -0.70452930 2.25581582 0.08538066
[2,] 1.070541772 -0.4313954 -0.61707240 -0.46297640 -0.87978635 -0.70537640
[3,] -1.015440358 0.9033676 0.49399979 0.10064704 0.80162351 0.11517370
[4,] -0.188919136 0.1025098 0.15213142 1.10711747 0.52896245 0.47517299
[5,] 0.873751005 -0.8318243 -1.47174331 -0.42271758 -1.15244741 -0.61236624
[6,] -1.763245272 1.9711780 2.28880870 0.06038823 0.80162351 1.62220520
[7,] 0.913109159 -0.6983480 -1.30080913 -0.42271758 -1.01611688 -0.64641100
[8,] 0.322736858 -0.6983480 -0.57433885 -0.58375285 -0.10724668 -0.71524534
[9,] -0.661216977 1.3037965 -0.27520403 -1.02659983 0.93795404 -0.19703258
[10,] -0.385709903 0.1025098 0.49399979 0.58375285 0.43807543 0.07048414
[11,] -0.858007744 0.1025098 0.23759851 1.50970564 -0.01635966 0.51998669
[12,] 0.244020551 -0.8585195 -1.04440785 -0.58375285 -0.97067337 -0.72914876
[13,] 0.244020551 -0.2445286 0.49399979 -0.74478811 -0.28902072 -0.37035982
[14,] -1.290947431 0.6364150 0.92133524 -0.02012941 0.93795404 0.38082835
[15,] 0.952467312 -0.2979191 -0.78800658 -1.02659983 -1.06156039 -0.56699391
[16,] 0.244020551 -0.4313954 0.83586815 -0.14090586 0.66529298 -0.36598396
[17,] -1.763245272 2.2381306 0.28033206 1.79151736 1.52871967 3.97402468
[18,] 1.818346687 -1.2322532 -1.25807558 -0.50323521 -1.24333443 -0.97162070
[19,] 0.362095011 -0.9653006 -1.04440785 0.58375285 -0.83434284 -0.70537640
[20,] 0.007871631 -0.6983480 -1.34354267 -0.90582338 -0.83434284 -0.65320753
[21,] 0.322736858 -0.6983480 -0.57433885 -0.58375285 -0.10724668 -0.73187979
[22,] -0.858007744 1.0902344 0.70766752 -0.30194113 2.21037231 0.18282874
[23,] 1.070541772 -0.4313954 -0.44613822 0.02012941 -0.97067337 -0.55020429
[24,] -1.487738198 1.7042254 0.70766752 0.74478811 1.84682424 2.24289363
[25,] -1.527096352 2.2648258 0.79313461 -0.46297640 2.11948529 0.27158719
[26,] 0.086587937 -0.4313954 0.66493397 0.18116468 0.52896245 -0.23986008
[27,] 0.676960238 -0.4313954 0.06666433 -0.50323521 0.21085789 -0.61227313
[28,] -0.936724051 0.1025098 0.28033206 0.86556457 0.11997087 0.23921828
[29,] 0.007871631 -0.6983480 -0.91620722 -0.70452930 -0.78889933 -0.45657344
[30,] 0.480169471 -0.6983480 -0.78800658 0.06038823 -0.28902072 -0.57003528
[31,] -0.188919136 0.3694624 -0.53160531 2.11358789 0.02908385 0.45400751
[32,] 0.204662398 -0.2445286 0.23759851 -0.22142349 -0.42535125 -0.45384241
[33,] 1.621555920 -1.0987769 -0.23247049 -0.54349403 -0.97067337 -0.66863164
[34,] -1.684528965 0.9033676 3.48534798 3.56290531 1.21061510 0.69117256
[35,] 0.676960238 -0.6983480 -1.38627622 -0.02012941 -0.92522986 -0.62325932
[36,] 0.007871631 -0.5114812 -0.14700340 -0.26168231 -0.24357721 -0.48078029
[37,] 0.086587937 -0.4313954 -0.61707240 0.58375285 -1.15244741 -0.08468797
[38,] -0.306993596 -0.4313954 0.70766752 0.10064704 0.57440596 -0.23986008
[39,] 0.873751005 -0.9653006 -0.27520403 -0.42271758 -0.97067337 -0.60814555
[40,] -0.897365897 0.6364150 0.06666433 -0.30194113 -0.01635966 -0.23986008
[41,] -1.369663738 1.9711780 1.47687134 0.22142349 0.52896245 0.84603432
[42,] 1.031183619 -0.5648717 -0.74527304 -0.98634102 -1.06156039 -0.58213871
[43,] -0.621858824 0.6364150 0.32306560 1.99281144 0.75618000 0.89721009
[44,] 1.975779300 -1.2322532 -1.25807558 -0.50323521 -1.24333443 -0.87501054
[45,] 1.975779300 -1.2322532 -1.25807558 -0.50323521 -1.24333443 -1.01171717
[46,] 0.244020551 -0.2445286 0.19486497 -0.14090586 -0.47079476 -0.49319406
[47,] 0.007871631 -0.6983480 -0.06153631 -0.22142349 -1.06156039 -0.33588058
[48,] -1.290947431 1.9711780 0.19486497 0.66427048 1.30150212 1.55842947
[49,] 1.070541772 -0.6983480 1.98967388 -2.99928187 0.43807543 2.98771974
[50,] 0.676960238 -0.6983480 -0.06153631 0.38245876 -0.42535125 -0.51740091
attr(,"scaled:center")
Accel TopSpeed Range Efficiency FastCharge PriceEuro
7.28000 176.16000 342.20000 178.50000 443.60000 52.72884
attr(,"scaled:scale")
Accel TopSpeed Range Efficiency FastCharge PriceEuro
2.54077 37.45983 117.00410 24.83928 220.05343 32.22229
> stand <- cov(datastand)
> stand
Accel TopSpeed Range Efficiency FastCharge PriceEuro
Accel 1.0000000 -0.8786955 -0.6506122 -0.4974076 -0.8023902 -0.6150945
TopSpeed -0.8786955 1.0000000 0.6051384 0.3599214 0.8400310 0.6845862
Range -0.6506122 0.6051384 1.0000000 0.2984722 0.7056489 0.5879588
Efficiency -0.4974076 0.3599214 0.2984722 1.0000000 0.2870451 0.2951050
FastCharge -0.8023902 0.8400310 0.7056489 0.2870451 1.0000000 0.6303883
PriceEuro -0.6150945 0.6845862 0.5879588 0.2951050 0.6303883 1.0000000
> stand_eig <- eigen(stand)
> stand_eig
eigen() decomposition
$values
[1] 4.01720407 0.83781176 0.45294538 0.43399780 0.16500517 0.09303581
$vectors
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 0.4603513 0.09849014 -0.3628254 0.04878717 -0.52618174 0.6062068
[2,] -0.4582084 0.09774279 0.4124169 0.18761380 0.19486424 0.7329616
[3,] -0.3977942 0.17403739 -0.5636575 -0.65503020 0.19735152 0.1604645
[4,] -0.2511482 -0.93428575 -0.1367151 -0.01108985 -0.18894060 0.0975815
[5,] -0.4491895 0.22159356 0.2589947 -0.17626427 -0.78077403 -0.2033951
[6,] -0.3937447 0.16871118 -0.5429465 0.70863548 -0.03010715 -0.1365284Dilakukan standarisasi data sebagai langkah awal untuk PCA, nilai
variabel diubah sehinga memiliki rata rata 0 dan standar deviasi 1 yang
ditampilkan pada datastand. Selanjutnya dihitung
matriks kovarian dari dataset yang sudah distandarisasi untuk menyajikan
hubungan kovarian antar variabel dalam dataset dan ditampilkan pada
stand. Tahap terakhir yakni mencari nilai eigen dari
matriks kovarian sebelumnya dan ditampilkan pada
stand_eig. output menunjukkan
stand_eig$value yang berisi nilai eigen (besaran variasi
setiap komponen utama) dan stand_eig$vectors berisi vektor
eigen (arah komponen utama)
3.3.1.2 Scree Plot
> plot(stand_eig$values, xlab="Eigenvalue Number", ylab = "Eigenvalue Size", main = "Scree Plot Eigen Matriks Kovarians")
> lines(stand_eig$values)Berdasarkan screeplot diatas, didapati kurva mulai melandai atau membentuk siku di nilai eigen 2 atau 3, sehingga peneliti memutuskan untuk memilih 3 Komponen Utama karena pada eigen value selanjutnya jauh lebih landai. Untuk lebih memastikan nilainya, maka dilakukan perhitungan kumulatif eigen.
3.3.1.3 Kumulatif Eigen
> for (eg in stand_eig$values){print(eg / sum(stand_eig$values))}
[1] 0.669534
[1] 0.1396353
[1] 0.0754909
[1] 0.07233297
[1] 0.02750086
[1] 0.01550597Nilai kumulatif eigen perlu dilakukan untuk lebih memastikan berapa Komponen Utama yang diperlukan. Output yang ingin dicapai yakni minimal 75% keragaman, pada output, diketahui 2 komponen utama telah memenuhi yakni sekitar 80.91% namun menurut peneliti angka tersebut terlalu mendekati nilai minimal sehingga diambil 3 Komponen Utama yang telah mencapai 88.45% keragaman dalam data.
3.3.1.4 Persamaan PCA
> stand_eig$vectors[,1:3]
[,1] [,2] [,3]
[1,] 0.4603513 0.09849014 -0.3628254
[2,] -0.4582084 0.09774279 0.4124169
[3,] -0.3977942 0.17403739 -0.5636575
[4,] -0.2511482 -0.93428575 -0.1367151
[5,] -0.4491895 0.22159356 0.2589947
[6,] -0.3937447 0.16871118 -0.5429465Dengan terpilihnya 3 Komponen Utama sebagai hasil PCA, didapati persamaan PCA dari output sebagai berikut: \[PC1 = 0.4603X1-0.4582X2-0.3977X3-0.2511X4-0.4491X5-0.3937X6\] \[PC2 = 0.0984X1+0.0977X2+0.1740X3-0.9342X4+0.2215X5-0.1687X6\] \[PC3 = -0.3628X1+0.4124X2-0.5636X3-0.1367X4+0.2589X5-0.5429X6\]
3.3.2 Matriks Korelasi
3.3.2.1 Korelasi Nilai Eigen
> kor_eig <- eigen(korelasi)
> kor_eig
eigen() decomposition
$values
[1] 4.01720407 0.83781176 0.45294538 0.43399780 0.16500517 0.09303581
$vectors
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 0.4603513 0.09849014 -0.3628254 0.04878717 -0.52618174 0.6062068
[2,] -0.4582084 0.09774279 0.4124169 0.18761380 0.19486424 0.7329616
[3,] -0.3977942 0.17403739 -0.5636575 -0.65503020 0.19735152 0.1604645
[4,] -0.2511482 -0.93428575 -0.1367151 -0.01108985 -0.18894060 0.0975815
[5,] -0.4491895 0.22159356 0.2589947 -0.17626427 -0.78077403 -0.2033951
[6,] -0.3937447 0.16871118 -0.5429465 0.70863548 -0.03010715 -0.1365284Mencari nilai eigen dari korelasi sebelumnya dan ditampilkan pada
kor_eig. output menunjukkan
stand_eig$value yang berisi nilai eigen (besaran variasi
setiap komponen utama) dan stand_eig$vectors berisi vektor
eigen (arah komponen utama)
3.3.2.2 Scree Plot
> plot(kor_eig$values, xlab="Eigenvalue Number", ylab = "Eigenvalue Size", main = "Scree Plot Eigen Matriks Korelasi")
> lines(kor_eig$values)Berdasarkan screeplot diatas, didapati kurva mulai melandai atau membentuk siku di nilai eigen 2 atau 3, sehingga peneliti memutuskan untuk memilih 3 Komponen Utama karena pada eigen value selanjutnya jauh lebih landai. Untuk lebih memastikan nilainya, maka dilakukan perhitungan kumulatif eigen.
3.3.2.3 Kumulatif Eigen
> for (eg in kor_eig$values){print(eg / sum(kor_eig$values))}
[1] 0.669534
[1] 0.1396353
[1] 0.0754909
[1] 0.07233297
[1] 0.02750086
[1] 0.01550597Nilai kumulatif eigen perlu dilakukan untuk lebih memastikan berapa Komponen Utama yang diperlukan. Output yang ingin dicapai yakni minimal 75% keragaman, pada output, diketahui 2 komponen utama telah memenuhi yakni sekitar 80.91% namun menurut peneliti angka tersebut terlalu mendekati nilai minimal sehingga diambil 3 Komponen Utama yang telah mencapai 88.45% keragaman dalam data.
3.3.2.4 Persamaan PCA
> kor_eig$vectors[,1:3]
[,1] [,2] [,3]
[1,] 0.4603513 0.09849014 -0.3628254
[2,] -0.4582084 0.09774279 0.4124169
[3,] -0.3977942 0.17403739 -0.5636575
[4,] -0.2511482 -0.93428575 -0.1367151
[5,] -0.4491895 0.22159356 0.2589947
[6,] -0.3937447 0.16871118 -0.5429465Dengan terpilihnya 3 Komponen Utama sebagai hasil PCA, didapati persamaan PCA dari output sebagai berikut:
\[PC1 = 0.4603X1-0.4582X2-0.3977X3-0.2511X4-0.4491X5-0.3937X6\] \[PC2 = 0.0984X1+0.0977X2+0.1740X3-0.9342X4+0.2215X5-0.1687X6\] \[PC3 = -0.3628X1+0.4124X2-0.5636X3-0.1367X4+0.2589X5-0.5429X6\]
3.3.3 Analisis PCA
Sebelumnya, telah ditentukan bahwa akan digunakan 3 Komponen Utama hasil dari analisis PCA dimana variabel yang tersisa setelah tereduksi ialah variabel Accel, TopSpeed, dan Range. Selanjutnya akan dilakukan rekonstruksi data sesuai hasil analisis PCA
> pca_data <- prcomp(data[,2:7], center = TRUE, scale = TRUE)
> summary(pca_data)
Importance of components:
PC1 PC2 PC3 PC4 PC5 PC6
Standard deviation 2.0043 0.9153 0.67301 0.65879 0.4062 0.30502
Proportion of Variance 0.6695 0.1396 0.07549 0.07233 0.0275 0.01551
Cumulative Proportion 0.6695 0.8092 0.88466 0.95699 0.9845 1.00000
> pers_KU <- as.data.frame(-pca_data$rotation[,1:3])
> pers_KU
PC1 PC2 PC3
Accel -0.4603513 -0.09849014 0.3628254
TopSpeed 0.4582084 -0.09774279 -0.4124169
Range 0.3977942 -0.17403739 0.5636575
Efficiency 0.2511482 0.93428575 0.1367151
FastCharge 0.4491895 -0.22159356 -0.2589947
PriceEuro 0.3937447 -0.16871118 0.5429465
> rekon_data <- as.data.frame(-pca_data$x[,1:3])
> rekon_data
PC1 PC2 PC3
1 2.4173118 -1.37728101 -1.123382e+00
2 -1.7251668 -0.07447072 9.951709e-05
3 1.5086074 -0.17729384 -5.938681e-01
4 0.8972089 0.81909292 2.472833e-01
5 -2.2337802 0.21513628 -2.612779e-01
6 3.6393792 -0.81224337 5.188173e-01
7 -2.0749089 0.14399837 -2.594907e-01
8 -1.1734365 -0.26452838 -3.589943e-01
9 0.8782379 -1.14815813 -1.422990e+00
10 0.7921833 0.37842040 1.008423e-01
11 1.1130244 1.35952877 2.733021e-01
12 -1.7908986 0.03436505 -3.703808e-01
13 -0.4905745 -0.65542309 2.397767e-01
14 1.8186146 -0.38630736 -2.504471e-01
15 -1.8463644 -0.55579102 -1.489802e-01
16 0.1418495 -0.34466553 3.473139e-01
17 4.6501294 0.57068517 6.018984e-01
18 -2.9696121 0.12957953 1.844998e-01
19 -1.5303669 1.08973626 -1.462882e-01
20 -1.7175371 -0.24989959 -7.288375e-01
21 -1.1799862 -0.26172196 -3.680259e-01
22 2.1650775 -0.94796668 -8.765445e-01
23 -1.5155664 0.34109992 2.702851e-01
24 3.6470324 -0.23500949 -2.481085e-03
25 2.9989782 -1.15703788 -1.505840e+00
26 0.2156370 0.01042634 3.416643e-01
27 -0.7555406 -0.44970311 5.266443e-03
28 0.9551730 0.77519129 -6.986104e-03
29 -1.3991545 -0.17945011 -3.654545e-01
30 -1.1936070 0.37474545 -2.083255e-01
31 0.7674415 1.96666769 7.368218e-03
32 -0.5371178 -0.07365677 1.425082e-01
33 -2.1782136 -0.19172931 7.245263e-01
34 4.2866153 2.41492955 1.529618e+00
35 -1.8491451 0.53421765 -3.492749e-01
36 -0.6609038 -0.03459549 -1.027888e-01
37 -0.8874019 0.95608610 1.938182e-01
38 0.4140128 -0.04354346 2.001724e-01
39 -1.7356510 -0.02105198 4.234214e-01
40 0.5536087 -0.22343239 -7.177537e-01
41 2.7475636 -0.36787821 -1.248215e-01
42 -1.9837746 -0.50472000 1.104413e-02
43 1.8998287 1.48573782 2.577418e-01
44 -3.0040466 0.09777476 2.940745e-01
45 -3.0578742 0.12083870 2.198501e-01
46 -0.5879210 0.02183960 1.341131e-01
47 -1.0127945 0.16322177 3.184825e-01
48 2.9400906 -0.03014716 -5.716210e-01
49 0.5985799 -3.78677970 2.896590e+00
50 -0.9548406 0.55116638 3.804741e-01Selain didapat rekonstruksi data pada rekon_data, didapati juga persamaan PCA dari pers_KU sebagai berikut:
\[PC1 = 0.4603X1-0.4582X2-0.3977X3-0.2511X4-0.4491X5-0.3937X6\] \[PC2 = 0.0984X1+0.0977X2+0.1740X3-0.9342X4+0.2215X5-0.1687X6\] \[PC3 = -0.3628X1+0.4124X2-0.5636X3-0.1367X4+0.2589X5-0.5429X6\]
3.4 Uji Asumsi PCA (Variabel Tereduksi)
Data dari rekonstruksi PCA sebelumnya, perlu diperiksa kembali asumsi yang harus terpenuhi
- Uji Sampel Representatif
> kmo_lagi <- KMO(rekon_data)
> kmo_lagi
Kaiser-Meyer-Olkin factor adequacy
Call: KMO(r = rekon_data)
Overall MSA = 0.5
MSA for each item =
PC1 PC2 PC3
0.5 0.5 0.5 Uji sampel representatif menggunakan uji KMO (Kaiser-Maiyer-Olkin) didapati pada masing masing variabel telah bernilai lebih dari sama dengan 0.5. Oleh karena itu dapat disimpulkan bahwa pada dataset rekon_data ini telah representatif.
- Uji Non-Multikolinieritas
> korelasi_lagi <- cor(rekon_data, method = 'pearson')
> korelasi_lagi
PC1 PC2 PC3
PC1 1.000000e+00 -3.007863e-17 2.319228e-16
PC2 -3.007863e-17 1.000000e+00 -9.019492e-17
PC3 2.319228e-16 -9.019492e-17 1.000000e+00
> corrplot(korelasi_lagi, method="number")Berdasarkan output diatas dan dilihat dari plot yang dihasilkan, dapat diketahui bahwa dataset setelah dilakukan PCA tidak terdapat variabel yang memiliki nilai korelasi diatas 0.8. Jika nilai korelasi lebih dari 0.8 maka terjadi multikolinieritas (Gujarati. 1997). Dengan ini tidak perlu dilakukan tindakan sehingga peneliti dapat melanjutkan ke tahap klasterisasi
3.5 K-Means Clustering
3.5.1 Penentuan K
> #Metode Elbow
> iss <- function(k) {
+ kmeans(datastand[,1:3],k,iter.max=50,nstart=100,algorithm="Lloyd")$tot.withinss
+ }
> k.values <- 1:8
> iss_values <- map_dbl(k.values, iss)
> plot(k.values, iss_values,
+ type="b", pch = 19, frame = FALSE,
+ xlab="Jumlah cluster K",
+ ylab="Jumlah Total Intra-cluster Kuadrat",
+ main="Metode Elbow")Penentuan K dengan metode elbow menghasilkan grafik seperti output diatas. Didapati bahwa kurva mulai melandai atau membentuk siku pada k = 2 atau 3. Dikarenakan penentuan berupa visual sehingga persepsi tiap individu bisa berbeda maka diperlukan metode lainnya.
Metode lainnya ialah metode WSS, Sillhoute dan Gap_stat. Pada output metode WSS, didapati grafik yang sama persis dengan metode elbow sehingga k ditentukan antara 2 dan 3 namun pada metode Silhoutte dan Gap_stat metode tersebut memiliki nilai optimal k yang terbentuk di k = 2. Hal ini ditandai dengan garis vertikal sebagai nilai optimal k. Dapat disimpulkan pada analisis klaster ini dibentuk menjadi 2 klaster.
> #K yang ditentukan
> set.seed(111)
> k2<-kmeans(datastand[,1:3],centers = 2,iter.max=100,nstart=50,algorithm="Lloyd")
> k2
K-means clustering with 2 clusters of sizes 17, 33
Cluster means:
Accel TopSpeed Range
1 -1.1450907 1.1797420 0.7881071
2 0.5898952 -0.6077459 -0.4059946
Clustering vector:
[1] 1 2 1 2 2 1 2 2 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 1 2 2 1 2 2 2 2 2 1 2 2 2 2
[39] 2 1 1 2 1 2 2 2 2 1 2 2
Within cluster sum of squares by cluster:
[1] 25.16064 36.21765
(between_SS / total_SS = 58.2 %)
Available components:
[1] "cluster" "centers" "totss" "withinss" "tot.withinss"
[6] "betweenss" "size" "iter" "ifault" Setelah penentuan k ditentukan k=2 maka dilakukan analisis lebih
lanjut mengenai pembagian data ke 2 klaster tersebut. Dengan fungsi
kmeans() diperoleh output berupa:
Pembagian dilakukan pada 2 klaster dimana klaster 1 memiliki ukuran 17 data observasi dan klaster 2 memiliki ukuran 33 data observasi
Diketahui rata-rata variabel dalam setiap Klaster yakni:
Accel Top Speed Range Klaster 1 -1.1450907 1.1797420 0.7881071 Klaster 2 0.589 -0.6077459 -0.4059946 Nilai diatas merupakan nilai mean dari standarisasi data sebelumnya, untuk menampilkan data asli maka perlu pengembalian nilai terstandarisasi terlebih dahulu.
Daftar keanggotaan klaster berdasarkan data observasi ditampilkan dalam clustering vectors pada output diatas
Within-Cluster Sum of Squares menunjukkan seberapa rapat (compact) observasi dalam klaster masing-masing. Pada output didapati Klaster 1 adalah 25.16064, dan untuk Klaster 2 adalah 36.21765.
Persentase Variansi dijelaskan sekitar 58.2% dari varians total dalam data dimana hal ini menunjukkan seberapa baik klaster mewakili variasi total dalam data.
Terdapat komponen-komponen lainnya seperti total sum of squares (totss), within sum of squares (withinss), between sum of squares (betweenss), ukuran klaster (size), iterasi (iter), dan ifault
3.5.2 Pengembalian Nilai Terstandarisasi
> rerata.klaster <- data %>% mutate(Klaster = k2$cluster) %>% group_by(Klaster) %>% summarise(Mean_Accel = mean(Accel), Mean_TopSpeed = mean(TopSpeed), Mean_Range = mean(Range)) %>% mutate(Total_Mean = Mean_Accel + Mean_TopSpeed + Mean_Range) %>% arrange(Klaster)
> rerata.klaster
# A tibble: 2 × 5
Klaster Mean_Accel Mean_TopSpeed Mean_Range Total_Mean
<int> <dbl> <dbl> <dbl> <dbl>
1 1 4.37 220. 434. 659.
2 2 8.78 153. 295. 457.| Accel | Top Speed | Range | |
|---|---|---|---|
| Klaster 1 | 4.37 | 220 | 434 |
| Klaster 2 | 8.78 | 153 | 295 |
Pada syntax ini dilakukan pengembalian nilai terstandarisasi agar tiap klaster dapat diketahui karakteristik sebenarnya.
- Klasterisasi Subjek Variabel Y
> klasterisasi <- data %>% mutate (Klaster = k2$cluster) %>% select(Brand_Model, Klaster) %>% arrange(Klaster)
> datatable(klasterisasi)Selanjutnya adalah visualisasi pengelompokkan data observasi dalam tabel sesuai dengan klaster yang memenuhinya.
- Cluster Plot
> clusplot(datastand[,1:3], k2$cluster, main='2D representation of the Cluster solution',
+ color=TRUE, shade=TRUE,
+ labels=2, lines=0)Syntax diatas digunakan untuk menampilkan plot klasterisasi dari Algoritma K-Means. Hasil yang ditunjukkan tidak ada perbedaan signifikan dan mencakup bentuk dan data klaster yang sama.
- Visualisasi Plot
> set.seed(1)
> ggplot(data,
+ aes(x = Accel, y = TopSpeed)) +
+ geom_point(stat = "identity", aes(color = as.factor(k2$cluster))) +
+ scale_color_discrete(name=" ",breaks=c("1", "2"),
+ labels=c("Cluster 1", "Cluster 2")) +
+ ggtitle("Segmen Kendaraan Listrik berdasarkan Akselerasi dan Top Speed",
+ subtitle = "Menggunakan K-means Clustering")Dari visualisasi di atas, Segmen Kendaraan Listrik berdasarkan Akselerasi dan Top Speed diperoleh kesimpulan berikut:
Klaster 1 : Klaster ini mewakili brand mobil yang memiliki akselerasi sedang sampai tinggi dan kecepatan maksimal sedang sampai tinggi
Klaster 2 : Klaster ini mewakili brand mobil yang memiliki akselerasi rendah sampai sedang dan kecepatan maksimal rendah sampai sedang.
> set.seed(2)
> ggplot(data,
+ aes(x = Accel, y = Range)) +
+ geom_point(stat = "identity", aes(color = as.factor(k2$cluster))) +
+ scale_color_discrete(name=" ",breaks=c("1", "2"),
+ labels=c("Cluster 1", "Cluster 2")) +
+ ggtitle("Segmen Kendaraan Listrik berdasarkan Akselerasi dan Range",
+ subtitle = "Menggunakan K-means Clustering")Dari visualisasi di atas, Segmen Kendaraan Listrik berdasarkan Akselerasi dan Range diperoleh kesimpulan berikut:
Klaster 1 : Klaster ini mewakili brand mobil yang memiliki akselerasi sedang sampai tinggi dan jarak tempuh yang sedang sampai tinggi
Klaster 2 : Klaster ini mewakili brand mobil yang memiliki akselerasi rendah sampai sedang dan kecepatan maksimal rendah sampai sedang.
> set.seed(3)
> ggplot(data,
+ aes(x = TopSpeed, y = Range)) +
+ geom_point(stat = "identity", aes(color = as.factor(k2$cluster))) +
+ scale_color_discrete(name=" ",breaks=c("1", "2"),
+ labels=c("Cluster 1", "Cluster 2")) +
+ ggtitle("Segmen Kendaraan Listrik berdasarkan Range dan Top Speed",
+ subtitle = "Menggunakan K-means Clustering")Dari visualisasi di atas, Segmen Kendaraan Listrik berdasarkan Range dan Top Speed diperoleh kesimpulan berikut:
Klaster 1 : Klaster ini mewakili brand mobil yang memiliki kecepatan maksimal sedang sampai tinggi dan jarak tempuh sedang sampai tinggi
Klaster 2 : Klaster ini mewakili brand mobil yang memiliki kecepatan maksimal rendah sampai sedang dan jarak tempuh rendah sampai sedang.
4 PENUTUP
4.1 Kesimpulan
4.1.1 Kesimpulan PCA
Pada penelitian ini variabel dataset bersifat multikolinieritas, sehingga perlu dilakukan PCA untuk menghilangkan multikolinieritas. Melalui penggunaan dua bentuk input pembentukan komponen utama yaitu matriks kovarians dan matriks korelasi, sama sama didapati 3 Komponen Utama dengan 88.45% mewakili keragaman dalam data. Sehingga pada PCA variabel tersisa yang tetap digunakan yakni variabel Accel, Top Speed, dan Range. Adapun persamaan PCA yang terbentuk ialah: \[PC1 = 0.4603X1-0.4582X2-0.3977X3-0.2511X4-0.4491X5-0.3937X6\] \[PC2 = 0.0984X1+0.0977X2+0.1740X3-0.9342X4+0.2215X5-0.1687X6\] \[PC3 = -0.3628X1+0.4124X2-0.5636X3-0.1367X4+0.2589X5-0.5429X6\] Perbedaan penggunaan matriks kovarians atau matriks korelasi pada penelitian ini ialah pada variabel yang digunakan. Pada dataset penelitian ini, variabel memiliki skala yang beragam dan varians yang signifikan sehingga lebih cocok menggunakan matriks korelasi. Sedangkan matriks kovarians digunakan pada dataset yang variabelnya memiliki skala seragam.
4.1.2 Kesimpulan Cluster
Dengan data yang sudah di PCA terlebih dahulu dan distandarisasi, maka cluster dapat dilakukan. Penentuan k klaster dilakukan dengan 4 metode yakni Elbow, WSS, Silhoutte, dan gap_statistic yang sama sama menghasilkan k optimal sebesar 2. Maka dapat ditentukan dataset akan dibagi menjadi 2 klaster
Didapati pada klaster 1 ada sebanyak 17 observasi data dan klaster 2 ada sebanyak 33 observasi data. Detail data hasil klasterisasi ada dibawah ini:
Dari plot klaster dan tabel hasil klasterisasi didapati bahwa:
Klaster 1 : Mewakili brand mobil dengan akselerasi sedang sampai tinggi, kecepatan maksimal sedang sampai tinggi, dan jarak tempuh sedang sampai tinggi
Klaster 2 : Mewakili brand mobil dengan akselerasi rendah sampai sedang, kecepatan maksimal rendah sampai sedang, dan jarak tempuh rendah sampai sedang
4.1.3 Kesimpulan Umum
Dengan penggunaan PCA pada Analisis Klaster, terbukti menghasilkan hasil optimal dalam klasterisasi dataset penelitian ini yakni mengenai segmentasi kendaraan listrik. Peneliti dapat memahami variabel yang lebih baik dan dapat mengambil keputusan dengan baik pula. Penelitian ini dapat juga sebagai tolak ukur bagi produsen maupun konsumen produk kendaraan listrik. Produsen dapat mengembangkan spesifikasi yang tepat serta konsumen dapat memilah brand mobil mana saja yang cocok dengan spesifikasi yang dibutuhkan.
4.2 Saran
Berdasarkan uraian hasil, pembahasan, dan kesimpulan, diharapkan peneliti berikutnya dapat mengembangkan dalam beberapa hal, yakni data yang berjumlah lebih besar, variabel yang lebih banyak, serta konsep metode yang lebih akurat. Pengembangan dengan menggabungkan metode lain juga sangat disarankan apabila hal itu dapat menjawab permasalahan yang ada.
5 DAFTAR PUSTAKA
- Afriana, M., Nugroho, S., & Faisal, F. (2013). PENENTUAN AWAL KEANGGOTAAN ANALISIS KLASTER NON HIRARKI (K-MEANS).
- Barman, Krishnendu. (2023). Indian_EV_Segmentation. Diakses pada 1 November 2023 di https://www.kaggle.com/datasets/krishnendubarman/indian-ev-segmentation
- Gujarati. (1997). Statistik Ekonometrika. Jakarta: Bumi Aksara.
- Muttalib, S. A., WK, J. N., & Bintoro, N. (2019). Analisis Kadar Air dan Aroma Blending Kopi Arabika (Coffea arabica L) dan Robusta (Coffea canephora L) Selama Penyimpanan Dengan Principal Component Analisys (PCA). Jurnal Agrotek Ummat, 6(1), 23-27.
- Permana, R., Yuliati, E., & Wulandari, P. (2023). Analisis faktor-faktor yang mempengaruhi konsumen terhadap purchase intention kendaraan listrik di indonesia. INOBIS: Jurnal Inovasi Bisnis dan Manajemen Indonesia, 6(2), 217-232.
- PPT Praktikum Analisis Multivariat I Kelas C 2023: https://classroom.google.com/u/3/c/NjIxMzYyOTgyMDUy
- Robani, M., & Widodo, A. (2016). Algoritma K-Means Clustering Untuk Pengelompokan Ayat Al Quran Pada Terjemahan Bahasa Indonesia. Jurnal Sistem Informasi Bisnis, 6(2), 164.
- Santosa, B. (2007). Data Mining Teknik Pemanfaatan Data untuk Keperluan Bisnis. Graha Ilmu. Yogyakarta, Indonesia
- Santoso, S. (2010). Statistik non parametrik konsep dan aplikasi dengan SPSS. Jakarta: PT Elex Media Komputindo.