res <-(chemicaldata)
summary(res)
## y1 y2 y3 x1
## Min. : 4.30 Min. :45.90 Min. :11.20 Min. :157.0
## 1st Qu.:14.55 1st Qu.:54.15 1st Qu.:16.10 1st Qu.:162.0
## Median :19.30 Median :57.50 Median :21.30 Median :167.0
## Mean :20.18 Mean :56.34 Mean :20.78 Mean :167.3
## 3rd Qu.:25.65 3rd Qu.:59.45 3rd Qu.:22.80 3rd Qu.:172.0
## Max. :41.50 Max. :62.90 Max. :38.00 Max. :177.0
## x2 x3
## Min. :20.00 Min. :3.00
## 1st Qu.:24.00 1st Qu.:5.75
## Median :27.50 Median :6.50
## Mean :27.18 Mean :6.50
## 3rd Qu.:30.00 3rd Qu.:7.75
## Max. :34.00 Max. :9.50
X <- chemicaldata[, c("x1", "x2", "x3")]
Y <- chemicaldata[, c("y1", "y2", "y3")]
Dataset chemicaldata merupakan data eksperimen kimia yang terdiri dari dua kelompok variabel numerik, yaitu variabel kondisi proses kimia (misalnya suhu, waktu reaksi, dan konsentrasi bahan) sebagai satu set variabel independen, serta variabel hasil reaksi kimia (seperti persentase hasil, kemurnian, dan efisiensi reaksi) sebagai satu set variabel dependen. Dataset ini dirancang untuk mengkaji hubungan multivariat antara kondisi proses dan performa hasil reaksi secara simultan. Analisis Korelasi Kanonik digunakan pada dataset chemicaldata dengan tujuan untuk mengidentifikasi kombinasi linier dari variabel kondisi proses yang memiliki hubungan paling kuat dengan kombinasi linier dari variabel hasil reaksi. Melalui analisis ini, dapat diketahui pola hubungan menyeluruh antara kedua kelompok variabel serta variabel-variabel mana yang paling berkontribusi dalam membentuk hubungan tersebut, sehingga memberikan pemahaman yang lebih komprehensif dibandingkan analisis korelasi atau regresi univariat.
# Menggabungkan X dan Y
chem_all <- cbind(X, Y)
kable(chem_all,
caption = "Tabel Data chem_all (Gabungan Variabel X dan Y)")
| x1 | x2 | x3 | y1 | y2 | y3 |
|---|---|---|---|---|---|
| 162 | 23.0 | 3.0 | 41.5 | 45.9 | 11.2 |
| 162 | 23.0 | 8.0 | 33.8 | 53.3 | 11.2 |
| 162 | 30.0 | 5.0 | 27.7 | 57.5 | 12.7 |
| 162 | 30.0 | 8.0 | 21.7 | 58.8 | 16.0 |
| 172 | 25.0 | 5.0 | 19.9 | 60.6 | 16.2 |
| 172 | 25.0 | 8.0 | 15.0 | 58.0 | 22.6 |
| 172 | 30.0 | 5.0 | 12.2 | 58.6 | 24.5 |
| 172 | 30.0 | 8.0 | 4.3 | 52.4 | 38.0 |
| 167 | 27.5 | 6.5 | 19.3 | 56.9 | 21.3 |
| 177 | 27.5 | 6.5 | 6.4 | 55.4 | 30.8 |
| 157 | 27.5 | 6.5 | 37.6 | 46.9 | 14.7 |
| 167 | 32.5 | 6.5 | 18.0 | 57.3 | 22.2 |
| 167 | 22.5 | 6.5 | 26.3 | 55.0 | 18.3 |
| 167 | 27.5 | 9.5 | 9.9 | 58.9 | 28.0 |
| 167 | 27.5 | 3.5 | 25.0 | 50.3 | 22.1 |
| 177 | 20.0 | 6.5 | 14.1 | 61.1 | 23.0 |
| 177 | 20.0 | 6.5 | 15.2 | 62.9 | 20.7 |
| 160 | 34.0 | 7.5 | 15.9 | 60.0 | 22.1 |
| 160 | 34.0 | 7.5 | 19.6 | 60.6 | 19.3 |
# Cek missing values
colSums(is.na(chem_all))
## x1 x2 x3 y1 y2 y3
## 0 0 0 0 0 0
# Menghapus observasi dengan NA
chem_clean <- na.omit(chem_all)
# Pisahkan kembali
X_clean <- chem_clean[, 1:3]
Y_clean <- chem_clean[, 4:6]
ggpairs(X_clean)
ggpairs(Y_clean)
mqqnorm(X_clean, main = "Multi-normal Q-Q Plot X")
## [1] 1 9
Titik-titik data terlihat berada dan mengikuti garis diagonal, dapat disimpulkan peubah X menyebar secara normal.
mqqnorm(Y_clean, main = "Multi-normal Q-Q Plot Y")
## [1] 8 10
Titik-titik data terlihat berada dan mengikuti garis diagonal, dapat disimpulkan peubah Y menyebar secara normal walaupun masih ada titik yang jauh dari garis.
mqqnorm(cbind(X_clean, Y_clean),
main = "Multi-normal Q-Q Plot X dan Y")
## [1] 9 12
Titik-titik data terlihat berada dan mengikuti garis diagonal, dapat disimpulkan peubah X dan Y secara bersama menyebar secara normal.
# Hitung jarak Mahalanobis
md <- mahalanobis(chem_clean,
colMeans(chem_clean),
cov(chem_clean))
# Nilai cut-off chi-square
cutoff <- qchisq(0.975, df = ncol(chem_clean))
# Identifikasi outlier
which(md > cutoff)
## named integer(0)
ggpairs(chem_clean,
title = "Scatterplot Matrix untuk Uji Linearitas")
correls_XY <- matcor(X_clean, Y_clean)
kable(correls_XY$Xcor, digits = 3,
caption = "Matriks Korelasi Antar Variabel X")
| x1 | x2 | x3 | |
|---|---|---|---|
| x1 | 1.000 | -0.462 | -0.022 |
| x2 | -0.462 | 1.000 | 0.177 |
| x3 | -0.022 | 0.177 | 1.000 |
kable(correls_XY$Ycor, digits = 3,
caption = "Matriks Korelasi Antar Variabel Y")
| y1 | y2 | y3 | |
|---|---|---|---|
| y1 | 1.000 | -0.608 | -0.880 |
| y2 | -0.608 | 1.000 | 0.182 |
| y3 | -0.880 | 0.182 | 1.000 |
kable(correls_XY$XYcor)
| x1 | x2 | x3 | y1 | y2 | y3 | |
|---|---|---|---|---|---|---|
| x1 | 1.0000000 | -0.4620014 | -0.0218828 | -0.6769387 | 0.4039510 | 0.5768977 |
| x2 | -0.4620014 | 1.0000000 | 0.1766567 | -0.2247259 | 0.0799838 | 0.2255903 |
| x3 | -0.0218828 | 0.1766567 | 1.0000000 | -0.4525396 | 0.3927312 | 0.3615240 |
| y1 | -0.6769387 | -0.2247259 | -0.4525396 | 1.0000000 | -0.6078234 | -0.8804014 |
| y2 | 0.4039510 | 0.0799838 | 0.3927312 | -0.6078234 | 1.0000000 | 0.1822497 |
| y3 | 0.5768977 | 0.2255903 | 0.3615240 | -0.8804014 | 0.1822497 | 1.0000000 |
library(corrplot)
## corrplot 0.95 loaded
corrplot(correls_XY$Xcor, method = "color", addCoef.col ='white', is.cor = T, type = "lower", diag = F)
Hubungan antara X1 dan X2 berkorelasi dengan nilai sekitar −0,46. Ini
menunjukkan adanya korelasi negatif sedang, artinya ketika nilai X1
meningkat, nilai X2 cenderung menurun, dan sebaliknya. Hubungan ini
cukup berarti secara statistik deskriptif, namun belum tergolong sangat
kuat.
Kedua, hubungan antara X2 dan X3 ditunjukkan oleh warna putih dengan nilai korelasi sekitar −0,02 (atau sangat mendekati nol). Hal ini menandakan bahwa hampir tidak terdapat hubungan linear antara X2 dan X3. Perubahan pada X2 tidak diikuti oleh pola perubahan yang konsisten pada X3, sehingga keduanya dapat dianggap hampir independen secara linear.
Ketiga, hubungan antara X1 dan X3 ditunjukkan oleh warna biru muda dengan nilai korelasi sekitar 0,18, yang menunjukkan korelasi positif lemah. Artinya, peningkatan X1 cenderung diikuti peningkatan X3, namun hubungan ini sangat lemah dan kontribusinya kecil.
Secara keseluruhan, plot ini menunjukkan bahwa tidak terdapat multikolinearitas kuat antar peubah X, karena tidak ada korelasi yang mendekati ±1. Dengan demikian, dari sisi asumsi analisis korelasi kanonik, struktur korelasi antar variabel X masih tergolong aman, dan masing-masing variabel X masih memberikan informasi yang relatif berbeda.
corrplot(correls_XY$Ycor, method = "color", addCoef.col ='black', is.cor = T, type = "lower", diag = F)
Hubungan antara Y1 dan Y2 ditunjukkan dengan nilai korelasi sekitar
−0,61. Nilai ini menunjukkan korelasi negatif cukup kuat, yang berarti
peningkatan pada Y1 cenderung diikuti oleh penurunan pada Y2. Hubungan
ini relatif kuat dan menunjukkan bahwa kedua variabel memiliki
keterkaitan linear yang cukup besar.
Kedua, hubungan antara Y1 dan Y3 ditunjukkan dengan nilai korelasi sekitar −0,88. Ini merupakan korelasi negatif sangat kuat, mendekati −1, yang mengindikasikan bahwa Y1 dan Y3 memiliki hubungan linear yang sangat erat tetapi berlawanan arah. Kondisi ini perlu diperhatikan karena dapat mengarah pada indikasi multikolinearitas yang tinggi di dalam set variabel Y.
Ketiga, hubungan antara Y2 dan Y3 ditunjukkan dengan nilai korelasi sekitar 0,18, yang berarti terdapat korelasi positif lemah. Hubungan ini sangat kecil sehingga Y2 dan Y3 relatif tidak saling mempengaruhi secara linear.
Secara keseluruhan, struktur korelasi pada variabel Y menunjukkan bahwa Y1 memiliki hubungan linear yang kuat dengan Y2 dan terutama dengan Y3, sedangkan Y2 dan Y3 hampir tidak berkorelasi. Dalam konteks analisis korelasi kanonik, hal ini mengindikasikan adanya ketergantungan internal yang cukup tinggi dalam set Y, khususnya antara Y1 dan Y3, sehingga perlu kehati-hatian dalam interpretasi kontribusi masing-masing variabel Y pada fungsi kanonik.
corrplot(correls_XY$XYcor, method = "color", addCoef.col ='white', is.cor = T, type = "lower", diag = F)
Secara keseluruhan, plot ini menunjukkan adanya hubungan linear yang
cukup bermakna antara kelompok variabel X dan Y, khususnya keterkaitan
X1 dan X3 dengan variabel-variabel Y. Pola korelasi yang beragam ini
memperkuat alasan penggunaan Analisis Korelasi Kanonik, karena hubungan
yang ingin dianalisis tidak bersifat satu-ke-satu, melainkan melibatkan
kombinasi multivariat antara dua kelompok variabel.
img.matcor(correls_XY, type = 2)
det(cov(X_clean))
## [1] 1403.99
det(cov(Y_clean))
## [1] 1728.504
library(candisc)
## Warning: package 'candisc' was built under R version 4.4.3
## Loading required package: heplots
## Warning: package 'heplots' was built under R version 4.4.3
## Loading required package: broom
##
## Attaching package: 'broom'
## The following object is masked from 'package:RVAideMemoire':
##
## bootstrap
##
## Attaching package: 'candisc'
## The following object is masked from 'package:stats':
##
## cancor
cca1 <- cancor(X_clean, Y_clean)
summary(cca1)
##
## Canonical correlation analysis of:
## 3 X variables: x1, x2, x3
## with 3 Y variables: y1, y2, y3
##
## CanR CanRSQ Eigen percent cum scree
## 1 0.98153 0.963395 26.318349 99.60771 99.61 ******************************
## 2 0.30199 0.091200 0.100353 0.37981 99.99
## 3 0.05733 0.003287 0.003298 0.01248 100.00
##
## Test of H0: The canonical correlations in the
## current row and all that follow are zero
##
## CanR LR test stat approx F numDF denDF Pr(> F)
## 1 0.98153 0.03316 10.7870 9 31.789 1.884e-07 ***
## 2 0.30199 0.90581 0.3549 4 28.000 0.8384
## 3 0.05733 0.99671 0.0495 1 15.000 0.8270
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Raw canonical coefficients
##
## X variables:
## Xcan1 Xcan2 Xcan3
## x1 -0.16062 -0.06944 -0.049094
## x2 -0.14861 -0.12159 0.191179
## x3 -0.21568 0.58392 0.037688
##
## Y variables:
## Ycan1 Ycan2 Ycan3
## y1 0.170794 0.62594 0.37732
## y2 0.069097 0.72999 0.21730
## y3 0.085825 0.71274 0.53900
cc1 <- cc(X_clean, Y_clean)
cc1$cor
## [1] 0.98152665 0.30199414 0.05733448
Berdasarkan hasil analisis korelasi kanonik pada dataset chemical, di mana peubah X merepresentasikan kondisi proses kimia (misalnya suhu, waktu reaksi, dan konsentrasi) dan peubah Y merepresentasikan hasil reaksi kimia (misalnya persentase hasil, kemurnian, dan efisiensi), diperoleh tiga nilai korelasi kanonik, yaitu 0,9815, 0,3020, dan 0,0573. Korelasi kanonik pertama yang sangat tinggi (0,9815) menunjukkan adanya hubungan yang sangat kuat antara suatu kombinasi linear dari kondisi proses kimia dengan kombinasi linear dari hasil reaksi. Artinya, terdapat satu pola utama di mana pengaturan suhu, waktu, dan konsentrasi secara bersama-sama sangat menentukan variasi pada kualitas dan performa hasil reaksi kimia. Korelasi kanonik kedua yang bernilai 0,3020 menunjukkan hubungan yang relatif lemah hingga sedang, sehingga hanya memberikan informasi tambahan yang terbatas mengenai keterkaitan antara proses dan hasil reaksi. Sementara itu, korelasi kanonik ketiga yang mendekati nol (0,0573) mengindikasikan bahwa tidak terdapat hubungan linear yang berarti antara kombinasi proses dan hasil pada dimensi tersebut. Dengan demikian, dalam konteks dataset chemical, dapat disimpulkan bahwa hubungan antara peubah X dan Y terutama dijelaskan oleh fungsi kanonik pertama, sehingga interpretasi analisis sebaiknya difokuskan pada fungsi tersebut karena paling representatif dalam menjelaskan keterkaitan antara kondisi proses kimia dan hasil reaksi. # Korelasi Kanonik Mentah
cc1[3:4]
## $xcoef
## [,1] [,2] [,3]
## x1 -0.1606168 -0.0694400 -0.04909375
## x2 -0.1486092 -0.1215865 0.19117914
## x3 -0.2156820 0.5839192 0.03768838
##
## $ycoef
## [,1] [,2] [,3]
## y1 0.17079417 0.6259417 0.3773218
## y2 0.06909743 0.7299873 0.2172993
## y3 0.08582542 0.7127437 0.5389956
Semua koefisien X bernilai negatif dan relatif sebanding, dengan x3 memiliki kontribusi terbesar. Hal ini menunjukkan bahwa variat kanonik X pertama dibentuk oleh kombinasi penurunan suhu, waktu reaksi, dan konsentrasi, dengan pengaruh paling besar berasal dari variabel x3. Karena tandanya sama, ketiga variabel X bergerak searah dalam membentuk indeks kondisi proses. Semua koefisien Y bernilai positif, dengan kontribusi terbesar berasal dari y1. Ini menunjukkan bahwa variat kanonik Y pertama terutama merepresentasikan peningkatan hasil reaksi utama, disertai peningkatan kemurnian dan efisiensi reaksi. Dapat diinterpretasikan bahwa kombinasi kondisi proses kimia tertentu (X) berhubungan sangat kuat dan berlawanan arah dengan kombinasi hasil reaksi (Y). Dengan kata lain, perubahan kondisi proses secara bersama-sama memiliki keterkaitan yang sangat erat terhadap variasi hasil reaksi kimia. # Menghitung loading kanonik
cc1_comp <- comput(X_clean, Y_clean, cc1)
cc1_comp$corr.X.xscores
## [,1] [,2] [,3]
## x1 -0.7002371 -0.2147010 -0.6808608
## x2 -0.2303823 -0.1471813 0.9619052
## x3 -0.4415774 0.8719836 0.2113147
corrplot(cc1_comp$corr.X.xscores, method = "color", addCoef.col ='white', is.cor = T)
cc1_comp$corr.Y.yscores
## [,1] [,2] [,3]
## y1 0.9954170 -0.07757607 -0.05591924
## y2 -0.6033066 0.52598224 -0.59946959
## y3 -0.8615072 -0.06822615 0.50314074
corrplot(cc1_comp$corr.Y.yscores, method = "color", addCoef.col ='white', is.cor = T)
cc1_comp$corr.X.yscores
## [,1] [,2] [,3]
## x1 -0.6873014 -0.06483844 -0.03903680
## x2 -0.2261263 -0.04444788 0.05515033
## x3 -0.4334200 0.26333395 0.01211562
corrplot(cc1_comp$corr.X.yscores, method = "color", addCoef.col ='white', is.cor = T)
cc1_comp$corr.Y.xscores
## [,1] [,2] [,3]
## y1 0.9770283 -0.02342752 -0.00320610
## y2 -0.5921615 0.15884355 -0.03437028
## y3 -0.8455922 -0.02060390 0.02884731
corrplot(cc1_comp$corr.Y.xscores, method = "color", addCoef.col ='white', is.cor = T)
# Uji Signifikansi
rho <- cc1$cor
n <- dim(X_clean)[1]
p <- length(X_clean)
q <- length(Y_clean)
library(CCP)
p.asym(rho, n, p, q, tstat = "Wilks")
## Wilks' Lambda, using F-approximation (Rao's F):
## stat approx df1 df2 p.value
## 1 to 3: 0.03315764 10.78695611 9 31.78919 1.883914e-07
## 2 to 3: 0.90581210 0.35493742 4 28.00000 8.383815e-01
## 3 to 3: 0.99671276 0.04947126 1 15.00000 8.269860e-01
p.asym(rho, n, p, q, tstat = "Hotelling")
## Hotelling-Lawley Trace, using F-approximation:
## stat approx df1 df2 p.value
## 1 to 3: 26.421999975 34.25074071 9 35 9.103829e-15
## 2 to 3: 0.103650752 0.35414007 4 41 8.396454e-01
## 3 to 3: 0.003298084 0.05166998 1 47 8.211683e-01
p.asym(rho, n, p, q, tstat = "Pillai")
## Pillai-Bartlett Trace, using F-approximation:
## stat approx df1 df2 p.value
## 1 to 3: 1.057882268 2.72352765 9 45 0.01262562
## 2 to 3: 0.094487701 0.41463193 4 51 0.79729324
## 3 to 3: 0.003287242 0.06252612 1 57 0.80344600
p.asym(rho, n, p, q, tstat = "Roy")
## Roy's Largest Root, using F-approximation:
## stat approx df1 df2 p.value
## 1 to 1: 0.9633946 131.5917 3 15 5.373324e-11
##
## F statistic for Roy's Greatest Root is an upper bound.
Uji-uji ini bertujuan untuk menguji hipotesis:
H₀: Korelasi kanonik ke-k dan semua korelasi setelahnya = 0 H₁: Minimal ada satu korelasi kanonik ≠ 0
Pengujian dilakukan bertahap:
1 to 3 → uji semua fungsi kanonik
2 to 3 → uji fungsi ke-2 dan ke-3
3 to 3 → uji fungsi ke-3 saja
Berdasarkan uji Wilks’ Lambda, Hotelling–Lawley Trace, Pillai–Bartlett Trace, dan Roy’s Largest Root, hanya fungsi kanonik pertama yang signifikan secara statistik (p < 0,05). Hal ini menunjukkan adanya satu hubungan multivariat yang sangat kuat antara kondisi proses kimia dan hasil reaksi. Fungsi kanonik kedua dan ketiga tidak signifikan sehingga tidak diinterpretasikan lebih lanjut
cca1
##
## Canonical correlation analysis of:
## 3 X variables: x1, x2, x3
## with 3 Y variables: y1, y2, y3
##
## CanR CanRSQ Eigen percent cum scree
## 1 0.98153 0.963395 26.318349 99.60771 99.61 ******************************
## 2 0.30199 0.091200 0.100353 0.37981 99.99
## 3 0.05733 0.003287 0.003298 0.01248 100.00
##
## Test of H0: The canonical correlations in the
## current row and all that follow are zero
##
## CanR LR test stat approx F numDF denDF Pr(> F)
## 1 0.98153 0.03316 10.7870 9 31.789 1.884e-07 ***
## 2 0.30199 0.90581 0.3549 4 28.000 0.8384
## 3 0.05733 0.99671 0.0495 1 15.000 0.8270
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
coef_X <- diag(sqrt(diag(cov(X_clean))))
coef_X %*% cc1$xcoef
## [,1] [,2] [,3]
## [1,] -0.9988316 -0.4318281 -0.30530044
## [2,] -0.6296241 -0.5151350 0.80998368
## [3,] -0.3522073 0.9535361 0.06154487
coef_Y <- diag(sqrt(diag(cov(Y_clean))))
coef_Y %*% cc1$ycoef
## [,1] [,2] [,3]
## [1,] 1.7019208 6.237351 3.759917
## [2,] 0.3259174 3.443189 1.024953
## [3,] 0.5774680 4.795627 3.626580
U1= -0.999Zx1-0.630Zx2-0.352Zx3 Variat kanonik X pertama merupakan indeks kondisi proses kimia yang terutama dipengaruhi oleh x1, diikuti oleh x2 dan x3. Tanda negatif menunjukkan bahwa peningkatan variabel-variabel proses tersebut akan menurunkan skor variat kanonik X.
V1= -1.702Zy1+0.3260Zy2+0.577Zx3 Variat kanonik Y pertama merepresentasikan indeks performa hasil reaksi, yang paling dominan dipengaruhi oleh y1, kemudian y3, dan y2.
Berdasarkan hasil Analisis Korelasi Kanonik pada dataset chemical, dapat disimpulkan bahwa terdapat hubungan multivariat yang sangat kuat dan signifikan antara kelompok variabel kondisi proses kimia (X) dan kelompok variabel hasil reaksi kimia (Y). Hasil pengujian signifikansi menggunakan Wilks’ Lambda, Hotelling–Lawley Trace, Pillai–Bartlett Trace, dan Roy’s Largest Root secara konsisten menunjukkan bahwa hanya fungsi kanonik pertama yang signifikan secara statistik (p < 0,05), sedangkan fungsi kanonik kedua dan ketiga tidak signifikan dan tidak memberikan informasi tambahan yang bermakna.
Korelasi kanonik pertama yang sangat tinggi (r ≈ 0,98) mengindikasikan bahwa kombinasi pengaturan kondisi proses kimia, yang terutama dipengaruhi oleh variabel x1 dan diikuti oleh x2 dan x3, memiliki keterkaitan yang sangat erat dengan kombinasi performa hasil reaksi kimia, yang didominasi oleh variabel y1 dan diikuti oleh y3 dan y2. Hal ini menunjukkan bahwa perubahan pada kondisi proses kimia secara simultan akan diikuti oleh perubahan yang konsisten pada kualitas dan performa hasil reaksi kimia.
Dengan demikian, dapat disimpulkan bahwa dalam konteks dataset chemical, hubungan antara kondisi proses dan hasil reaksi terutama dijelaskan oleh satu dimensi utama, sehingga interpretasi dan pengambilan keputusan praktis sebaiknya difokuskan pada fungsi kanonik pertama. Temuan ini menegaskan bahwa pengendalian variabel proses kimia merupakan faktor kunci dalam menentukan keberhasilan dan kualitas hasil reaksi kimia.