1) Deskripsi Singkat Dataset

Saya menggunakan dataset Ajwa or Medjool Dates. Dataset ini berisi informasi tentang dua jenis kurma, yaitu Ajwa dan Medjool. Dataset terdiri dari 20 observasi dengan 5 variabel numerik dan 2 variabel kategorik. Analisis multivariat dilakukan hanya pada variabel numerik, karena correlation, covariance, dan eigen analysis tidak dapat diterapkan pada data kategorik. Berikut variabel numerik:

  1. Date Length (cm)

  2. Date Diameter (cm)

  3. Date Weight (g)

  4. Pit Length (cm)

  5. Calories (Kcal)

Tujuan analisis ini adalah untuk:

  1. Mengeksplorasi hubungan antar variabel numerik

  2. Memahami struktur variance-covariance data

  3. Melakukan analisis komponen principal (PCA)

2) Mempersiapkan Data

Import Data

# Set working directory (sesuaikan dengan lokasi file anda)
setwd("C:/Users/ILMIN/Documents/R/Anmul/data week 1/ajwa+or+medjool/Data")

# Import & head data
data <- read.csv("AjwaOrMejdool.csv", sep = ";", header = TRUE)
head(data)
##   Date.Length..cm. Date.Diameter..cm. Date.Weight..g. Pit.Length..cm.
## 1              3.2                2.0              12             2.2
## 2              3.5                1.8              11             1.9
## 3              3.0                1.7               9             2.0
## 4              3.1                2.0              10             1.9
## 5              2.8                1.8               9             1.9
## 6              3.1                1.9              12             2.2
##   Calories..Kcal. Color Class..Ajwa.or.Medjool.
## 1           41.28 Black                    Ajwa
## 2           37.84 Black                    Ajwa
## 3           30.96 Black                    Ajwa
## 4           34.40 Black                    Ajwa
## 5           30.96 Black                    Ajwa
## 6           41.28 Black                    Ajwa

Memeriksa Struktur Data & Summary statistik

str(data)
## 'data.frame':    20 obs. of  7 variables:
##  $ Date.Length..cm.       : num  3.2 3.5 3 3.1 2.8 3.1 3.2 3.1 3.6 3.8 ...
##  $ Date.Diameter..cm.     : num  2 1.8 1.7 2 1.8 1.9 2.2 1.7 2.5 1.8 ...
##  $ Date.Weight..g.        : int  12 11 9 10 9 12 13 12 9 10 ...
##  $ Pit.Length..cm.        : num  2.2 1.9 2 1.9 1.9 2.2 1.9 2.1 2.7 1.9 ...
##  $ Calories..Kcal.        : num  41.3 37.8 31 34.4 31 ...
##  $ Color                  : chr  "Black" "Black" "Black" "Black" ...
##  $ Class..Ajwa.or.Medjool.: chr  "Ajwa" "Ajwa" "Ajwa" "Ajwa" ...
summary(data)
##  Date.Length..cm. Date.Diameter..cm. Date.Weight..g. Pit.Length..cm.
##  Min.   :2.800    Min.   :1.400      Min.   : 9.00   Min.   :1.900  
##  1st Qu.:3.175    1st Qu.:1.700      1st Qu.:10.75   1st Qu.:1.975  
##  Median :4.000    Median :1.800      Median :13.00   Median :2.200  
##  Mean   :4.005    Mean   :1.875      Mean   :13.15   Mean   :2.280  
##  3rd Qu.:5.000    3rd Qu.:2.000      3rd Qu.:15.25   3rd Qu.:2.625  
##  Max.   :5.200    Max.   :2.500      Max.   :19.00   Max.   :2.900  
##  Calories..Kcal.    Color           Class..Ajwa.or.Medjool.
##  Min.   :30.96   Length:20          Length:20              
##  1st Qu.:36.98   Class :character   Class :character       
##  Median :42.76   Mode  :character   Mode  :character       
##  Mean   :43.05                                             
##  3rd Qu.:48.19                                             
##  Max.   :60.04

