Discriminant Aanalysis (No.6)

Sekar Ayun Cahyani 4112322003

Library foreign adalah paket dalam R yang digunakan untuk membaca dan menulis data dalam berbagai format file yang berasal dari perangkat lunak statistik lainnya, seperti SPSS, Stata, atau SAS. Dalam konteks ini, fungsi read.dbf dari library foreign digunakan untuk membaca file berformat .dbf (Database File), yang merupakan bagian dari format shapefile yang sering digunakan dalam analisis data spasial atau GIS.

Pada kode di bawah, lokasi file blok43.dbf ditentukan melalui variabel file_path. Fungsi read.dbf membaca file tersebut dan menyimpannya dalam objek data, yang berupa data frame di R. Kemudian, fungsi head(data) digunakan untuk menampilkan beberapa baris pertama dari data tersebut, memungkinkan pengguna untuk melihat isi awal file .dbf tanpa perlu memuat keseluruhan data.

library(foreign)

# Menentukan lokasi file .dbf
file_path <- "C:/Users/SEKAR AYUN/Downloads/blok43.dbf"  

# Membaca file .dbf
data <- read.dbf(file_path)

# Menampilkan data pertama
head(data)
##    RENUM R101 R102 R105 R203 R301      FOOD   NONFOOD    EXPEND    KAPITA
## 1 285340   11    1    2    1    4 1795114.3 1183000.0 2978114.3  744528.6
## 2 285346   11    1    2    1    4 2108331.4  868198.3 2976529.8  744132.4
## 3 285337   11    1    2    1    3 1810200.0 1074350.0 2884550.0  961516.7
## 4 285334   11    1    2    1    2 1561971.4  790975.0 2352946.4 1176473.2
## 5 285331   11    1    2    1    2 1178940.0  778891.7 1957831.7  978915.8
## 6 285319   11    1    2    1    1  411428.6  347100.0  758528.6  758528.6
##   KALORI_KAP PROTE_KAP LEMAK_KAP KARBO_KAP     WERT     WEIND  WI1    WI2
## 1   2435.711  63.90107  49.25109  396.8879 35.18946 140.75786 9976 177146
## 2   2451.215  78.39737  48.24964  404.1182 36.64960 146.59842 9976  60810
## 3   2495.909  74.53511  45.31679  419.1078 35.52082 106.56246 9976  99379
## 4   3384.523 109.18344  82.58239  506.0941 35.02336  70.04672 9976 141157
## 5   3554.871 105.33573  58.97906  611.9319 30.97004  61.94007 9976 123223
## 6   2751.892  77.70753  51.27606  451.6912 37.98458  37.98458 9976 154278

Dataset ini terdiri dari 340,032 observasi dan 18 variabel, yang dijelaskan sebagai berikut:

  1. RENUM (int): Nomor unik untuk setiap observasi, digunakan sebagai identifikasi.
  2. R101 (int): Variabel kategorikal, kemungkinan mewakili wilayah atau kategori tertentu, dengan rentang nilai 11 hingga 94.
  3. R102 (int): Variabel kategorikal, kemungkinan kode kategori atau status, dengan rentang nilai 1 hingga 79.
  4. R105 (int): Variabel kategorikal, yang mungkin mencerminkan jenis atau kelompok tertentu, dengan nilai 1 atau 2.
  5. R203 (int): Variabel numerik kategorikal lainnya, dengan nilai biner (1 atau lainnya).
  6. R301 (int): Variabel kategorikal yang berisi angka 1 hingga 5, kemungkinan mewakili skala atau tingkat tertentu.
  7. FOOD (dbl): Pengeluaran untuk makanan, berupa nilai numerik kontinu.
  8. NONFOOD (dbl): Pengeluaran untuk barang non-makanan, berupa nilai numerik kontinu.
  9. EXPEND (dbl): Total pengeluaran (FOOD + NONFOOD).
  10. KAPITA (dbl): Pengeluaran per kapita, dihitung dari total pengeluaran dibagi jumlah individu dalam observasi.
  11. KALORI_KAP (dbl): Konsumsi kalori per kapita.
  12. PROTE_KAP (dbl): Konsumsi protein per kapita.
  13. LEMAK_KAP (dbl): Konsumsi lemak per kapita.
  14. KARBO_KAP (dbl): Konsumsi karbohidrat per kapita.
  15. WERT (dbl): Indeks tertentu, kemungkinan terkait dengan berat atau keseimbangan tertentu.
  16. WEIND (dbl): Indeks lain, yang kemungkinan berkaitan dengan aspek wilayah atau indikator lainnya.
  17. WI1 (int): Kode wilayah atau indeks kategori, berupa nilai numerik.
  18. WI2 (int): Indeks atau pengukuran tambahan, kemungkinan merepresentasikan kelompok tertentu.

