Saya mengalami kesulitan memahami satu atau dua aspek dari paket cluster. Saya mengikuti contoh dari Quick-R dengan cermat, tetapi tidak memahami satu atau dua aspek analisis. Saya telah memasukkan kode yang saya gunakan untuk contoh khusus ini.
## Libraries
library(stats)
library(fpc)
## Data
mydata = structure(list(a = c(461.4210925, 1549.524107, 936.42856, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131.4349206, 0, 762.6110846,
3837.850406), b = c(19578.64174, 2233.308842, 4714.514274, 0,
2760.510002, 1225.392118, 3706.428246, 2693.353714, 2674.126613,
592.7384164, 1820.976961, 1318.654162, 1075.854792, 1211.248996,
1851.363623, 3245.540062, 1711.817955, 2127.285272, 2186.671242
), c = c(1101.899095, 3.166506463, 0, 0, 0, 1130.890295, 0, 654.5054857,
100.9491289, 0, 0, 0, 0, 0, 789.091922, 0, 0, 0, 0), d = c(33184.53871,
11777.47447, 15961.71874, 10951.32402, 12840.14983, 13305.26424,
12193.16597, 14873.26461, 11129.10269, 11642.93146, 9684.238583,
15946.48195, 11025.08607, 11686.32213, 10608.82649, 8635.844964,
10837.96219, 10772.53223, 14844.76478), e = c(13252.50358, 2509.5037,
1418.364947, 2217.952853, 166.92007, 3585.488983, 1776.410835,
3445.14319, 1675.722506, 1902.396338, 945.5376228, 1205.456943,
2048.880329, 2883.497101, 1253.020175, 1507.442736, 0, 1686.548559,
5662.704559), f = c(44.24828759, 0, 485.9617601, 372.108855,
0, 509.4916263, 0, 0, 0, 212.9541122, 80.62920455, 0, 0, 30.16525587,
135.0501384, 68.38023073, 0, 21.9317122, 65.09052886), g = c(415.8909649,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 637.2629479, 0, 0,
0), h = c(583.2213618, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0), i = c(68206.47387, 18072.97762, 23516.98828,
13541.38572, 15767.5799, 19756.52726, 17676.00505, 21666.267,
15579.90094, 14351.02033, 12531.38237, 18470.59306, 14149.82119,
15811.23348, 14637.35235, 13588.64291, 12549.78014, 15370.90886,
26597.08152)), .Names = c("a", "b", "c", "d", "e", "f", "g",
"h", "i"), row.names = c(NA, -19L), class = "data.frame")
Lalu saya membakukan variabel:
# standardize variables
mydata <- scale(mydata)
## K-means Clustering
# Determine number of clusters
wss <- (nrow(mydata)-1)*sum(apply(mydata,2,var))
for (i in 2:15) wss[i] <- sum(kmeans(mydata, centers=i)$withinss)
# Q1
plot(1:15, wss, type="b", xlab="Number of Clusters", ylab="Within groups sum of squares")
# K-Means Cluster Analysis
fit <- kmeans(mydata, 3) # number of values in cluster solution
# get cluster means
aggregate(mydata,by=list(fit$cluster),FUN=mean)
# append cluster assignment
mydata <- data.frame(mydata, cluster = fit$cluster)
# Cluster Plot against 1st 2 principal components - vary parameters for most readable graph
clusplot(mydata, fit$cluster, color=TRUE, shade=TRUE, labels=0, lines=0) # Q2
# Centroid Plot against 1st 2 discriminant functions
plotcluster(mydata, fit$cluster)
Pertanyaan saya adalah, bagaimana plot yang menunjukkan jumlah cluster (ditandai Q1
dalam kode saya) dapat dikaitkan dengan nilai aktual (nomor cluster dan nama variabel)?
Pembaruan: Saya sekarang mengerti bahwa clusplot()
fungsinya adalah plot bivariat, dengan PCA1 dan PCA2. Namun, saya tidak mengerti hubungan antara komponen PCA dan grup cluster. Apa hubungan antara nilai-nilai PCA dan kelompok-kelompok pengelompokan? Saya telah membaca di tempat lain tentang hubungan antara kmeans dan PCA, tapi saya masih tidak mengerti bagaimana mereka dapat ditampilkan pada grafik bivariat yang sama.
sumber
Jawaban:
Saya tidak memahami pertanyaan 1 sepenuhnya, tetapi saya akan mencoba jawaban. Plot Q1 menunjukkan bagaimana jumlah dalam kuadrat (wss) berubah sebagai perubahan nomor cluster. Dalam plot seperti ini Anda harus mencari ketegaran dalam grafik, ketegaran pada 5 menunjukkan bahwa sebaiknya menggunakan 5 klaster.
WSS memiliki hubungan dengan variabel Anda dalam pengertian berikut, rumus untuk WSS adalah
Jawaban untuk pertanyaan 2 adalah ini. Apa yang Anda benar-benar tonton
clusplot()
adalah plot pengamatan Anda di pesawat utama. Apa fungsi ini lakukan adalah menghitung skor komponen utama untuk setiap pengamatan Anda, merencanakan skor-skor tersebut dan mewarnai dengan cluster.Principal component analysis (PCA) adalah teknik reduksi dimensi; itu "merangkum" informasi semua variabel menjadi beberapa variabel "baru" yang disebut komponen. Setiap komponen bertanggung jawab untuk menjelaskan persentase tertentu dari total variabilitas. Pada contoh Anda membaca "Dua komponen ini menjelaskan 73,95% dari total variabilitas".
Fungsi
clusplot()
ini digunakan untuk mengidentifikasi efektivitas pengelompokan. Jika Anda memiliki pengelompokan yang sukses, Anda akan melihat bahwa cluster dipisahkan dengan jelas di bidang utama. Di sisi lain, Anda akan melihat cluster digabung dalam bidang utama ketika pengelompokan tidak berhasil.Untuk referensi lebih lanjut tentang analisis komponen utama, Anda dapat membaca wiki. jika Anda menginginkan buku yang saya sarankan Teknik Multivarian Modern oleh Izenmann, di sana Anda akan menemukan PCA dan k-means.
Semoga ini membantu :)
sumber
clusplot()
fungsi ini. Apa hubungan antara nilai-nilai PCA, dan kelompok-kelompok pengelompokan? Saya telah membaca di tempat lain tentang hubungan antara kmeans dan PCA, tapi saya masih tidak mengerti bagaimana mereka dapat ditampilkan pada grafik bivariat yang sama. (Mungkin ini seharusnya menjadi pertanyaan baru).mydata
, itulah yang sebenarnya Anda lihat di plot. Bentuk titik diplot menggunakanfit$cluster
, parameter kedua dariclusplot()
. Mungkin Anda harus melihat lebih dalam pada PCA. Beritahu saya jika ini membantu Anda, atau jika Anda referensi lebih lanjut.fit$cluster
hubungannya dengan "koordinat" PCA? Saya rasa saya mengerti bagaimana PCA bekerja, tetapi seperti yang saya pahami, setiap komponen tidak dapat dijelaskan menggunakan variabel dari data asli (lebih tepatnya itu adalah kombinasi linear dari data mentah), itulah mengapa saya tidak mengerti bagaimana bisa terkait dengan cluster.fit$cluster
tidak ada hubungannya dengan PCA. Apa yangclusplot()
dilakukan adalah memplot poin menggunakan koordinat "baru" dan melabelinya menggunakanfit$cluster
. Saya mendapat '+' untuk klaster 3, 'o' untuk klaster 1 dan segitiga untuk klaster 2. Fungsiclusplot()
ini berguna untuk memvisualisasikan klaster.fit$cluster
:)