Pada tugas ini digunakan dataset Concrete Compressive Strength dari UCI Machine Learning Repository. Dataset ini berisi 1030 observasi dan 9 variabel numerik yang berkaitan dengan komposisi campuran beton serta nilai kuat tekan beton (compressive strength).
Tujuan analisis ini adalah:
Membuat Correlation Matrix
Membuat Variance–Covariance Matrix
Menghitung Eigenvalue dan Eigenvector
Menjelaskan hasil dari setiap output.
library(readxl)
df <- read_excel("Concrete_Data.xls", sheet = "Sheet1")
dim(df)
## [1] 1030 9
str(df)
## tibble [1,030 × 9] (S3: tbl_df/tbl/data.frame)
## $ Cement (component 1)(kg in a m^3 mixture) : num [1:1030] 540 540 332 332 199 ...
## $ Blast Furnace Slag (component 2)(kg in a m^3 mixture): num [1:1030] 0 0 142 142 132 ...
## $ Fly Ash (component 3)(kg in a m^3 mixture) : num [1:1030] 0 0 0 0 0 0 0 0 0 0 ...
## $ Water (component 4)(kg in a m^3 mixture) : num [1:1030] 162 162 228 228 192 228 228 228 228 228 ...
## $ Superplasticizer (component 5)(kg in a m^3 mixture) : num [1:1030] 2.5 2.5 0 0 0 0 0 0 0 0 ...
## $ Coarse Aggregate (component 6)(kg in a m^3 mixture) : num [1:1030] 1040 1055 932 932 978 ...
## $ Fine Aggregate (component 7)(kg in a m^3 mixture) : num [1:1030] 676 676 594 594 826 ...
## $ Age (day) : num [1:1030] 28 28 270 365 360 90 365 28 28 28 ...
## $ Concrete compressive strength(MPa, megapascals) : num [1:1030] 80 61.9 40.3 41.1 44.3 ...
summary(df)
## Cement (component 1)(kg in a m^3 mixture)
## Min. :102.0
## 1st Qu.:192.4
## Median :272.9
## Mean :281.2
## 3rd Qu.:350.0
## Max. :540.0
## Blast Furnace Slag (component 2)(kg in a m^3 mixture)
## Min. : 0.0
## 1st Qu.: 0.0
## Median : 22.0
## Mean : 73.9
## 3rd Qu.:142.9
## Max. :359.4
## Fly Ash (component 3)(kg in a m^3 mixture)
## Min. : 0.00
## 1st Qu.: 0.00
## Median : 0.00
## Mean : 54.19
## 3rd Qu.:118.27
## Max. :200.10
## Water (component 4)(kg in a m^3 mixture)
## Min. :121.8
## 1st Qu.:164.9
## Median :185.0
## Mean :181.6
## 3rd Qu.:192.0
## Max. :247.0
## Superplasticizer (component 5)(kg in a m^3 mixture)
## Min. : 0.000
## 1st Qu.: 0.000
## Median : 6.350
## Mean : 6.203
## 3rd Qu.:10.160
## Max. :32.200
## Coarse Aggregate (component 6)(kg in a m^3 mixture)
## Min. : 801.0
## 1st Qu.: 932.0
## Median : 968.0
## Mean : 972.9
## 3rd Qu.:1029.4
## Max. :1145.0
## Fine Aggregate (component 7)(kg in a m^3 mixture) Age (day)
## Min. :594.0 Min. : 1.00
## 1st Qu.:731.0 1st Qu.: 7.00
## Median :779.5 Median : 28.00
## Mean :773.6 Mean : 45.66
## 3rd Qu.:824.0 3rd Qu.: 56.00
## Max. :992.6 Max. :365.00
## Concrete compressive strength(MPa, megapascals)
## Min. : 2.332
## 1st Qu.:23.707
## Median :34.443
## Mean :35.818
## 3rd Qu.:46.136
## Max. :82.599
Berdasarkan hasil import data, dataset Concrete Compressive Strength memiliki 1030 observasi dan 9 variabel numerik. Seluruh variabel merupakan variabel kuantitatif yang merepresentasikan komponen campuran beton (dalam kg/m³), umur beton (hari), serta kuat tekan beton (MPa).
Dari ringkasan statistik deskriptif, terlihat bahwa jumlah cement memiliki rentang nilai dari 102.0 hingga 540.0 kg/m³, sedangkan komponen substitusi seperti blast furnace slag dan fly ash memiliki nilai minimum 0, yang menunjukkan bahwa pada sebagian campuran, komponen tersebut tidak digunakan sama sekali. Variabel age memiliki rentang 1 hingga 365 hari, menunjukkan data mencakup umur beton yang sangat bervariasi.
Variabel target Strength (kuat tekan beton) memiliki rentang nilai dari 2.332 MPa hingga 82.599 MPa, dengan nilai rata-rata sekitar 35.818 MPa. Hal ini menunjukkan variasi kekuatan beton pada dataset cukup besar, sehingga cocok untuk dianalisis lebih lanjut menggunakan pendekatan multivariat.
names(df) <- c("Cement","Slag","FlyAsh","Water","SuperPlast", "CoarseAgg","FineAgg","Age","Strength")
df_num <- df[sapply(df, is.numeric)]
df_num <- na.omit(df_num)
colSums(is.na(df_num))
## Cement Slag FlyAsh Water SuperPlast CoarseAgg FineAgg
## 0 0 0 0 0 0 0
## Age Strength
## 0 0
Sebelum dilakukan analisis multivariat, nama variabel disederhanakan agar lebih mudah dibaca pada output matriks dan visualisasi. Karena seluruh variabel pada dataset bersifat numerik, semua variabel dapat digunakan dalam perhitungan correlation matrix, covariance matrix, dan eigen decomposition.
Hasil pengecekan data menunjukkan bahwa tidak terdapat nilai kosong (missing values) pada seluruh variabel, sehingga seluruh 1030 observasi dapat digunakan tanpa perlu dilakukan penghapusan data.
Correlation matrix digunakan untuk melihat hubungan linear antar variabel. Nilai korelasi mendekati 1 menunjukkan dua variabel meningkat bersama, sedangkan nilai mendekati -1 menunjukkan hubungan berlawanan arah. Nilai mendekati 0 berarti hubungan linear antar variabel relatif lemah.
Pada dataset ini, hubungan antar komponen campuran menunjukkan pola trade-off yang cukup jelas, terutama pada komponen air dan bahan aditif.
cor_mat <- cor(df_num, method = "pearson")
round(cor_mat, 3)
## Cement Slag FlyAsh Water SuperPlast CoarseAgg FineAgg Age
## Cement 1.000 -0.275 -0.397 -0.082 0.093 -0.109 -0.223 0.082
## Slag -0.275 1.000 -0.324 0.107 0.043 -0.284 -0.282 -0.044
## FlyAsh -0.397 -0.324 1.000 -0.257 0.377 -0.010 0.079 -0.154
## Water -0.082 0.107 -0.257 1.000 -0.657 -0.182 -0.451 0.278
## SuperPlast 0.093 0.043 0.377 -0.657 1.000 -0.266 0.223 -0.193
## CoarseAgg -0.109 -0.284 -0.010 -0.182 -0.266 1.000 -0.179 -0.003
## FineAgg -0.223 -0.282 0.079 -0.451 0.223 -0.179 1.000 -0.156
## Age 0.082 -0.044 -0.154 0.278 -0.193 -0.003 -0.156 1.000
## Strength 0.498 0.135 -0.106 -0.290 0.366 -0.165 -0.167 0.329
## Strength
## Cement 0.498
## Slag 0.135
## FlyAsh -0.106
## Water -0.290
## SuperPlast 0.366
## CoarseAgg -0.165
## FineAgg -0.167
## Age 0.329
## Strength 1.000
Visualisasi correlation matrix:
library(corrplot)
## corrplot 0.95 loaded
corrplot(cor_mat, method="color", type="upper", tl.cex=0.8)
Berdasarkan correlation matrix, terdapat beberapa hubungan antar variabel yang cukup menonjol. Korelasi paling kuat secara negatif terjadi antara Water dan SuperPlast sebesar -0.657, yang menunjukkan bahwa campuran dengan jumlah air lebih tinggi cenderung menggunakan superplasticizer lebih rendah, dan sebaliknya.
Selain itu, Water juga memiliki korelasi negatif cukup kuat dengan FineAgg sebesar -0.451, yang mengindikasikan bahwa campuran dengan air lebih tinggi cenderung memiliki fine aggregate yang lebih rendah.
Untuk variabel target Strength, korelasi positif terbesar terjadi dengan Cement sebesar 0.498, yang menunjukkan bahwa semakin tinggi jumlah cement dalam campuran, kuat tekan beton cenderung meningkat.
Variabel SuperPlast juga memiliki korelasi positif dengan Strength sebesar 0.366, sedangkan Age memiliki korelasi positif sebesar 0.329. Hal ini menunjukkan bahwa penggunaan superplasticizer dan peningkatan umur beton (hari) cenderung berhubungan dengan meningkatnya kuat tekan beton.
Sebaliknya, Water memiliki korelasi negatif terhadap Strength sebesar -0.290, yang berarti peningkatan jumlah air dalam campuran cenderung menurunkan kuat tekan beton.
Secara umum, hasil korelasi menunjukkan bahwa variabel komposisi material (terutama cement), jumlah air, penggunaan superplasticizer, dan umur beton adalah faktor yang paling terlihat hubungannya terhadap kuat tekan beton pada dataset ini.
Variance–Covariance matrix digunakan untuk melihat variasi masing-masing variabel serta hubungan antar variabel dalam satuan aslinya.
cov_mat <- cov(df_num)
round(cov_mat, 3)
## Cement Slag FlyAsh Water SuperPlast CoarseAgg
## Cement 10921.743 -2481.359 -2658.351 -181.990 57.915 -888.609
## Slag -2481.359 7444.084 -1786.608 197.679 22.355 -1905.211
## FlyAsh -2658.351 -1786.608 4095.548 -351.297 144.250 -49.644
## Water -181.990 197.679 -351.297 456.060 -83.871 -302.724
## SuperPlast 57.915 22.355 144.250 -83.871 35.683 -123.687
## CoarseAgg -888.609 -1905.211 -49.644 -302.724 -123.687 6045.656
## FineAgg -1866.151 -1947.911 405.736 -771.573 106.562 -1112.795
## Age 540.992 -241.150 -624.065 374.497 -72.721 -14.811
## Strength 869.148 194.329 -113.061 -103.322 36.534 -214.230
## FineAgg Age Strength
## Cement -1866.151 540.992 869.148
## Slag -1947.911 -241.150 194.329
## FlyAsh 405.736 -624.065 -113.061
## Water -771.573 374.497 -103.322
## SuperPlast 106.562 -72.721 36.534
## CoarseAgg -1112.795 -14.811 -214.230
## FineAgg 6428.099 -790.566 -224.011
## Age -790.566 3990.438 347.063
## Strength -224.011 347.063 279.080
Pada covariance matrix, elemen diagonal menunjukkan varians masing-masing variabel. Varians terbesar terdapat pada variabel Cement sebesar 10921.743, yang berarti nilai cement pada dataset memiliki penyebaran paling besar dibanding variabel lainnya.
Variabel lain dengan varians cukup besar adalah FineAgg (6428.099) dan CoarseAgg (6045.656), menunjukkan bahwa jumlah agregat halus dan kasar juga memiliki variasi yang cukup tinggi pada data.
Untuk kovarians (elemen di luar diagonal), terlihat beberapa nilai negatif yang cukup besar, misalnya kovarians antara Cement dan FlyAsh (-2658.351) serta antara Cement dan Slag (-2481.359). Hal ini menunjukkan bahwa dalam campuran beton pada dataset, ketika cement meningkat, komponen substitusi seperti fly ash atau slag cenderung menurun (hubungan berlawanan arah).
Namun perlu dicatat bahwa covariance matrix sangat dipengaruhi oleh skala satuan variabel. Karena itu, untuk membandingkan kekuatan hubungan antar variabel secara lebih adil, correlation matrix biasanya lebih mudah diinterpretasikan.
Pada analisis ini, eigen decomposition dilakukan pada correlation matrix karena setiap variabel memiliki skala dan satuan yang berbeda (misalnya kg/m³, hari, dan MPa). Dengan menggunakan correlation matrix, seluruh variabel distandardisasi sehingga kontribusi setiap variabel lebih seimbang dan tidak didominasi oleh variabel yang memiliki skala angka lebih besar.
eig <- eigen(cor_mat)
eig$values
## [1] 2.28771185 1.93651535 1.40892580 1.04278807 1.01415431 0.84741063 0.28695777
## [8] 0.14678093 0.02875528
eig$vectors
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] -0.04106772 0.5364728 0.359699156 -0.30976550 -0.0546888297 -0.3898607
## [2,] -0.16299258 0.1363006 -0.698988731 0.07626221 -0.3625936171 0.2703252
## [3,] 0.36981124 -0.2684064 0.019777961 0.60066828 0.2275943912 -0.3202302
## [4,] -0.56408457 -0.1181279 -0.120302488 0.04692072 0.2960859177 -0.3061956
## [5,] 0.53605897 0.2482312 -0.187959037 0.16585735 -0.0369894532 -0.0827810
## [6,] -0.06045806 -0.2248310 0.549499919 0.22164550 -0.5454645518 0.3475894
## [7,] 0.38168340 -0.1870620 0.001233946 -0.52781995 0.3844845216 0.4091099
## [8,] -0.26191454 0.2518295 0.169597266 0.35951724 0.5285269011 0.5097793
## [9,] 0.10723462 0.6301150 0.033524610 0.22526326 0.0003062718 0.1539897
## [,7] [,8] [,9]
## [1,] -0.133772604 -0.2983673 -0.47251654
## [2,] 0.004823084 -0.2287723 -0.45115907
## [3,] 0.247179667 -0.2553441 -0.38647003
## [4,] -0.009807539 0.5855720 -0.35604330
## [5,] -0.613878507 0.4475792 -0.05281921
## [6,] -0.059842857 0.2430661 -0.33720421
## [7,] 0.174686900 0.1403404 -0.41871225
## [8,] -0.343644186 -0.2260221 -0.03967220
## [9,] 0.625981489 0.3469226 0.06055837
prop_var <- eig$values / sum(eig$values)
eig_table <- data.frame(
Component = paste0("PC", 1:length(eig$values)),
Eigenvalue = eig$values,
Proportion = prop_var,
Cumulative = cumsum(prop_var)
)
eig_table
## Component Eigenvalue Proportion Cumulative
## 1 PC1 2.28771185 0.254190206 0.2541902
## 2 PC2 1.93651535 0.215168373 0.4693586
## 3 PC3 1.40892580 0.156547311 0.6259059
## 4 PC4 1.04278807 0.115865342 0.7417712
## 5 PC5 1.01415431 0.112683812 0.8544550
## 6 PC6 0.84741063 0.094156736 0.9486118
## 7 PC7 0.28695777 0.031884197 0.9804960
## 8 PC8 0.14678093 0.016308992 0.9968050
## 9 PC9 0.02875528 0.003195031 1.0000000
Berdasarkan tabel proporsi variansi, komponen utama pertama (PC1) memiliki eigenvalue 2.288 dan menjelaskan sekitar 25.42% variasi data. Komponen kedua (PC2) memiliki eigenvalue 1.937 dan menjelaskan sekitar 21.52% variasi data.
Jika digabungkan, PC1 + PC2 menjelaskan sekitar 46.94% variasi total. Sementara itu, PC1 hingga PC5 sudah menjelaskan sekitar 85.45% variasi total, sehingga sebagian besar informasi data dapat direpresentasikan oleh beberapa komponen utama pertama.
Eigenvector menunjukkan bobot kontribusi setiap variabel pada suatu komponen.
Untuk melihat variabel paling dominan pada PC1 dan PC2:
sort(abs(eig$vectors[,1]), decreasing = TRUE)
## [1] 0.56408457 0.53605897 0.38168340 0.36981124 0.26191454 0.16299258 0.10723462
## [8] 0.06045806 0.04106772
sort(abs(eig$vectors[,2]), decreasing = TRUE)
## [1] 0.6301150 0.5364728 0.2684064 0.2518295 0.2482312 0.2248310 0.1870620
## [8] 0.1363006 0.1181279
Eigenvector menunjukkan bobot kontribusi setiap variabel dalam membentuk suatu komponen utama. Pada PC1, bobot terbesar (berdasarkan nilai absolut) terdapat pada variabel:
Water (-0.564)
SuperPlast (0.536)
FineAgg (0.382)
FlyAsh (0.370)
Nilai tersebut menunjukkan bahwa PC1 sangat dipengaruhi oleh kombinasi variabel air, superplasticizer, fine aggregate, dan fly ash. Tanda negatif atau positif hanya menunjukkan arah kontribusi, sehingga yang lebih penting adalah besarnya nilai absolut.
Secara interpretatif, PC1 dapat dipahami sebagai dimensi yang menggambarkan trade-off komposisi campuran, khususnya antara penggunaan air dan penggunaan bahan aditif serta material substitusi.
Pada PC2, bobot terbesar terdapat pada variabel:
Strength (0.630)
Cement (0.536)
Hal ini menunjukkan bahwa PC2 lebih banyak merepresentasikan faktor yang berkaitan dengan kuat tekan beton, terutama dipengaruhi oleh cement dan strength itu sendiri.
Berdasarkan correlation matrix, hubungan paling kuat secara negatif pada dataset adalah antara Water dan SuperPlast (r = -0.657), yang menunjukkan adanya kecenderungan trade-off antara jumlah air dan penggunaan superplasticizer. Selain itu, untuk variabel target Strength, korelasi positif terbesar terjadi dengan Cement (r = 0.498), sedangkan Water memiliki korelasi negatif terhadap Strength (r = -0.290).
Berdasarkan covariance matrix, variabel dengan variasi terbesar adalah Cement (varians = 10921.743), menunjukkan bahwa nilai cement memiliki penyebaran paling besar pada dataset.
Hasil eigen decomposition pada correlation matrix menunjukkan bahwa PC1 menjelaskan sekitar 25.42% variasi data dan PC2 menjelaskan sekitar 21.52%. Secara kumulatif, PC1 hingga PC5 sudah mencakup sekitar 85.45% variasi data, sehingga sebagian besar informasi dataset dapat direpresentasikan oleh beberapa komponen utama pertama.
Dengan demikian, faktor utama yang terlihat berhubungan dengan kuat tekan beton adalah cement, water, superplasticizer, dan age.