1. Pendahuluan

Tugas ini merupakan bagian dari mata kuliah Pengantar Analisis Multivariat yang bertujuan untuk:

  1. Melakukan import dataset HCV ke R
  2. Menghitung dan menganalisis Correlation Matrix
  3. Menghitung dan menganalisis Variance-Covariance Matrix
  4. Menghitung Eigenvalue dan Eigenvector
  5. Memberikan interpretasi dari setiap output

Deskripsi Singkat Dataset

Saya menggunakan dataset Hepatitis C Virus (HCV). Dataset ini berisi informasi tentang pasien dengan berbagai kondisi kesehatan hati, mulai dari donor darah yang sehat hingga pasien dengan Hepatitis C, Fibrosis, dan Sirosis. Dataset terdiri dari 615 observasi dengan 11 variabel numerik dan 3 variabel kategorik. Analisis multivariat dilakukan hanya pada variabel numerik, karena correlation, covariance, dan eigen analysis tidak dapat diterapkan pada data kategorik.

Variabel kategorik:

  1. Category: Kategori pasien (0=Blood Donor, 1=Hepatitis, 2=Fibrosis, 3=Cirrhosis)
  2. Sex: Jenis kelamin pasien (m/f)
  3. X: Nomor urut observasi

Variabel numerik yang dianalisis:

  1. Age: Usia pasien (tahun)
  2. ALB (Albumin): Protein utama dalam plasma darah (g/L)
  3. ALP (Alkaline Phosphatase): Enzim yang terkait dengan saluran empedu dan tulang (IU/L)
  4. ALT (Alanine Transaminase): Enzim hati, indikator utama kerusakan hepatosit (IU/L)
  5. AST (Aspartate Transaminase): Enzim hati, indikator kerusakan sel hati (IU/L)
  6. BIL (Bilirubin): Produk pemecahan hemoglobin, indikator fungsi hati (μmol/L)
  7. CHE (Cholinesterase): Enzim yang diproduksi oleh hati (kU/L)
  8. CHOL (Cholesterol): Lemak dalam darah yang diproduksi dan diproses oleh hati (mmol/L)
  9. CREA (Creatinine): Produk limbah metabolisme otot, indikator fungsi ginjal (μmol/L)
  10. GGT (Gamma-Glutamyl Transferase): Enzim hati yang sensitif terhadap kerusakan hepatobiliary (IU/L)
  11. PROT (Total Protein): Total protein dalam darah, termasuk albumin dan globulin (g/L)

2. Import Data

Langkah pertama adalah mengimport dataset ke dalam R.

# Set working directory (sesuaikan dengan folder Anda)
# setwd("~/R/tugas anmul")

# Import data
data <- read.csv("hcvdat0.csv", header = TRUE)