Memilih Variabel Numerik

data_numeric <- data[, 1:5]
head(data_numeric)
##   Date.Length..cm. Date.Diameter..cm. Date.Weight..g. Pit.Length..cm.
## 1              3.2                2.0              12             2.2
## 2              3.5                1.8              11             1.9
## 3              3.0                1.7               9             2.0
## 4              3.1                2.0              10             1.9
## 5              2.8                1.8               9             1.9
## 6              3.1                1.9              12             2.2
##   Calories..Kcal.
## 1           41.28
## 2           37.84
## 3           30.96
## 4           34.40
## 5           30.96
## 6           41.28

Interpretasi Eksplorasi Data:

  1. Dataset memiliki 20 observasi dan 7 variabel

  2. Variabel numerik: 5 variabel (Date Length, Date Diameter, Date Weight, Pit Length, Calories)

  3. Variabel kategorikal: 2 variabel (Color, Class)

  4. Rata-rata panjang kurma: 4.005 cm

  5. Rata-rata berat kurma: 13.15 gram

  6. Rata-rata kalori kurma: 43.05 Kcal

  7. Rata-rata diameter kurma: 1.875 cm

  8. Rata-rata panjang biji kurma: 2.280 cm

3) Correlation Matrix

a. Menghitung Correlation Matrix

cor_matrix <- cor(data_numeric, use = "complete.obs")
print(cor_matrix)
##                    Date.Length..cm. Date.Diameter..cm. Date.Weight..g.
## Date.Length..cm.          1.0000000       -0.154486605      0.84000936
## Date.Diameter..cm.       -0.1544866        1.000000000     -0.04474655
## Date.Weight..g.           0.8400094       -0.044746555      1.00000000
## Pit.Length..cm.           0.6055983        0.185245092      0.49147954
## Calories..Kcal.           0.7842460       -0.007508119      0.99259322
##                    Pit.Length..cm. Calories..Kcal.
## Date.Length..cm.         0.6055983     0.784246036
## Date.Diameter..cm.       0.1852451    -0.007508119
## Date.Weight..g.          0.4914795     0.992593220
## Pit.Length..cm.          1.0000000     0.441245734
## Calories..Kcal.          0.4412457     1.000000000

b. Visualisasi Correlation Matrix

library(corrplot)
## corrplot 0.95 loaded
# Visualisasi
corrplot(cor_matrix, method = "color", type = "upper", 
         tl.col = "black", tl.srt = 45, 
         addCoef.col = "black", number.cex = 0.7)
title("Correlation Matrix - Dataset Kurma")

c. Interpretasi Correlation Matrix

Correlation matrix menunjukkan hubungan linear antar variabel dengan nilai berkisar antara -1 hingga 1. Diperoleh temuan utama sebagai berikut:

  1. Date Length dan Date Weight memiliki korelasi sangat kuat positif sebesar 0,84, yang menunjukkan bahwa semakin panjang ukuran kurma, beratnya cenderung meningkat.

  2. Date Weight dan Calories menunjukkan korelasi sangat kuat positif sebesar 0,99, artinya kandungan kalori sangat dipengaruhi oleh berat kurma. Kurma yang lebih berat cenderung memiliki kandungan kalori yang lebih tinggi.

  3. Date Length dan Calories juga memiliki korelasi kuat positif sebesar 0,78, yang mengindikasikan bahwa ukuran panjang kurma berkontribusi terhadap jumlah kalori.

  4. Pit Length memiliki korelasi sedang dengan Date Length (0,61) dan Date Weight (0,49), menunjukkan bahwa ukuran biji juga cenderung membesar seiring ukuran dan berat kurma.

  5. Date Diameter menunjukkan korelasi yang lemah atau hampir tidak ada dengan variabel lain, termasuk dengan Calories (-0,01), sehingga diameter bukan faktor utama yang memengaruhi berat maupun kalori.