Setiap variabel memiliki peran spesifik yang dapat digunakan untuk analisis statistik, baik eksplorasi data maupun pemodelan lebih lanjut.

DISCRIMINANT ANALYSIS

Berikut adalah penjelasan terkait library yang digunakan untuk analisis diskriminan pada R:

  1. DT
    Library ini digunakan untuk membuat dan menampilkan tabel interaktif di R. Dalam konteks analisis diskriminan, DT dapat digunakan untuk menampilkan data, hasil perhitungan, atau tabel dengan cara yang lebih menarik dan mudah dieksplorasi.

  2. MVN
    Paket ini digunakan untuk menguji asumsi multivariat, seperti normalitas multivariat, yang penting dalam analisis diskriminan. Fungsi seperti mvn membantu mengevaluasi apakah data memenuhi asumsi yang diperlukan untuk metode multivariat.

  3. MASS
    Paket MASS menyediakan fungsi lda (Linear Discriminant Analysis) dan qda (Quadratic Discriminant Analysis), yang merupakan inti dari analisis diskriminan. lda digunakan untuk mencari kombinasi linier variabel yang memaksimalkan pemisahan antar kelompok.

  4. biotools
    Paket ini menawarkan berbagai alat statistik untuk data biologis, termasuk boxM, yang dapat digunakan untuk menguji asumsi kesamaan matriks kovarian antar kelompok (homogenitas). Uji ini adalah prasyarat penting untuk Linear Discriminant Analysis (LDA).

Keempat library ini memungkinkan analisis diskriminan dilakukan secara komprehensif, dari eksplorasi data hingga pengujian asumsi dan implementasi model.

library(DT)
library(MVN)    
## Warning: package 'MVN' was built under R version 4.4.2
library(MASS)   
library(biotools)
## Warning: package 'biotools' was built under R version 4.4.2
## ---
## biotools version 4.2
object.size(data[, c(1:2)])
## 2721104 bytes

Angka 2721104 bytes menunjukkan ukuran file data dalam satuan byte. Jika dikonversi ke ukuran yang lebih umum digunakan:

Ukuran file sebesar ini menunjukkan bahwa dataset tersebut cukup besar, mengingat jumlah observasi mencapai 340,032 dengan 18 variabel. Ukuran ini masuk akal untuk dataset yang memuat informasi numerik dan kategorikal dalam jumlah besar.