# Melihat struktur data
str(data)
## 'data.frame':    615 obs. of  14 variables:
##  $ X       : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ Category: chr  "0=Blood Donor" "0=Blood Donor" "0=Blood Donor" "0=Blood Donor" ...
##  $ Age     : int  32 32 32 32 32 32 32 32 32 32 ...
##  $ Sex     : chr  "m" "m" "m" "m" ...
##  $ ALB     : num  38.5 38.5 46.9 43.2 39.2 41.6 46.3 42.2 50.9 42.4 ...
##  $ ALP     : num  52.5 70.3 74.7 52 74.1 43.3 41.3 41.9 65.5 86.3 ...
##  $ ALT     : num  7.7 18 36.2 30.6 32.6 18.5 17.5 35.8 23.2 20.3 ...
##  $ AST     : num  22.1 24.7 52.6 22.6 24.8 19.7 17.8 31.1 21.2 20 ...
##  $ BIL     : num  7.5 3.9 6.1 18.9 9.6 12.3 8.5 16.1 6.9 35.2 ...
##  $ CHE     : num  6.93 11.17 8.84 7.33 9.15 ...
##  $ CHOL    : num  3.23 4.8 5.2 4.74 4.32 6.05 4.79 4.6 4.1 4.45 ...
##  $ CREA    : num  106 74 86 80 76 111 70 109 83 81 ...
##  $ GGT     : num  12.1 15.6 33.2 33.8 29.9 91 16.9 21.5 13.7 15.9 ...
##  $ PROT    : num  69 76.5 79.3 75.7 68.7 74 74.5 67.1 71.3 69.9 ...
# Melihat ringkasan statistik
summary(data)
##        X           Category              Age            Sex           
##  Min.   :  1.0   Length:615         Min.   :19.00   Length:615        
##  1st Qu.:154.5   Class :character   1st Qu.:39.00   Class :character  
##  Median :308.0   Mode  :character   Median :47.00   Mode  :character  
##  Mean   :308.0                      Mean   :47.41                     
##  3rd Qu.:461.5                      3rd Qu.:54.00                     
##  Max.   :615.0                      Max.   :77.00                     
##                                                                       
##       ALB             ALP              ALT              AST        
##  Min.   :14.90   Min.   : 11.30   Min.   :  0.90   Min.   : 10.60  
##  1st Qu.:38.80   1st Qu.: 52.50   1st Qu.: 16.40   1st Qu.: 21.60  
##  Median :41.95   Median : 66.20   Median : 23.00   Median : 25.90  
##  Mean   :41.62   Mean   : 68.28   Mean   : 28.45   Mean   : 34.79  
##  3rd Qu.:45.20   3rd Qu.: 80.10   3rd Qu.: 33.08   3rd Qu.: 32.90  
##  Max.   :82.20   Max.   :416.60   Max.   :325.30   Max.   :324.00  
##  NA's   :1       NA's   :18       NA's   :1                        
##       BIL             CHE              CHOL            CREA        
##  Min.   :  0.8   Min.   : 1.420   Min.   :1.430   Min.   :   8.00  
##  1st Qu.:  5.3   1st Qu.: 6.935   1st Qu.:4.610   1st Qu.:  67.00  
##  Median :  7.3   Median : 8.260   Median :5.300   Median :  77.00  
##  Mean   : 11.4   Mean   : 8.197   Mean   :5.368   Mean   :  81.29  
##  3rd Qu.: 11.2   3rd Qu.: 9.590   3rd Qu.:6.060   3rd Qu.:  88.00  
##  Max.   :254.0   Max.   :16.410   Max.   :9.670   Max.   :1079.10  
##                                   NA's   :10                       
##       GGT              PROT      
##  Min.   :  4.50   Min.   :44.80  
##  1st Qu.: 15.70   1st Qu.:69.30  
##  Median : 23.30   Median :72.20  
##  Mean   : 39.53   Mean   :72.04  
##  3rd Qu.: 40.20   3rd Qu.:75.40  
##  Max.   :650.90   Max.   :90.00  
##                   NA's   :1

3. Persiapan Data

# Memilih hanya variabel numerik
numeric_data <- data[, c("Age", "ALB", "ALP", "ALT", "AST", "BIL", 
                         "CHE", "CHOL", "CREA", "GGT", "PROT")]

# Menghapus missing values
numeric_data <- na.omit(numeric_data)

# Melihat dimensi data
cat("Jumlah observasi setelah cleaning:", nrow(numeric_data), "\n")
## Jumlah observasi setelah cleaning: 589
cat("Jumlah variabel:", ncol(numeric_data), "\n")
## Jumlah variabel: 11
# Cek struktur data yang sudah bersih
str(numeric_data)
## 'data.frame':    589 obs. of  11 variables:
##  $ Age : int  32 32 32 32 32 32 32 32 32 32 ...
##  $ ALB : num  38.5 38.5 46.9 43.2 39.2 41.6 46.3 42.2 50.9 42.4 ...
##  $ ALP : num  52.5 70.3 74.7 52 74.1 43.3 41.3 41.9 65.5 86.3 ...
##  $ ALT : num  7.7 18 36.2 30.6 32.6 18.5 17.5 35.8 23.2 20.3 ...
##  $ AST : num  22.1 24.7 52.6 22.6 24.8 19.7 17.8 31.1 21.2 20 ...
##  $ BIL : num  7.5 3.9 6.1 18.9 9.6 12.3 8.5 16.1 6.9 35.2 ...
##  $ CHE : num  6.93 11.17 8.84 7.33 9.15 ...
##  $ CHOL: num  3.23 4.8 5.2 4.74 4.32 6.05 4.79 4.6 4.1 4.45 ...
##  $ CREA: num  106 74 86 80 76 111 70 109 83 81 ...
##  $ GGT : num  12.1 15.6 33.2 33.8 29.9 91 16.9 21.5 13.7 15.9 ...
##  $ PROT: num  69 76.5 79.3 75.7 68.7 74 74.5 67.1 71.3 69.9 ...
##  - attr(*, "na.action")= 'omit' Named int [1:26] 122 320 330 414 425 434 499 541 542 546 ...
##   ..- attr(*, "names")= chr [1:26] "122" "320" "330" "414" ...

