Import Data

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

Analisis Matriks

Matriks Korelasi (Correlation Matrix)

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(Variance-Covariance Matrix)

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.

Analisis Eigen

Analisis Nilai Eigen

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(Eigenvectors)

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.

Kesimpulan

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.