Saya melakukan import data dari local file komputer milik saya dan saya tampilkan 5 baris data awal.
data <- read.csv("C:/Users/KEVIN FEBRIAN/Downloads/concrete+compressive+strength/Concrete_Data.csv")
colnames(data) <- c("Cement", "Slag", "FlyAsh", "Water", "SP", "CoarseAgg", "FineAgg", "Age", "Strength")
data_features <- data[, -which(names(data) == "Strength")]
head(data_features)
## Cement Slag FlyAsh Water SP CoarseAgg FineAgg Age
## 1 540.0 0.0 0 162 2.5 1040.0 676.0 28
## 2 540.0 0.0 0 162 2.5 1055.0 676.0 28
## 3 332.5 142.5 0 228 0.0 932.0 594.0 270
## 4 332.5 142.5 0 228 0.0 932.0 594.0 365
## 5 198.6 132.4 0 192 0.0 978.4 825.5 360
## 6 266.0 114.0 0 228 0.0 932.0 670.0 90
Matriks korelasi memiliki tujuan untuk melihat bagaimana bahan baku saling mempengaruhi satu sama lain. Matriks ini menunjukkan kekuatan hubungan linear antar variabel (skala -1 hingga 1).
cor_mat <- cor(data_features)
kable(round(cor_mat, 3)) %>%
kable_styling(full_width = F, position = "center")
| Cement | Slag | FlyAsh | Water | SP | CoarseAgg | FineAgg | Age | |
|---|---|---|---|---|---|---|---|---|
| Cement | 1.000 | -0.275 | -0.397 | -0.082 | 0.092 | -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.378 | -0.010 | 0.079 | -0.154 |
| Water | -0.082 | 0.107 | -0.257 | 1.000 | -0.658 | -0.182 | -0.451 | 0.278 |
| SP | 0.092 | 0.043 | 0.378 | -0.658 | 1.000 | -0.266 | 0.223 | -0.193 |
| CoarseAgg | -0.109 | -0.284 | -0.010 | -0.182 | -0.266 | 1.000 | -0.178 | -0.003 |
| FineAgg | -0.223 | -0.282 | 0.079 | -0.451 | 0.223 | -0.178 | 1.000 | -0.156 |
| Age | 0.082 | -0.044 | -0.154 | 0.278 | -0.193 | -0.003 | -0.156 | 1.000 |
corrplot(cor_mat, method = "ellipse", type = "upper",
tl.col = "black", tl.srt = 45,
title = "\nVisualisasi Hubungan Antar Material", mar=c(0,0,1,0))
Jika satu bahan ditambah bahan lainnya juga cenderung meningkat dalam dataset ini(penggunaan Superplasticizer sejalan dengan Fly Ash).
Jika satu variabel meningkat, variabel lainnya cenderung menurun (korelasi negatif antara Water dan Superplasticizer) menunjukkan bahwa semakin banyak bahan aditif pengencer, maka kebutuhan air dapat dikurangi).
Dalam visualisasinya elips memudahkan kita melihat hubungan. Apabila semakin pipih bentuk elipsnya, maka semakin kuat hubungan antar fitur.
Matriks Kovarian menunjukkan sebaran data dan hubungan variabel dalam unit asli (\(kg/m^3\)).
cov_mat <- cov(data_features)
kable(round(cov_mat, 2)) %>%
kable_styling(latex_options = "scale_down", position = "center")
| Cement | Slag | FlyAsh | Water | SP | CoarseAgg | FineAgg | Age | |
|---|---|---|---|---|---|---|---|---|
| Cement | 10921.58 | -2481.55 | -2658.30 | -182.07 | 57.68 | -888.55 | -1866.13 | 540.98 |
| Slag | -2481.55 | 7444.12 | -1786.69 | 197.60 | 22.30 | -1905.22 | -1948.00 | -241.15 |
| FlyAsh | -2658.30 | -1786.69 | 4095.62 | -351.20 | 144.32 | -49.57 | 405.91 | -624.07 |
| Water | -182.07 | 197.60 | -351.20 | 456.00 | -83.88 | -302.68 | -771.57 | 374.49 |
| SP | 57.68 | 22.30 | 144.32 | -83.88 | 35.69 | -123.55 | 106.66 | -72.72 |
| CoarseAgg | -888.55 | -1905.22 | -49.57 | -302.68 | -123.55 | 6045.68 | -1112.65 | -14.81 |
| FineAgg | -1866.13 | -1948.00 | 405.91 | -771.57 | 106.66 | -1112.65 | 6428.19 | -790.57 |
| Age | 540.98 | -241.15 | -624.07 | 374.49 | -72.72 | -14.81 | -790.57 | 3990.44 |
Diagonal utama menunjukkan variasi setiap bahan pada sampel. Nilai yang besar pada variabel tertentu (seperti Coarse Aggregate) menunjukkan rentang variasi massa yang luas.
Diagonal Luar menunjukkan arah pergerakan bahan. Jika positif, maka kedua bahan cenderung ditambahkan secara bersamaan dalam campuran.
Nilai eigen berperan dalam meringkas informasi. Dalam dataset ini Eigen memberi informasi yang ditangkap oleh masing masing komponen.
eigen_res <- eigen(cor_mat)
ev_table <- data.frame(
Komponen = paste0("PC", 1:ncol(data_features)),
EigenValue = eigen_res$values,
Persentase_Varians = (eigen_res$values / sum(eigen_res$values)) * 100
)
kable(ev_table, digits = 3) %>%
kable_styling(full_width = F)
| Komponen | EigenValue | Persentase_Varians |
|---|---|---|
| PC1 | 2.280 | 28.501 |
| PC2 | 1.416 | 17.701 |
| PC3 | 1.340 | 16.751 |
| PC4 | 1.014 | 12.677 |
| PC5 | 0.952 | 11.894 |
| PC6 | 0.790 | 9.877 |
| PC7 | 0.178 | 2.223 |
| PC8 | 0.030 | 0.376 |
Dari nilai eigen yang dihasilkan bisa dilihat bahwa PC1 dan PC2 memiliki nilai Eigen tertinggi. PC1 memiliki nilai yang jauh lebih besar dari 1, artinya sebagian besar perbedaan karakteristik beton sebenarnya hanya ditentukan oleh kombinasi beberapa bahan.
Vektor eigen memperlihatkan bobot untuk setiap bahan terhadap komponen yang terbentuk yaitu beton.
e_vectors <- eigen_res$vectors
rownames(e_vectors) <- colnames(data_features)
colnames(e_vectors) <- paste0("PC", 1:ncol(data_features))
kable(round(e_vectors, 3)) %>%
kable_styling(bootstrap_options = "bordered", position = "center")
| PC1 | PC2 | PC3 | PC4 | PC5 | PC6 | PC7 | PC8 | |
|---|---|---|---|---|---|---|---|---|
| Cement | 0.098 | 0.114 | 0.814 | -0.054 | -0.148 | -0.203 | 0.222 | -0.446 |
| Slag | 0.177 | -0.686 | -0.172 | -0.363 | 0.021 | 0.305 | 0.228 | -0.437 |
| FlyAsh | -0.395 | 0.143 | -0.408 | 0.227 | -0.550 | -0.183 | 0.352 | -0.382 |
| Water | 0.547 | -0.053 | -0.213 | 0.296 | -0.070 | -0.366 | -0.524 | -0.389 |
| SP | -0.506 | -0.283 | 0.235 | -0.037 | -0.355 | 0.193 | -0.665 | -0.052 |
| CoarseAgg | 0.038 | 0.630 | -0.174 | -0.546 | 0.033 | 0.315 | -0.227 | -0.349 |
| FineAgg | -0.402 | 0.019 | -0.005 | 0.385 | 0.701 | 0.092 | -0.039 | -0.433 |
| Age | 0.291 | 0.126 | 0.101 | 0.528 | -0.228 | 0.744 | 0.069 | -0.013 |
Pada PC1 dapat dilihat kombinasi bobot bahan mana yang paling banyak menjelaskan keragaman data beton. Jika Cement dan Age memiliki koefisien besar pada PC yang sama, ini menunjukkan variasi dalam dataset ini sangat dipengaruhi interaksi antara jumlah semen dan lamanya waktu pengerasan.
Analisis multivariat ini memberikan gambaran matematis tentang bagaimana komposisi saling berinteraksi untuk membangun beton yang kuat. Terdapat keterikatan kuat antar material (seperti semen, air, dan zat aditif). Dengan memahami Nilai dan Vektor Eigen, kita dapat menentukan fitur mana yang paling penting untuk pemodelan prediksi kekuatan beton.