Dari 615 observasi awal, saya menghapus missing values, dan tersisa hanya 589 observasi yang siap untuk dianalisis. Missing values tersebut dihapus karena dapat mengganggu perhitungan statistik dan menghasilkan bias dalam analisis.


4. Correlation Matrix

4.1 Perhitungan Correlation Matrix

# Menghitung matriks korelasi
cor_matrix <- cor(numeric_data, use = "complete.obs")
print(round(cor_matrix, 4))
##          Age     ALB     ALP     ALT     AST     BIL     CHE    CHOL    CREA
## Age   1.0000 -0.1911  0.1777 -0.0406  0.0727  0.0397 -0.0759  0.1247 -0.0251
## ALB  -0.1911  1.0000 -0.1461  0.0395 -0.1776 -0.1696  0.3609  0.2104  0.0014
## ALP   0.1777 -0.1461  1.0000  0.2216  0.0670  0.0584  0.0295  0.1259  0.1539
## ALT  -0.0406  0.0395  0.2216  1.0000  0.1987 -0.1068  0.2243  0.1500 -0.0361
## AST   0.0727 -0.1776  0.0670  0.1987  1.0000  0.3096 -0.1973 -0.2012 -0.0179
## BIL   0.0397 -0.1696  0.0584 -0.1068  0.3096  1.0000 -0.3207 -0.1816  0.0199
## CHE  -0.0759  0.3609  0.0295  0.2243 -0.1973 -0.3207  1.0000  0.4280 -0.0121
## CHOL  0.1247  0.2104  0.1259  0.1500 -0.2012 -0.1816  0.4280  1.0000 -0.0515
## CREA -0.0251  0.0014  0.1539 -0.0361 -0.0179  0.0199 -0.0121 -0.0515  1.0000
## GGT   0.1434 -0.1476  0.4613  0.2197  0.4778  0.2106 -0.0957  0.0088  0.1254
## PROT -0.1598  0.5707 -0.0631  0.0168  0.0174 -0.0526  0.3063  0.2450 -0.0301
##          GGT    PROT
## Age   0.1434 -0.1598
## ALB  -0.1476  0.5707
## ALP   0.4613 -0.0631
## ALT   0.2197  0.0168
## AST   0.4778  0.0174
## BIL   0.2106 -0.0526
## CHE  -0.0957  0.3063
## CHOL  0.0088  0.2450
## CREA  0.1254 -0.0301
## GGT   1.0000 -0.0371
## PROT -0.0371  1.0000

4.2 Visualisasi Correlation Matrix

library(corrplot)
## corrplot 0.95 loaded
# Visualisasi dengan corrplot
corrplot(cor_matrix, 
         method = "color", 
         type = "upper",
         tl.col = "black", 
         tl.srt = 40,
         addCoef.col = "black", 
         number.cex = 0.7,
         title = "Correlation Matrix - HCV Dataset",
         mar = c(0,0,3,0))

4.3 Interpretasi Correlation Matrix

Correlation matrix menunjukkan hubungan linear antar variabel dengan nilai berkisar antara -1 hingga 1. Secara umum, sebagian besar pasangan variabel menunjukkan korelasi lemah hingga sedang, yang mengindikasikan bahwa setiap variabel membawa informasi yang relatif berbeda. Namun, terdapat beberapa hubungan yang cukup menonjol :

  1. Beberapa pasangan variabel menunjukkan korelasi positif sedang hingga cukup kuat, seperti ALB–PROT (0.5707), AST–GGT (0.4778), dan ALP–GGT (0.4613). Hal ini menunjukkan adanya keterkaitan fungsional antar parameter biokimia yang berkaitan dengan metabolisme protein serta fungsi hati dan sistem empedu.

  2. Terdapat pula korelasi negatif, misalnya antara BIL dan CHE (−0.3207) serta ALB dan Age (−0.1911), yang mengindikasikan bahwa peningkatan indikator gangguan hati atau usia cenderung diikuti oleh penurunan fungsi sintesis protein.

  3. Sebagian besar pasangan variabel lainnya memiliki nilai korelasi yang sangat kecil atau mendekati nol (misalnya sekitar −0.03, 0.02, dan −0.01). Hal ini menunjukkan bahwa tidak terdapat hubungan linear yang signifikan antara variabel-variabel tersebut, sehingga perubahan pada satu variabel tidak diikuti oleh perubahan linier pada variabel lainnya.

  4. Kondisi ini mengindikasikan bahwa struktur hubungan antar variabel bersifat heterogen, di mana hanya beberapa variabel tertentu yang saling berkaitan, sementara sebagian besar variabel lainnya relatif independen secara linear.