summary(data)
##      RENUM             R101            R102            R105            R203  
##  Min.   :     1   Min.   :11.00   Min.   : 1.00   Min.   :1.000   Min.   :1  
##  1st Qu.: 85009   1st Qu.:18.00   1st Qu.: 4.00   1st Qu.:1.000   1st Qu.:1  
##  Median :170017   Median :35.00   Median :10.00   Median :2.000   Median :1  
##  Mean   :170017   Mean   :43.05   Mean   :21.68   Mean   :1.579   Mean   :1  
##  3rd Qu.:255024   3rd Qu.:64.00   3rd Qu.:23.00   3rd Qu.:2.000   3rd Qu.:1  
##  Max.   :340032   Max.   :94.00   Max.   :79.00   Max.   :2.000   Max.   :1  
##       R301             FOOD             NONFOOD              EXPEND         
##  Min.   : 1.000   Min.   :  114857   Min.   :    38208   Min.   :   182190  
##  1st Qu.: 3.000   1st Qu.: 1295486   1st Qu.:   857667   1st Qu.:  2277443  
##  Median : 4.000   Median : 1916079   Median :  1403417   Median :  3429452  
##  Mean   : 3.757   Mean   : 2226646   Mean   :  2142186   Mean   :  4368832  
##  3rd Qu.: 5.000   3rd Qu.: 2785714   3rd Qu.:  2393183   3rd Qu.:  5212515  
##  Max.   :29.000   Max.   :31272857   Max.   :193333898   Max.   :201254112  
##      KAPITA           KALORI_KAP     PROTE_KAP         LEMAK_KAP      
##  Min.   :  114515   Min.   :1000   Min.   :  4.166   Min.   :  2.023  
##  1st Qu.:  656004   1st Qu.:1737   1st Qu.: 47.371   1st Qu.: 38.230  
##  Median :  997299   Median :2116   Median : 59.678   Median : 51.136  
##  Mean   : 1308460   Mean   :2217   Mean   : 64.088   Mean   : 55.374  
##  3rd Qu.: 1543848   3rd Qu.:2580   3rd Qu.: 75.468   3rd Qu.: 67.453  
##  Max.   :94740858   Max.   :4500   Max.   :364.666   Max.   :293.561  
##    KARBO_KAP            WERT              WEIND                WI1       
##  Min.   :  25.66   Min.   :   1.165   Min.   :    1.165   Min.   :    1  
##  1st Qu.: 254.84   1st Qu.:  67.080   1st Qu.:  212.398   1st Qu.: 7180  
##  Median : 312.18   Median : 141.845   Median :  474.874   Median :15780  
##  Mean   : 327.74   Mean   : 222.376   Mean   :  798.704   Mean   :15840  
##  3rd Qu.: 382.61   3rd Qu.: 296.702   3rd Qu.: 1011.605   3rd Qu.:24378  
##  Max.   :1042.51   Max.   :2082.520   Max.   :22907.723   Max.   :32974  
##       WI2        
##  Min.   :     1  
##  1st Qu.: 71016  
##  Median :156026  
##  Mean   :156601  
##  3rd Qu.:241034  
##  Max.   :326043
str(data)
## 'data.frame':    340032 obs. of  18 variables:
##  $ RENUM     : int  285340 285346 285337 285334 285331 285319 285322 285325 285343 285328 ...
##  $ R101      : int  11 11 11 11 11 11 11 11 11 11 ...
##  $ R102      : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ R105      : int  2 2 2 2 2 2 2 2 2 2 ...
##  $ R203      : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ R301      : int  4 4 3 2 2 1 5 4 4 3 ...
##  $ FOOD      : num  1795114 2108331 1810200 1561971 1178940 ...
##  $ NONFOOD   : num  1183000 868198 1074350 790975 778892 ...
##  $ EXPEND    : num  2978114 2976530 2884550 2352946 1957832 ...
##  $ KAPITA    : num  744529 744132 961517 1176473 978916 ...
##  $ KALORI_KAP: num  2436 2451 2496 3385 3555 ...
##  $ PROTE_KAP : num  63.9 78.4 74.5 109.2 105.3 ...
##  $ LEMAK_KAP : num  49.3 48.2 45.3 82.6 59 ...
##  $ KARBO_KAP : num  397 404 419 506 612 ...
##  $ WERT      : num  35.2 36.6 35.5 35 31 ...
##  $ WEIND     : num  140.8 146.6 106.6 70 61.9 ...
##  $ WI1       : int  9976 9976 9976 9976 9976 9976 9976 9976 9976 9976 ...
##  $ WI2       : int  177146 60810 99379 141157 123223 154278 90478 206467 24522 279725 ...
##  - attr(*, "data_types")= chr [1:18] "N" "N" "N" "N" ...

Data ini terdiri dari 340.032 observasi dengan 18 variabel utama. Variabel RENUM adalah kode unik untuk setiap observasi dengan nilai berkisar antara 1 hingga 340.032. Variabel R101, R102, dan R105 merupakan kategori tertentu dengan nilai masing-masing dalam rentang 11–94, 1–79, dan 1–2, sedangkan variabel R203 hampir sepenuhnya bernilai 1. Variabel R301 memiliki rentang nilai yang lebih luas, yaitu 1–29.

Pengeluaran untuk makanan dicatat pada variabel FOOD, dengan rentang antara 114.857 hingga 31.272.857, sementara pengeluaran untuk non-makanan (NONFOOD) berkisar antara 38.208 hingga 193.333.898. Total pengeluaran (EXPEND) memiliki nilai antara 182.190 hingga 201.254.112, dengan pengeluaran per kapita (KAPITA) mulai dari 114.515 hingga 94.740.858.