4. Variance-Covariance Matrix

a. Menghitung Variance-Covariance Matrix

cov_matrix <- cov(data_numeric, use = "complete.obs")
print(cov_matrix)
##                    Date.Length..cm. Date.Diameter..cm. Date.Weight..g.
## Date.Length..cm.         0.72892105        -0.03776316      2.13605263
## Date.Diameter..cm.      -0.03776316         0.08197368     -0.03815789
## Date.Weight..g.          2.13605263        -0.03815789      8.87105263
## Pit.Length..cm.          0.17957895         0.01842105      0.50842105
## Calories..Kcal.          5.54098947        -0.01778947     24.46547368
##                    Pit.Length..cm. Calories..Kcal.
## Date.Length..cm.        0.17957895      5.54098947
## Date.Diameter..cm.      0.01842105     -0.01778947
## Date.Weight..g.         0.50842105     24.46547368
## Pit.Length..cm.         0.12063158      1.26825263
## Calories..Kcal.         1.26825263     68.48405895

b. Interpretasi Variance-Covariance Matrix

Variance–Covariance Matrix menggambarkan tingkat penyebaran data (varians) serta arah hubungan antar variabel (kovarians):

Varians (Diagonal Matriks):
  1. Calories memiliki varians terbesar (68,48), yang menunjukkan bahwa kandungan kalori memiliki penyebaran data paling besar dibandingkan variabel lainnya.

  2. Date Weight memiliki varians cukup besar (8,87), menandakan adanya perbedaan berat kurma yang cukup signifikan antar sampel.

  3. Date Length memiliki varians sebesar 0,73, yang menunjukkan bahwa panjang kurma memiliki variasi sedang antar sampel.

  4. Pit Length memiliki varians sebesar 0,12, yang menunjukkan bahwa panjang biji kurma relatif homogen antar sampel.

  5. Varians Date Diameter relatif kecil (0,08), menunjukkan bahwa diameter kurma cenderung homogen.

Kovarians (Di luar diagonal):
  1. Date Length memiliki kovarians positif dengan Date Weight (2,14), Pit Length (0,18), dan Calories (5,54), yang menunjukkan bahwa peningkatan panjang kurma cenderung diikuti oleh peningkatan berat, ukuran biji, dan kandungan kalori, sementara kovarians negatif dengan Date Diameter (-0,04) menunjukkan hubungan yang sangat lemah dan berlawanan arah.

  2. Date Diameter memiliki kovarians yang sangat kecil dan mendekati nol dengan variabel lain, termasuk Date Weight (-0,04), Pit Length (0,02), dan Calories (-0,02), yang menunjukkan bahwa diameter kurma tidak memiliki hubungan yang signifikan terhadap variasi ukuran, berat, maupun kandungan kalori.

  3. Date Weight memiliki kovarians positif yang kuat dengan Calories (24,47) serta kovarians positif dengan Date Length (2,14) dan Pit Length (0,51), yang menunjukkan bahwa berat kurma meningkat seiring bertambahnya ukuran fisik dan secara langsung memengaruhi kandungan energi.

  4. Pit Length memiliki kovarians positif dengan Date Length (0,18), Date Weight (0,51), dan Calories (1,27), yang menunjukkan bahwa panjang biji cenderung bertambah pada kurma yang lebih besar dan lebih berat.

  5. Calories memiliki kovarians positif yang sangat kuat dengan Date Weight (24,47) serta kovarians positif dengan Date Length (5,54) dan Pit Length (1,27), yang menunjukkan bahwa kandungan kalori terutama dipengaruhi oleh berat kurma dan didukung oleh ukuran fisiknya.

5. Eigenvalue dan Eigenvector

a. Eigenvalue dan Eigenvector Dari Correlation Matrix