5. Variance-Covariance Matrix

5.1 Perhitungan Variance-Covariance Matrix

# Menghitung matriks varian-kovarian
cov_matrix <- cov(numeric_data, use = "complete.obs")
print(round(cov_matrix, 4))
##           Age      ALB      ALP      ALT       AST      BIL      CHE    CHOL
## Age   98.6314 -10.9348  45.7505  -8.4074   23.7428   6.8552  -1.6508  1.3986
## ALB  -10.9348  33.1983 -21.8233   4.7479  -33.6342 -17.0095   4.5564  1.3687
## ALP   45.7505 -21.8233 671.9019 119.8417   57.1010  26.3375   1.6744  3.6843
## ALT   -8.4074   4.7479 119.8417 435.2698  136.2207 -38.7838  10.2554  3.5330
## AST   23.7428 -33.6342  57.1010 136.2207 1080.2312 177.1104 -14.2062 -7.4660
## BIL    6.8552 -17.0095  26.3375 -38.7838  177.1104 302.9887 -12.2317 -3.5681
## CHE   -1.6508   4.5564   1.6744  10.2554  -14.2062 -12.2317   4.8008  1.0588
## CHOL   1.3986   1.3687   3.6843   3.5330   -7.4660  -3.5681   1.0588  1.2745
## CREA -12.6588   0.4187 202.2549 -38.1887  -29.9060  17.5695  -1.3463 -2.9455
## GGT   77.3238 -46.1805 649.3151 248.9098  852.7066 199.0315 -11.3884  0.5409
## PROT  -8.4867  17.5893  -8.7467   1.8733    3.0596  -4.8950   3.5896  1.4798
##           CREA       GGT     PROT
## Age   -12.6588   77.3238  -8.4867
## ALB     0.4187  -46.1805  17.5893
## ALP   202.2549  649.3151  -8.7467
## ALT   -38.1887  248.9098   1.8733
## AST   -29.9060  852.7066   3.0596
## BIL    17.5695  199.0315  -4.8950
## CHE    -1.3463  -11.3884   3.5896
## CHOL   -2.9455    0.5409   1.4798
## CREA 2570.1849  345.0942  -8.1652
## GGT   345.0942 2948.7514 -10.7838
## PROT   -8.1652  -10.7838  28.6105

5.2 Interpretasi Variance-Covariance Matrix

Variance (Diagonal Matrix):

Variance mengukur seberapa tersebar data dari rata-ratanya. Semakin besar variance, semakin heterogen datanya.

  1. GGT (2948.75): Memiliki variabilitas paling tinggi, range datanya sangat lebar (4.5-650.9), dan menunjukkan bahwa GGT sangat bervariasi antar pasien.

  2. CREA (2570.18): Variabilitas sangat tinggi, creatinine bervariasi luas antar pasien, dan mungkin ada pasien dengan gangguan ginjal yang ekstrem.

  3. AST (1080.23): Enzim hati ini juga sangat bervariasi, dan terindikasi memiliki beragam tingkat kerusakan hati di dataset.

  4. ALP (671.90): Alkaline Phosphatase memiliki variabilitas tinggi, menunjukkan perbedaan yang signifikan dalam kondisi saluran empedu dan tulang antar pasien.

  5. ALT (435.27): Alanine Transaminase bervariasi cukup tinggi, mengindikasikan berbagai tingkat kerusakan hepatosit pada pasien.

  6. BIL (302.99): Bilirubin memiliki variabilitas sedang hingga tinggi, menunjukkan perbedaan dalam fungsi pemrosesan hemoglobin oleh hati antar pasien.

  7. Age (98.63): Usia pasien bervariasi dengan standard deviation sekitar 10 tahun, menunjukkan dataset mencakup berbagai kelompok usia.

  8. ALB (33.20): Albumin memiliki variabilitas sedang, menunjukkan perbedaan dalam produksi protein hati antar pasien.

  9. PROT (28.61): Total Protein memiliki variabilitas relatif rendah, menunjukkan nilai protein darah yang cukup konsisten antar pasien.

  10. CHE (4.80): Cholinesterase relatif stabil dengan variabilitas rendah, menunjukkan produksi enzim yang cukup konsisten.

  11. CHOL (1.27): Kolesterol memiliki variabilitas paling rendah, relatif stabil antar pasien, dan tidak memiliki banyak variasi ekstrem.

