Dari dataset Concrete Compressive Strength Dataset yang berasal dari UCI Machine Learning Repository akan dilakukan analisis correlation matrix, variance–covariance matrix, serta perhitungan eigen value dan eigen vector.
https://archive.ics.uci.edu/dataset/165/concrete+compressive+strength
library(readxl)
library(ggplot2)
library(corrplot)
## corrplot 0.95 loaded
library(knitr)
getwd()
## [1] "C:/Users/lenovo loq/OneDrive/Dokumen/Tugas1_Anmul_199"
concrete <- read_excel("Concrete_Data.xls")
concrete <- as.data.frame(concrete)
kable(
head(concrete, 10),
)
| Cement (component 1)(kg in a m^3 mixture) | Blast Furnace Slag (component 2)(kg in a m^3 mixture) | Fly Ash (component 3)(kg in a m^3 mixture) | Water (component 4)(kg in a m^3 mixture) | Superplasticizer (component 5)(kg in a m^3 mixture) | Coarse Aggregate (component 6)(kg in a m^3 mixture) | Fine Aggregate (component 7)(kg in a m^3 mixture) | Age (day) | Concrete compressive strength(MPa, megapascals) |
|---|---|---|---|---|---|---|---|---|
| 540.0 | 0.0 | 0 | 162 | 2.5 | 1040.0 | 676.0 | 28 | 79.98611 |
| 540.0 | 0.0 | 0 | 162 | 2.5 | 1055.0 | 676.0 | 28 | 61.88737 |
| 332.5 | 142.5 | 0 | 228 | 0.0 | 932.0 | 594.0 | 270 | 40.26954 |
| 332.5 | 142.5 | 0 | 228 | 0.0 | 932.0 | 594.0 | 365 | 41.05278 |
| 198.6 | 132.4 | 0 | 192 | 0.0 | 978.4 | 825.5 | 360 | 44.29608 |
| 266.0 | 114.0 | 0 | 228 | 0.0 | 932.0 | 670.0 | 90 | 47.02985 |
| 380.0 | 95.0 | 0 | 228 | 0.0 | 932.0 | 594.0 | 365 | 43.69830 |
| 380.0 | 95.0 | 0 | 228 | 0.0 | 932.0 | 594.0 | 28 | 36.44777 |
| 266.0 | 114.0 | 0 | 228 | 0.0 | 932.0 | 670.0 | 28 | 45.85429 |
| 475.0 | 0.0 | 0 | 228 | 0.0 | 932.0 | 594.0 | 28 | 39.28979 |
Pada tahap Load Dataset memerlukan beberapa library yang digunakan. Pada dataset ini berisi data komposisi bahan penyusun beton, umur beton, dan nilai kuat tekan beton. Setiap baris mewakili satu sampel beton, sedangkan setiap kolom menunjukkan variabel yang berbeda.
struktur_df <- data.frame(
Nama_Variabel = names(concrete),
Tipe_Data = sapply(concrete, class),
row.names = NULL
)
kable(
struktur_df,
caption = "Struktur Dataset Concrete"
)
| Nama_Variabel | Tipe_Data |
|---|---|
| Cement (component 1)(kg in a m^3 mixture) | numeric |
| Blast Furnace Slag (component 2)(kg in a m^3 mixture) | numeric |
| Fly Ash (component 3)(kg in a m^3 mixture) | numeric |
| Water (component 4)(kg in a m^3 mixture) | numeric |
| Superplasticizer (component 5)(kg in a m^3 mixture) | numeric |
| Coarse Aggregate (component 6)(kg in a m^3 mixture) | numeric |
| Fine Aggregate (component 7)(kg in a m^3 mixture) | numeric |
| Age (day) | numeric |
| Concrete compressive strength(MPa, megapascals) | numeric |
Struktur dataset menunjukkan bahwa terdapat sembilan variabel pada dataset ini dan seluruh variabel pada dataset bertipe numerik.
fitur <- concrete[, -9]
kable(
head(fitur, 10),
)
| Cement (component 1)(kg in a m^3 mixture) | Blast Furnace Slag (component 2)(kg in a m^3 mixture) | Fly Ash (component 3)(kg in a m^3 mixture) | Water (component 4)(kg in a m^3 mixture) | Superplasticizer (component 5)(kg in a m^3 mixture) | Coarse Aggregate (component 6)(kg in a m^3 mixture) | Fine Aggregate (component 7)(kg in a m^3 mixture) | Age (day) |
|---|---|---|---|---|---|---|---|
| 540.0 | 0.0 | 0 | 162 | 2.5 | 1040.0 | 676.0 | 28 |
| 540.0 | 0.0 | 0 | 162 | 2.5 | 1055.0 | 676.0 | 28 |
| 332.5 | 142.5 | 0 | 228 | 0.0 | 932.0 | 594.0 | 270 |
| 332.5 | 142.5 | 0 | 228 | 0.0 | 932.0 | 594.0 | 365 |
| 198.6 | 132.4 | 0 | 192 | 0.0 | 978.4 | 825.5 | 360 |
| 266.0 | 114.0 | 0 | 228 | 0.0 | 932.0 | 670.0 | 90 |
| 380.0 | 95.0 | 0 | 228 | 0.0 | 932.0 | 594.0 | 365 |
| 380.0 | 95.0 | 0 | 228 | 0.0 | 932.0 | 594.0 | 28 |
| 266.0 | 114.0 | 0 | 228 | 0.0 | 932.0 | 670.0 | 28 |
| 475.0 | 0.0 | 0 | 228 | 0.0 | 932.0 | 594.0 | 28 |
Pada tahap ini analisis dilakukan hanya menggunakan variabel fitur (prediktor) tanpa menyertakan variabel kuat tekan beton target . Fitur yang digunakan terdiri dari delapan variabel yang merepresentasikan komposisi bahan penyusun beton serta umur beton. Pemisahan ini dilakukan agar analisis hubungan antar variabel tidak dipengaruhi oleh variabel sasaran.
missing_df <- data.frame(
Variabel = colnames(fitur),
Jumlah_Missing = colSums(is.na(fitur))
)
kable(
missing_df,
caption = "Jumlah Missing Value pada Setiap Variabel"
)
| Variabel | Jumlah_Missing | |
|---|---|---|
| Cement (component 1)(kg in a m^3 mixture) | Cement (component 1)(kg in a m^3 mixture) | 0 |
| Blast Furnace Slag (component 2)(kg in a m^3 mixture) | Blast Furnace Slag (component 2)(kg in a m^3 mixture) | 0 |
| Fly Ash (component 3)(kg in a m^3 mixture) | Fly Ash (component 3)(kg in a m^3 mixture) | 0 |
| Water (component 4)(kg in a m^3 mixture) | Water (component 4)(kg in a m^3 mixture) | 0 |
| Superplasticizer (component 5)(kg in a m^3 mixture) | Superplasticizer (component 5)(kg in a m^3 mixture) | 0 |
| Coarse Aggregate (component 6)(kg in a m^3 mixture) | Coarse Aggregate (component 6)(kg in a m^3 mixture) | 0 |
| Fine Aggregate (component 7)(kg in a m^3 mixture) | Fine Aggregate (component 7)(kg in a m^3 mixture) | 0 |
| Age (day) | Age (day) | 0 |
Seluruh variabel fitur tidak memiliki nilai yang hilang.
cor_matrix <- cor(fitur)
kable(
round(cor_matrix, 2),
caption = "Correlation Matrix"
)
| Cement (component 1)(kg in a m^3 mixture) | Blast Furnace Slag (component 2)(kg in a m^3 mixture) | Fly Ash (component 3)(kg in a m^3 mixture) | Water (component 4)(kg in a m^3 mixture) | Superplasticizer (component 5)(kg in a m^3 mixture) | Coarse Aggregate (component 6)(kg in a m^3 mixture) | Fine Aggregate (component 7)(kg in a m^3 mixture) | Age (day) | |
|---|---|---|---|---|---|---|---|---|
| Cement (component 1)(kg in a m^3 mixture) | 1.00 | -0.28 | -0.40 | -0.08 | 0.09 | -0.11 | -0.22 | 0.08 |
| Blast Furnace Slag (component 2)(kg in a m^3 mixture) | -0.28 | 1.00 | -0.32 | 0.11 | 0.04 | -0.28 | -0.28 | -0.04 |
| Fly Ash (component 3)(kg in a m^3 mixture) | -0.40 | -0.32 | 1.00 | -0.26 | 0.38 | -0.01 | 0.08 | -0.15 |
| Water (component 4)(kg in a m^3 mixture) | -0.08 | 0.11 | -0.26 | 1.00 | -0.66 | -0.18 | -0.45 | 0.28 |
| Superplasticizer (component 5)(kg in a m^3 mixture) | 0.09 | 0.04 | 0.38 | -0.66 | 1.00 | -0.27 | 0.22 | -0.19 |
| Coarse Aggregate (component 6)(kg in a m^3 mixture) | -0.11 | -0.28 | -0.01 | -0.18 | -0.27 | 1.00 | -0.18 | 0.00 |
| Fine Aggregate (component 7)(kg in a m^3 mixture) | -0.22 | -0.28 | 0.08 | -0.45 | 0.22 | -0.18 | 1.00 | -0.16 |
| Age (day) | 0.08 | -0.04 | -0.15 | 0.28 | -0.19 | 0.00 | -0.16 | 1.00 |
Sebagian besar fitur variabel memiliki nilai korelasi yang rendah hingga sedang, baik positif maupun negatif. Korelasi negatif yang cukup kuat terlihat antara Water dan Superplasticizer , yang menunjukkan bahwa peningkatan penggunaan superplasticizer cenderung diikuti oleh penurunan jumlah udara dalam campuran beton. Selain itu, Semen memiliki korelasi negatif dengan Fly Ash , yang mengindikasikan adanya kecenderungan penggunaan bahan pengganti semen. Secara umum, tidak ditemukan korelasi yang sangat tinggi antar variabel, sehingga tidak terdapat indikasi multikolinearitas yang kuat pada fitur data.
corrplot(
cor_matrix,
method = "color",
type = "full",
addCoef.col = "black",
number.cex = 0.7,
tl.cex = 0.8,
tl.pos = "l",
tl.srt = 45,
mar = c(0,0,1,0)
)
Warna biru menandakan korelasi positif, sedangkan warna merah menunjukkan korelasi negatif, dengan intensitas warna yang semakin kuat menandakan hubungan yang semakin tinggi. Terlihat bahwa hubungan paling kuat negatif terjadi antara Water dan Superplasticizer , sedangkan sebagian besar pasangan variabel lainnya memiliki korelasi yang lemah hingga sedang. Secara keseluruhan, tidak terdapat korelasi yang sangat tinggi antar variabel fitur.
cov_matrix <- cov(fitur)
kable(
round(cov_matrix, 2),
caption = "Variance–Covariance Matrixr"
)
| Cement (component 1)(kg in a m^3 mixture) | Blast Furnace Slag (component 2)(kg in a m^3 mixture) | Fly Ash (component 3)(kg in a m^3 mixture) | Water (component 4)(kg in a m^3 mixture) | Superplasticizer (component 5)(kg in a m^3 mixture) | Coarse Aggregate (component 6)(kg in a m^3 mixture) | Fine Aggregate (component 7)(kg in a m^3 mixture) | Age (day) | |
|---|---|---|---|---|---|---|---|---|
| Cement (component 1)(kg in a m^3 mixture) | 10921.74 | -2481.36 | -2658.35 | -181.99 | 57.91 | -888.61 | -1866.15 | 540.99 |
| Blast Furnace Slag (component 2)(kg in a m^3 mixture) | -2481.36 | 7444.08 | -1786.61 | 197.68 | 22.36 | -1905.21 | -1947.91 | -241.15 |
| Fly Ash (component 3)(kg in a m^3 mixture) | -2658.35 | -1786.61 | 4095.55 | -351.30 | 144.25 | -49.64 | 405.74 | -624.06 |
| Water (component 4)(kg in a m^3 mixture) | -181.99 | 197.68 | -351.30 | 456.06 | -83.87 | -302.72 | -771.57 | 374.50 |
| Superplasticizer (component 5)(kg in a m^3 mixture) | 57.91 | 22.36 | 144.25 | -83.87 | 35.68 | -123.69 | 106.56 | -72.72 |
| Coarse Aggregate (component 6)(kg in a m^3 mixture) | -888.61 | -1905.21 | -49.64 | -302.72 | -123.69 | 6045.66 | -1112.80 | -14.81 |
| Fine Aggregate (component 7)(kg in a m^3 mixture) | -1866.15 | -1947.91 | 405.74 | -771.57 | 106.56 | -1112.80 | 6428.10 | -790.57 |
| Age (day) | 540.99 | -241.15 | -624.06 | 374.50 | -72.72 | -14.81 | -790.57 | 3990.44 |
Setiap fitur memiliki tingkat keragaman yang berbeda dan hubungan yang bervariasi antarfitur, nilai varians terbesar terdapat pada Cement, Coarse Aggregate, dan Fine Aggregate , menandakan fitur ketiga ini memiliki penyebaran data yang paling besar. Nilai kovarian negatif yang cukup besar antara Cement dengan Fly Ash, Blast Furnace Slag, dan Fine Aggregate menunjukkan hubungan yang berlawanan arah, artinya peningkatan salah satu variabel cenderung diikuti penurunan variabel lainnya. Sementara itu, kovarians positif seperti antara Fly Ash dengan Fine Aggregate dan Water dengan Age menunjukkan kecenderungan perubahan searah. Secara keseluruhan, hasil ini menunjukkan adanya keterkaitan antarfitur yang cukup kuat, sehingga penggunaan metode lanjutan seperti PCA relevan untuk mereduksi dimensi dan mengatasi potensi multikolinearitas.
pca_result <- prcomp(fitur, scale. = TRUE)
eigenvalue_df <- data.frame(
PC = paste0("PC", 1:length(pca_result$sdev)),
Eigenvalue = pca_result$sdev^2,
Proportion = (pca_result$sdev^2) / sum(pca_result$sdev^2) * 100,
Cumulative = cumsum((pca_result$sdev^2) / sum(pca_result$sdev^2)) * 100
)
kable(
eigenvalue_df,
digits = 3,
)
| PC | Eigenvalue | Proportion | Cumulative |
|---|---|---|---|
| PC1 | 2.280 | 28.499 | 28.499 |
| PC2 | 1.416 | 17.703 | 46.201 |
| PC3 | 1.340 | 16.753 | 62.954 |
| PC4 | 1.014 | 12.677 | 75.631 |
| PC5 | 0.952 | 11.895 | 87.526 |
| PC6 | 0.790 | 9.877 | 97.403 |
| PC7 | 0.178 | 2.222 | 99.624 |
| PC8 | 0.030 | 0.376 | 100.000 |
Komponen utama pertama (PC1) memiliki kontribusi variasi terbesar yaitu sebesar 28,50%, sehingga PC1 paling dominan dalam menjelaskan keragaman data. Jika digabungkan hingga PC3, total variasi yang dapat dijelaskan mencapai sekitar 62,95%, yang menunjukkan bahwa tiga komponen informasi utama sudah mampu merepresentasikan sebagian besar dari fitur awal. Hingga PC4, proporsi kumulatif meningkat menjadi 75,63%, sehingga secara umum empat komponen utama sudah cukup baik untuk analisis lanjutan. Sementara itu, komponen dengan eigenvalue kecil seperti PC7 dan PC8 hanya menampung variasi yang sangat kecil, sehingga kurang signifikan dan dapat diabaikan dalam reduksi dimensi.
pca_result <- prcomp(fitur, scale. = TRUE)
eigenvalues <- pca_result$sdev^2
plot(
eigenvalues,
type = "b",
pch = 19,
xlab = "Principal Component",
ylab = "Eigenvalue",
main = "Scree Plot"
)
Nilai eigen menurun secara tajam dari komponen utama pertama (PC1) hingga PC3, kemudian penurunannya menjadi lebih landai pada komponen berikutnya. Hal ini menunjukkan bahwa sebagian besar variasi data dijelaskan oleh beberapa komponen utama pertama. Titik tekuk ( siku ) terlihat sekitar PC3–PC4, sehingga komponen setelahnya memberikan informasi tambahan yang relatif kecil. Oleh karena itu, beberapa komponen utama awal sudah cukup untuk merepresentasikan data secara keseluruhan.
pca_result <- prcomp(fitur, scale. = TRUE)
eigenvector_df <- as.data.frame(pca_result$rotation)
eigenvector_df$Variabel <- rownames(eigenvector_df)
rownames(eigenvector_df) <- NULL
eigenvector_df <- eigenvector_df[, c("Variabel", setdiff(names(eigenvector_df), "Variabel"))]
eigenvector_df[, -1] <- round(eigenvector_df[, -1], 3)
kable(
eigenvector_df,
digits = 3
)
| Variabel | PC1 | PC2 | PC3 | PC4 | PC5 | PC6 | PC7 | PC8 |
|---|---|---|---|---|---|---|---|---|
| Cement (component 1)(kg in a m^3 mixture) | 0.098 | 0.112 | -0.814 | -0.054 | -0.148 | 0.203 | -0.222 | -0.446 |
| Blast Furnace Slag (component 2)(kg in a m^3 mixture) | 0.177 | -0.686 | 0.173 | -0.363 | 0.021 | -0.305 | -0.228 | -0.437 |
| Fly Ash (component 3)(kg in a m^3 mixture) | -0.395 | 0.144 | 0.408 | 0.227 | -0.550 | 0.183 | -0.352 | -0.382 |
| Water (component 4)(kg in a m^3 mixture) | 0.547 | -0.053 | 0.213 | 0.296 | -0.070 | 0.366 | 0.524 | -0.389 |
| Superplasticizer (component 5)(kg in a m^3 mixture) | -0.506 | -0.284 | -0.234 | -0.037 | -0.354 | -0.193 | 0.665 | -0.052 |
| Coarse Aggregate (component 6)(kg in a m^3 mixture) | 0.038 | 0.630 | 0.173 | -0.546 | 0.033 | -0.315 | 0.227 | -0.349 |
| Fine Aggregate (component 7)(kg in a m^3 mixture) | -0.402 | 0.020 | 0.005 | 0.386 | 0.701 | -0.092 | 0.039 | -0.433 |
| Age (day) | 0.292 | 0.126 | -0.101 | 0.528 | -0.228 | -0.744 | -0.069 | -0.013 |
Kontribusi masing-masing variabel fitur dalam membentuk setiap komponen utama pada PCA. Pada PC1, variabel Water memiliki kontribusi positif terbesar, sedangkan Superplasticizer dan Fly Ash memiliki kontribusi negatif yang cukup kuat, sehingga komponen ini menggambarkan perbedaan penggunaan air dan bahan tambahan dalam campuran beton. PC2 didominasi oleh Blast Furnace Slag dan Coarse Aggregate, yang menunjukkan variasi komposisi material pengganti semen dan agregat kasar. Secara umum, variabel dengan nilai loading yang besar pada suatu komponen memiliki pengaruh yang lebih dominan, sehingga eigenvector membantu dalam memahami karakteristik utama dari setiap komponen yang terbentuk.