eigen_cor <- eigen(cor_matrix)

print("EIGENVALUES (dari Correlation Matrix):")
## [1] "EIGENVALUES (dari Correlation Matrix):"
print(eigen_cor$values)
## [1] 3.118615764 1.101132880 0.609692142 0.168194037 0.002365176
print("EIGENVECTORS (dari Correlation Matrix):")
## [1] "EIGENVECTORS (dari Correlation Matrix):"
print(eigen_cor$vectors)
##             [,1]        [,2]       [,3]       [,4]        [,5]
## [1,]  0.52346445  0.12059066 -0.1597299  0.8227842  0.09463318
## [2,] -0.01791544 -0.91337498  0.3451835  0.2143541 -0.01805303
## [3,]  0.54523965  0.07143079  0.3095586 -0.2114152 -0.74638358
## [4,]  0.38481409 -0.37873637 -0.7691170 -0.3412161  0.02252717
## [5,]  0.52942974  0.05157955  0.4098381 -0.3405198  0.65812060

b. Eigenvalue dan Eigenvector Dari Covariance Matrix

eigen_cov <- eigen(cov_matrix)

print("EIGENVALUES (dari Covariance Matrix):")
## [1] "EIGENVALUES (dari Covariance Matrix):"
print(eigen_cov$values)
## [1] 77.72132186  0.38961316  0.10460410  0.04614707  0.02495171
print("EIGENVECTORS (dari Covariance Matrix):")
## [1] "EIGENVECTORS (dari Covariance Matrix):"
print(eigen_cov$vectors)
##               [,1]       [,2]        [,3]        [,4]       [,5]
## [1,]  0.0769089737  0.8098925 -0.07134208  0.47587185 -0.3265201
## [2,] -0.0004133983 -0.1240036  0.75061959  0.55474971  0.3368174
## [3,]  0.3360215174  0.4422197 -0.06769810 -0.28240806  0.7792265
## [4,]  0.0177182954  0.2831890  0.65312362 -0.61690177 -0.3351892
## [5,]  0.9385416564 -0.2300934  0.01808437  0.07400433 -0.2457497

c. Visualisasi: Scree Plot

# Scree plot dari correlation matrix
plot(eigen_cor$values, type = "b", 
     main = "Scree Plot - Eigenvalues from Correlation Matrix",
     xlab = "Component Number", 
     ylab = "Eigenvalue",
     col = "blue", pch = 16, lwd = 2)
abline(h = 1, col = "red", lty = 2, lwd = 2)
legend("topright", legend = "Kaiser Criterion (eigenvalue = 1)", 
       col = "red", lty = 2, lwd = 2)

# Scree plot dari covariance matrix
plot(eigen_cov$values, type = "b", 
     main = "Scree Plot - Eigenvalues from Covariance Matrix",
     xlab = "Component Number", 
     ylab = "Eigenvalue",
     col = "red", pch = 16, lwd = 2)

d. Proporsi Variance yang Dijelaskan:

# Hitung proporsi variance
prop_var <- eigen_cor$values / sum(eigen_cor$values) * 100
cumsum_var <- cumsum(prop_var)

# Membuat tabel
variance_table <- data.frame(
  Component = paste0("PC", 1:5),
  Eigenvalue = round(eigen_cor$values, 3),
  Proportion = round(prop_var, 2),
  Cumulative = round(cumsum_var, 2)
)
print(variance_table)
##   Component Eigenvalue Proportion Cumulative
## 1       PC1      3.119      62.37      62.37
## 2       PC2      1.101      22.02      84.39
## 3       PC3      0.610      12.19      96.59
## 4       PC4      0.168       3.36      99.95
## 5       PC5      0.002       0.05     100.00

e. Interpretasi Eigenvalue dan Eigenvector dari Correlation Matrix