Covariance (Off-diagonal):

Covariance mengukur bagaimana dua variabel berubah bersama-sama.

  1. AST dan GGT (852.71): Kedua enzim hati ini meningkat bersama-sama, semakin tinggi AST maka semakin tinggi pula GGT. Ini menunjukkan pola kerusakan hati yang seragam.

  2. ALP dan GGT (649.32): Juga menunjukkan pola peningkatan bersama, mengindikasikan bahwa gangguan pada saluran empedu sering disertai dengan peningkatan GGT.

  3. CREA dan ALP (202.25): Creatinine dan ALP meningkat bersama, mengindikasikan komplikasi ginjal-hati pada beberapa pasien.

  4. ALT dan GGT (248.91): Kedua enzim hati ini juga berkorelasi positif, menunjukkan aktivitas enzim hati yang meningkat bersamaan.

  5. AST dan BIL (177.11): Ketika kerusakan hati meningkat (AST tinggi), bilirubin juga cenderung meningkat karena gangguan pemrosesan.

  6. ALB dan AST (-33.63): Ketika AST meningkat (kerusakan hati) maka Albumin cenderung menurun, pola ini konsisten dengan disfungsi hati yang menurunkan produksi protein.

  7. ALB dan GGT (-46.18): Albumin menurun ketika GGT meningkat, menunjukkan hubungan terbalik antara produksi protein dan aktivitas enzim pada kerusakan hati.

  8. ALB dan ALP (-21.82): Pola yang sama, albumin menurun saat ALP meningkat, konsisten dengan gangguan fungsi hati.

  9. BIL dan CHE (-12.23): Bilirubin tinggi (gangguan hati) berbanding terbalik dengan Cholinesterase, menunjukkan penurunan produksi enzim saat fungsi hati menurun.

  10. ALB dan BIL (-17.01): Albumin menurun ketika bilirubin meningkat, mengindikasikan hubungan terbalik antara produksi protein dan akumulasi bilirubin pada disfungsi hati.


6. Eigenvalue dan Eigenvector

6.1 Eigenvalue dan Eigenvector

# Menghitung eigenvalue dan eigenvector dari correlation matrix
eigen_cor <- eigen(cor_matrix)

# Menampilkan eigenvalue
print(round(eigen_cor$values, 4))
##  [1] 2.4545 1.8566 1.3530 1.0825 1.0271 0.7338 0.6696 0.5823 0.5002 0.4230
## [11] 0.3175
# Menampilkan eigenvector
print(round(eigen_cor$vectors, 4))
##          [,1]    [,2]    [,3]    [,4]    [,5]    [,6]    [,7]    [,8]    [,9]
##  [1,]  0.1722 -0.1417  0.4085  0.1710  0.5929 -0.5123  0.0238  0.3470  0.1118
##  [2,] -0.4463 -0.1042 -0.3534 -0.1195  0.1439 -0.1064  0.2154  0.3399 -0.0164
##  [3,]  0.1778 -0.4729  0.2429 -0.2491  0.0254  0.4391  0.4227  0.1678  0.1365
##  [4,] -0.0244 -0.4412  0.0137  0.2816 -0.5481 -0.0778 -0.2411  0.5398 -0.2008
##  [5,]  0.3379 -0.2591 -0.4314  0.2459 -0.0360 -0.3941 -0.1045 -0.2907  0.0360
##  [6,]  0.3306  0.0096 -0.3739 -0.0187  0.3555  0.4561 -0.5142  0.3077  0.2188
##  [7,] -0.4281 -0.2867  0.1122  0.0385 -0.0860 -0.0420 -0.2561 -0.2155  0.7720
##  [8,] -0.3123 -0.3325  0.2673  0.1040  0.3082  0.2175 -0.4165 -0.3153 -0.5061
##  [9,]  0.0656 -0.0980  0.0249 -0.8571 -0.0940 -0.3362 -0.3376  0.0375 -0.0918
## [10,]  0.3150 -0.4930 -0.1328 -0.0687  0.0352 -0.0035  0.2218 -0.3414 -0.0313
## [11,] -0.3621 -0.1955 -0.4699 -0.0506  0.2943 -0.0449  0.1966  0.0381 -0.1326
##         [,10]   [,11]
##  [1,]  0.0064  0.0817
##  [2,] -0.5626 -0.3742
##  [3,]  0.2706 -0.3627
##  [4,]  0.0361  0.1665
##  [5,]  0.1987 -0.5285
##  [6,] -0.0761  0.0576
##  [7,]  0.0116  0.0565
##  [8,] -0.0529 -0.1883
##  [9,]  0.0717 -0.0053
## [10,] -0.4891  0.4776
## [11,]  0.5624  0.3803

