Dataset

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.

Cek Missing Values

# Menggabungkan X dan Y
chem_all <- cbind(X, Y)
kable(chem_all,
      caption = "Tabel Data chem_all (Gabungan Variabel X dan Y)")
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]

Uji asumsi data

ggpairs(X_clean)

ggpairs(Y_clean)

Uji normalitas ganda dilakukan dengan:

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")
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")
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

Korelasi Kanonik

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

Menghitung koefisien korelasi kanonik terstandardisasi

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

Fungsi Kanonik X (U1)

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.

Fungsi Kanonik Y (V1)

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.

Kesimpulan

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.