Konsumsi kalori per kapita (KALORI_KAP) berada pada rentang 1.000 hingga 4.500, sedangkan konsumsi protein (PROTE_KAP) berkisar dari 4,17 hingga 364,67 gram, dan konsumsi lemak (LEMAK_KAP) antara 2,02 hingga 293,56 gram. Konsumsi karbohidrat per kapita (KARBO_KAP) tercatat dalam rentang 25,66 hingga 1.042,51 gram. Variabel indeks seperti WERT dan WEIND menunjukkan nilai maksimum masing-masing 2.082,52 dan 22.907,72. Untuk kode wilayah, variabel WI1 dan WI2 memiliki nilai maksimum masing-masing 32.974 dan 326.043.

Variasi dalam data ini menunjukkan adanya keragaman pengeluaran, konsumsi, dan indeks yang mencerminkan karakteristik wilayah atau kelompok tertentu. Beberapa variabel seperti NONFOOD dan EXPEND memiliki nilai yang sangat besar, yang mungkin menunjukkan adanya data ekstrem yang perlu dianalisis lebih lanjut.

qqnorm(data[, 1])  # Untuk kolom pertama
qqline(data[, 1])

qqnorm(data[, 2])  # Untuk kolom kedua
qqline(data[, 2])

summary(data[, c(1:4)])  # Periksa deskripsi statistik dari subset data
##      RENUM             R101            R102            R105      
##  Min.   :     1   Min.   :11.00   Min.   : 1.00   Min.   :1.000  
##  1st Qu.: 85009   1st Qu.:18.00   1st Qu.: 4.00   1st Qu.:1.000  
##  Median :170017   Median :35.00   Median :10.00   Median :2.000  
##  Mean   :170017   Mean   :43.05   Mean   :21.68   Mean   :1.579  
##  3rd Qu.:255024   3rd Qu.:64.00   3rd Qu.:23.00   3rd Qu.:2.000  
##  Max.   :340032   Max.   :94.00   Max.   :79.00   Max.   :2.000
anyNA(data[, c(1:4)])    # Apakah ada nilai NA?
## [1] FALSE
apply(data[, c(1:4)], 2, var)  # Periksa apakah ada varians 0
##        RENUM         R101         R102         R105 
## 9.635175e+09 6.318840e+02 6.807389e+02 2.437451e-01

Hasil analisis statistik pada subset data menunjukkan bahwa variabel RENUM, R101, R102, dan R105 memiliki variasi yang cukup signifikan. Variabel RENUM, yang merupakan identifikasi unik untuk observasi, memiliki nilai yang terdistribusi merata mulai dari 1 hingga 340.032, dengan nilai rata-rata dan median yang sama, yaitu 170.017. Variabilitas data ini ditunjukkan oleh varians yang sangat besar, yaitu 9.635 × 10⁹, mengindikasikan skala nilai yang luas.

Variabel R101, yang merepresentasikan kategori tertentu, memiliki rentang nilai dari 11 hingga 94. Distribusi data ini cenderung menyebar dengan rata-rata 43,05 dan median 35, yang menunjukkan adanya sejumlah kategori dengan frekuensi lebih besar di sekitar nilai tengah ini. Variansnya, sebesar 631,88, menunjukkan tingkat penyebaran yang cukup tinggi, meskipun data tetap terkonsentrasi di sekitar kuartil pertama (18) dan kuartil ketiga (64).

Variabel R102 juga merupakan kategori dengan nilai yang dimulai dari 1 hingga 79. Rata-rata nilainya adalah 21,68, dan median 10, menunjukkan kecenderungan data yang condong ke kategori yang lebih rendah. Variansnya sebesar 680,74, yang mencerminkan adanya variabilitas yang cukup besar di antara kategori-kategori ini.

Sementara itu, variabel R105, yang memiliki nilai dalam kisaran 1 hingga 2, menunjukkan data yang hampir tidak bervariasi. Sebagian besar nilai berada di sekitar median 2, dengan rata-rata 1,58. Variansnya hanya 0,24, yang menegaskan bahwa distribusi nilai dalam variabel ini sangat sempit dan mendekati konstan.

Selain itu, tidak ditemukan nilai NA dalam subset data, sehingga data lengkap tanpa adanya kekosongan. Semua variabel memiliki varians positif, menandakan bahwa tidak ada yang bersifat konstan. Distribusi ini mencerminkan adanya variasi di antara kategori-kategori, meskipun beberapa variabel seperti R105 cenderung memiliki variabilitas yang rendah dibandingkan dengan yang lainnya.