6.2 Proporsi Varians

# Menghitung proporsi varians
prop_var <- eigen_cor$values / sum(eigen_cor$values)

print(round(prop_var, 4))
##  [1] 0.2231 0.1688 0.1230 0.0984 0.0934 0.0667 0.0609 0.0529 0.0455 0.0385
## [11] 0.0289
print(round(cumsum(prop_var), 4))
##  [1] 0.2231 0.3919 0.5149 0.6133 0.7067 0.7734 0.8343 0.8872 0.9327 0.9711
## [11] 1.0000
# Membuat tabel ringkasan
variance_explained <- data.frame(
  Komponen = 1:length(eigen_cor$values),
  Eigenvalue = round(eigen_cor$values, 4),
  Proporsi_Persen = round(prop_var * 100, 2),
  Kumulatif_Persen = round(cumsum(prop_var) * 100, 2)
)

print(variance_explained)
##    Komponen Eigenvalue Proporsi_Persen Kumulatif_Persen
## 1         1     2.4545           22.31            22.31
## 2         2     1.8566           16.88            39.19
## 3         3     1.3530           12.30            51.49
## 4         4     1.0825            9.84            61.33
## 5         5     1.0271            9.34            70.67
## 6         6     0.7338            6.67            77.34
## 7         7     0.6696            6.09            83.43
## 8         8     0.5823            5.29            88.72
## 9         9     0.5002            4.55            93.27
## 10       10     0.4230            3.85            97.11
## 11       11     0.3175            2.89           100.00

6.3 Scree Plot

# Membuat scree plot
plot(eigen_cor$values, 
     type = "b",
     main = "Scree Plot - Eigenvalues dari Correlation Matrix",
     xlab = "Komponen Utama", 
     ylab = "Eigenvalue",
     col = "darkblue", 
     pch = 19,
     lwd = 2,
     cex = 1.2)

# Garis referensi Kaiser criterion (eigenvalue = 1)
abline(h = 1, col = "red", lty = 2, lwd = 2)
text(8, 1.3, "Kaiser Criterion (eigenvalue = 1)", col = "red", cex = 0.9)

# Grid untuk memudahkan pembacaan
grid()

6.4 Interpretasi Eigenvalue dan Eigenvector

a. Interpretasi Eigenvalue

Eigenvalue diinterpretasikan dalam bentuk proporsi persen agar lebih mudah dipahami seberapa besar kontribusi setiap komponen terhadap total variasi data. Proporsi persen membantu menentukan berapa komponen yang cukup untuk merepresentasikan data secara efisien :

  1. PC1 menjelaskan 22.31% dari total variasi, yang artinya PC1 merupakan komponen paling dominan dalam menjelaskan variasi data biomarker HCV.
  2. PC2 menjelaskan 16.88% dari total variasi, yang artinya PC2 memiliki peran cukup penting sebagai komponen kedua.
  3. PC3 menjelaskan 12.30% dari total variasi, yang artinya PC3 masih memberikan kontribusi signifikan terhadap variasi data.
  4. PC1 + PC2 + PC3 menjelaskan 51.49% total variasi, artinya 3 komponen pertama sudah menjelaskan lebih dari setengah variasi data.
  5. PC1 + PC2 + PC3 + PC4 + PC5 menjelaskan 70.67% total variasi, artinya 5 komponen pertama sudah menjelaskan sebagian besar variasi dalam data.
  6. Berdasarkan scree plot, terlihat penurunan eigenvalue yang cukup tajam dari PC1 ke PC2, kemudian penurunan eigenvalue terus berlanjut dengan slope yang semakin landai hingga PC5. Elbow yang paling jelas terlihat terjadi setelah PC5, di mana eigenvalue turun di bawah 1. Hal ini menunjukkan bahwa PC1 hingga PC5 merupakan komponen-komponen utama yang paling penting dalam menjelaskan variasi data, sementara komponen setelah PC5 hanya menangkap variasi yang relatif kecil.
  7. Berdasarkan Kaiser Criterion (eigenvalue > 1), terdapat 5 komponen (PC1 hingga PC5) yang perlu dipertahankan untuk merepresentasikan data. Kelima komponen ini menjelaskan 70.67% total variasi, sehingga kita dapat mereduksi 11 variabel menjadi 5 komponen utama dengan tetap mempertahankan sebagian besar informasi.