Nilai eigen yang diperoleh adalah:

  • PC1: 3.119 (62.4% variance explained)
  • PC2: 1.101 (22.0% variance explained)
  • PC3: 0.610 (12.2% variance explained)
  • PC4: 0.168 (3.4% variance explained)
  • PC5: 0.002 (0.05% variance explained)

Interpretasi Eigenvalue:

  1. PC1 menjelaskan 62.4% dari total variasi, yang artinya PC1 Sangat dominan dalam menjelaskan variasi data

  2. PC2 menjelaskan 22.0% dari total variasi, yang artinya PC2 memiliki peran cukup penting

  3. PC1 + PC2 menjelaskan 84.4% total variasi, artinya 2 komponen ini sudah menjelaskan sebagian besar variasi dalam data

  4. Berdasarkan scree plot, terlihat penurunan eigenvalue yang sangat tajam dari PC1 ke PC2, kemudian penurunan menjadi lebih landai pada komponen berikutnya. Hal ini menunjukkan bahwa elbow terjadi setelah PC1, sehingga PC1 merupakan komponen utama yang paling dominan dalam menjelaskan variasi data.

  5. Berdasarkan Kaiser Criterion (eigenvalue > 1) cukup PC1 dan PC2 yang perlu dipertahankan untuk merepresentasikan data

Eigenvector (PC1):`

  • Date.Length: 0.523

  • Date.Diameter: -0.018

  • Date.Weight: 0.545 (paling dominan)

  • Pit.Length: 0.385

  • Calories: 0.529

Interpretasi Eigenvector(PC1):

  • PC1 adalah kombinasi linear dari semua variabel

  • Date.Weight (0.545), Calories (0.529), dan Date.Length (0.523) memiliki loading tertinggi

  • PC1 dapat digambarkan kurma yang besar, berat, dan tinggi kalori

  • Date Diameter hampir tidak berkontribusi (-0.018)

f. Interpretasi Eigenvalue dan Eigenvector dari Covariance Matrix

Nilai eigen yang diperoleh adalah:

  • PC1: 77.72 (99.5% variance explained!)

  • PC2: 0.389 (0.5%)

  • PC3: 0.105

  • PC4: 0.046

  • PC5: 0.025

Interpretasi Eigenvalue:

  • PC1 mendominasi hampir seluruh variance (99.5%), ini terjadi karena variabel Calories memiliki variance yang sangat besar dibanding variabel lain

  • Distribusi yang tidak seimbang ini menunjukkan mengapa PCA biasanya menggunakan correlation matrix bukan covariance matrix, covariance matrix lebih sensitif terhadap perbedaan skala/unit antar variabel

Eigenvector (PC1): - Date.Length: 0.077

  • Date.Diameter: 0.000

  • Date.Weight: 0.336

  • Pit.Length: 0.018

  • Calories: 0.939 (paling dominan)

Interpretasi Eigenvector(PC1):

PC1 dari covariance matrix hampir sepenuhnya merepresentasikan variabel Calories (0.939), dengan kontribusi kecil dari Date.Weight (0.336), sementara variabel lain hampir tidak berkontribusi karena variance mereka jauh lebih kecil.

6. Kesimpulan

Dari analisis multivariat terhadap dataset kurma Ajwa dan Medjool, dapat disimpulkan:

  1. Variabel Date Weight, Date Length, dan Calories merupakan variabel utama yang saling berkaitan kuat.

  2. Diameter kurma bukan faktor dominan dalam membedakan karakteristik kurma Ajwa dan Medjool

  3. Kalori memiliki variabilitas tertinggi antar sampel, sedangkan diameter kurma paling konsisten/homogen

  4. Dua komponen utama dari correlation matrix (PC1 dan PC2) sudah cukup untuk mewakili 84.4% variasi data

  5. PC1 dapat merepresentasikan “ukuran/size” kurma secara keseluruhan Analisis berbasis correlation matrix lebih stabil dan representatif dibandingkan covariance matrix untuk dataset ini.