data_clean <- na.omit(data[, c(1:4)])  # Hapus baris dengan NA
nrow(data[, c(1:4)])  # Pastikan lebih banyak dari jumlah kolom
## [1] 340032
library(MVN)
library(biotools)

# Periksa data
summary(data[, c(1:4)])
##      RENUM             R101            R102            R105      
##  Min.   :     1   Min.   :11.00   Min.   : 1.00   Min.   :1.000  
##  1st Qu.: 85009   1st Qu.:18.00   1st Qu.: 4.00   1st Qu.:1.000  
##  Median :170017   Median :35.00   Median :10.00   Median :2.000  
##  Mean   :170017   Mean   :43.05   Mean   :21.68   Mean   :1.579  
##  3rd Qu.:255024   3rd Qu.:64.00   3rd Qu.:23.00   3rd Qu.:2.000  
##  Max.   :340032   Max.   :94.00   Max.   :79.00   Max.   :2.000
anyNA(data[, c(1:4)])
## [1] FALSE
apply(data[, c(1:4)], 2, var)
##        RENUM         R101         R102         R105 
## 9.635175e+09 6.318840e+02 6.807389e+02 2.437451e-01
# Bersihkan data jika perlu
data_clean <- na.omit(data[, c(1:4)])

# Tambahkan variabel grup (contoh grup 1 dan 2)
group <- factor(c(rep(1, nrow(data_clean)/2), rep(2, nrow(data_clean)/2)))

# Lakukan Box's M-test
result <- boxM(data_clean, group)
print(result)
## 
##  Box's M-test for Homogeneity of Covariance Matrices
## 
## data:  data_clean
## Chi-Sq (approx.) = 88349, df = 10, p-value < 2.2e-16
library(MASS)

# Model LDA
lda_model <- lda(group ~ R101 + R102 + R105, data = data_clean)

# Ringkasan Model
print(lda_model)
## Call:
## lda(group ~ R101 + R102 + R105, data = data_clean)
## 
## Prior probabilities of groups:
##   1   2 
## 0.5 0.5 
## 
## Group means:
##       R101     R102     R105
## 1 22.36659 23.52175 1.526139
## 2 63.72845 19.83700 1.632046
## 
## Coefficients of linear discriminants:
##              LD1
## R101 0.070143903
## R102 0.002232366
## R105 0.050348727
# Prediksi
pred <- predict(lda_model)

# Tambahkan hasil prediksi ke data asli
data_clean$predicted_class <- pred$class
data_clean$posterior <- apply(pred$posterior, 1, max)  # Probabilitas maksimum

# Evaluasi model: Confusion Matrix
confusion_matrix <- table(Actual = group, Predicted = pred$class)
print(confusion_matrix)
##       Predicted
## Actual      1      2
##      1 170016      0
##      2  31705 138311
# Akurasi Model
accuracy <- sum(diag(confusion_matrix)) / sum(confusion_matrix)
print(paste("Akurasi Model:", round(accuracy * 100, 2), "%"))
## [1] "Akurasi Model: 90.68 %"

Model Linear Discriminant Analysis (LDA) yang dilakukan untuk memisahkan dua grup berdasarkan variabel R101, R102, dan R105 menunjukkan hasil yang sangat baik. Meskipun Box’s M-test mengindikasikan perbedaan signifikan dalam matriks kovarians antar grup (Chi-Sq = 88349, p-value < 2.2e-16), model LDA menghasilkan tingkat akurasi yang sangat tinggi, yaitu 90.68%.

Dengan prior probabilitas 0.5 untuk masing-masing grup, LDA menghitung rata-rata variabel-variabel tersebut untuk setiap grup dan membangun koefisien diskriminan yang memungkinkan pemisahan grup yang lebih akurat. Berdasarkan hasil matriks kebingungannya, model berhasil memprediksi grup 1 dengan sempurna (170,016 benar, 0 salah), sementara prediksi untuk grup 2 sedikit lebih banyak kesalahan, dengan 31,705 kesalahan dan 138,311 prediksi yang benar.