b. Interpretasi Eigenvector

Eigenvector menunjukkan kontribusi setiap variabel terhadap komponen utama. Saya akan menjelaskan eigenvector PC1 hingga PC5 karena kelima komponen ini memiliki eigenvalue > 1 (Kaiser Criterion) dan menjelaskan 70.67% total variasi.

# Membuat data frame untuk loading 3 komponen pertama
loadings_pc <- data.frame(
  Variabel = names(numeric_data),
  PC1 = round(eigen_cor$vectors[, 1], 4),
  PC2 = round(eigen_cor$vectors[, 2], 4),
  PC3 = round(eigen_cor$vectors[, 3], 4),
  PC4 = round(eigen_cor$vectors[, 4], 4),
  PC5 = round(eigen_cor$vectors[, 5], 4)
)

print(loadings_pc)
##    Variabel     PC1     PC2     PC3     PC4     PC5
## 1       Age  0.1722 -0.1417  0.4085  0.1710  0.5929
## 2       ALB -0.4463 -0.1042 -0.3534 -0.1195  0.1439
## 3       ALP  0.1778 -0.4729  0.2429 -0.2491  0.0254
## 4       ALT -0.0244 -0.4412  0.0137  0.2816 -0.5481
## 5       AST  0.3379 -0.2591 -0.4314  0.2459 -0.0360
## 6       BIL  0.3306  0.0096 -0.3739 -0.0187  0.3555
## 7       CHE -0.4281 -0.2867  0.1122  0.0385 -0.0860
## 8      CHOL -0.3123 -0.3325  0.2673  0.1040  0.3082
## 9      CREA  0.0656 -0.0980  0.0249 -0.8571 -0.0940
## 10      GGT  0.3150 -0.4930 -0.1328 -0.0687  0.0352
## 11     PROT -0.3621 -0.1955 -0.4699 -0.0506  0.2943
  1. PC1 (22.31% variance) - “Komponen Fungsi Hati”: PC1 didominasi oleh ALB (-0.4463), CHE (-0.4281), dan PROT (-0.3621) di sisi negatif serta AST (0.3379), BIL (0.3306), dan GGT (0.3150) di sisi positif, yang memisahkan pasien dengan fungsi hati baik (albumin, cholinesterase, protein tinggi) dari pasien dengan kerusakan hati (enzim hati dan bilirubin tinggi).
  2. PC2 (16.88% variance) - “Komponen Enzim Hati”: PC2 didominasi oleh GGT (-0.4930), ALP (-0.4729), dan ALT (-0.4412), yang mencerminkan tingkat aktivitas enzim hepatobiliary dan kerusakan hepatosit pada pasien.
  3. PC3 (12.30% variance) - “Komponen Usia dan Protein”: PC3 didominasi oleh PROT (-0.4699), AST (-0.4314), dan Age (0.4085), yang menangkap hubungan antara usia pasien dengan kadar protein total dan enzim hati.
  4. PC4 (9.84% variance) - “Komponen Fungsi Ginjal”: PC4 didominasi oleh CREA (-0.8571), yang terutama mencerminkan variasi fungsi ginjal pada pasien yang independen dari komponen fungsi hati di PC1-PC3.
  5. PC5 (9.34% variance) - “Komponen Usia”: PC5 didominasi oleh Age (0.5929), yang menangkap variasi terkait usia pasien yang tidak dijelaskan oleh komponen sebelumnya.