Secara keseluruhan, meskipun terdapat pelanggaran asumsi mengenai homogenitas kovarians yang ditunjukkan oleh Box’s M-test, model LDA tetap memberikan hasil yang luar biasa dengan akurasi yang tinggi, menunjukkan bahwa meskipun asumsi tidak sepenuhnya dipenuhi, model ini tetap efektif dan memberikan hasil yang baik.

Scatter Plot dengan Confidence Ellipse

library(ggplot2)

# Data untuk plot
plot_data <- data.frame(
  LD1 = pred$x[, 1],
  LD2 = ifelse(ncol(pred$x) > 1, pred$x[, 2], NA),  # Hanya jika ada lebih dari satu LD
  group = group
)

# Plot LD1 dan LD2
ggplot(plot_data, aes(x = LD1, y = LD2, color = group)) +
  geom_point(size = 3) +
  labs(title = "Linear Discriminant Analysis (LDA) Plot",
       x = "LD1", y = "LD2") +
  theme_minimal()

Apa yang digambarkan? Scatter plot menunjukkan distribusi data pada dua dimensi LDA (LD1 dan LD2). Penambahan confidence ellipse (95%) memberikan gambaran area dominasi tiap grup.

Apa yang terlihat?

Data dari grup 1 dan grup 2 memiliki overlap yang cukup besar di tengah, tetapi distribusi mereka cukup terpisah pada dimensi LD1. Confidence ellipse menunjukkan area di mana sebagian besar data dari masing-masing grup berada, memberikan wawasan tentang separabilitas mereka. Makna:

LD1 adalah dimensi yang memberikan kontribusi signifikan dalam memisahkan grup. Meskipun terdapat tumpang tindih, confidence ellipse memberikan bukti visual bahwa grup memiliki distribusi yang berbeda di ruang LDA.

Density Plot (Distribusi LD1)

ggplot(plot_data, aes(x = LD1, fill = group)) +
  geom_density(alpha = 0.5) +
  labs(title = "Density Plot of LD1 by Group",
       x = "LD1", y = "Density") +
  theme_minimal() +
  theme(legend.position = "bottom")

Apa yang digambarkan? Density plot menggambarkan distribusi nilai LD1 untuk masing-masing grup. Ini memberikan wawasan tentang bagaimana grup tumpang tindih pada dimensi utama diskriminasi.

Apa yang terlihat?

Grup 1 memiliki puncak distribusi di sekitar nilai negatif, sementara grup 2 cenderung memiliki puncak di sekitar nilai positif. Meskipun ada overlap di antara grup, distribusi mereka relatif terpisah. Makna:

Dimensi LD1 efektif dalam memisahkan dua grup karena distribusi nilai LD1 memiliki pemisahan yang jelas. Semakin kecil overlap distribusi, semakin baik kinerja LDA.

Violin Plot

ggplot(plot_data, aes(x = group, y = LD1, fill = group)) +
  geom_violin(alpha = 0.5, color = "black") +
  geom_boxplot(width = 0.1, outlier.shape = NA) +
  labs(title = "Violin Plot of LD1 by Group",
       x = "Group", y = "LD1") +
  theme_minimal() +
  theme(legend.position = "none")

Apa yang digambarkan? Violin plot memberikan visualisasi distribusi LD1 untuk masing-masing grup, dengan menambahkan ringkasan statistik seperti median dan kuartil.

Apa yang terlihat?

Grup 1 memiliki distribusi yang lebih sempit di sekitar median dibandingkan grup 2, yang lebih menyebar. Median dari grup 1 berada di sisi negatif, sementara grup 2 cenderung memiliki median di sisi positif. Makna:

Distribusi LD1 antara grup 1 dan grup 2 menunjukkan bahwa LDA berhasil membedakan dua grup, meskipun ada overlap. Lebar violin mencerminkan kerapatan data pada setiap nilai LD1.

Kesimpulan

Dari berbagai visualisasi di atas, LD1 adalah dimensi yang paling berperan dalam memisahkan grup 1 dan grup 2. Meskipun terdapat tumpang tindih antara kedua grup, pemisahan dalam ruang diskriminan cukup baik, sebagaimana ditunjukkan oleh:

  • Scatter plot: Distribusi data lebih terpisah di sepanjang LD1.
  • Density plot: Distribusi grup memiliki overlap yang kecil.
  • Violin plot: Median dan distribusi LD1 mencerminkan separabilitas antara dua grup.