Analisis korelasi kanonik digunakan untuk mengidentifikasi dan mengukur hubungan antara dua set variabel. Analisis ini berguna ketika terdapat dua kelompok variabel yang masing-masing memiliki beberapa variabel dan hubungan antar kelompok ini ingin dipelajari.
Contoh Aplikasi:
Langkah pertama adalah memuat paket-paket yang diperlukan. Jika paket
belum terinstal, gunakan perintah install.packages()
.
# Memastikan paket tersedia
if (!require("ggplot2")) install.packages("ggplot2")
## Loading required package: ggplot2
## Warning: package 'ggplot2' was built under R version 4.3.3
if (!require("GGally")) install.packages("GGally")
## Loading required package: GGally
## Warning: package 'GGally' was built under R version 4.3.3
## Registered S3 method overwritten by 'GGally':
## method from
## +.gg ggplot2
if (!require("CCA")) install.packages("CCA")
## Loading required package: CCA
## Warning: package 'CCA' was built under R version 4.3.3
## Loading required package: fda
## Warning: package 'fda' was built under R version 4.3.3
## Loading required package: splines
## Loading required package: fds
## Warning: package 'fds' was built under R version 4.3.3
## Loading required package: rainbow
## Warning: package 'rainbow' was built under R version 4.3.3
## Loading required package: MASS
## Loading required package: pcaPP
## Warning: package 'pcaPP' was built under R version 4.3.3
## Loading required package: RCurl
## Warning: package 'RCurl' was built under R version 4.3.3
## Loading required package: deSolve
## Warning: package 'deSolve' was built under R version 4.3.3
##
## Attaching package: 'fda'
## The following object is masked from 'package:graphics':
##
## matplot
## Loading required package: fields
## Warning: package 'fields' was built under R version 4.3.3
## Loading required package: spam
## Warning: package 'spam' was built under R version 4.3.3
## Spam version 2.11-0 (2024-10-03) is loaded.
## Type 'help( Spam)' or 'demo( spam)' for a short introduction
## and overview of this package.
## Help for individual functions is also obtained by adding the
## suffix '.spam' to the function name, e.g. 'help( chol.spam)'.
##
## Attaching package: 'spam'
## The following objects are masked from 'package:base':
##
## backsolve, forwardsolve
## Loading required package: viridisLite
##
## Try help(fields) to get started.
if (!require("CCP")) install.packages("CCP")
## Loading required package: CCP
# Memuat paket
library(ggplot2)
library(GGally)
library(CCA)
library(CCP)
Dataset yang digunakan berisi data psikologi dan akademik dari 600 mahasiswa. Variabel psikologi meliputi locus of control, self-concept, dan motivation, sedangkan variabel akademik meliputi nilai tes membaca, menulis, matematika, sains, dan jenis kelamin.
# Mengimpor data
data_url <- "https://stats.idre.ucla.edu/stat/data/mmreg.csv"
mm <- read.csv(data_url)
colnames(mm) <- c("Control", "Concept", "Motivation", "Read", "Write", "Math", "Science", "Sex")
# Ringkasan data
summary(mm)
## Control Concept Motivation Read
## Min. :-2.23000 Min. :-2.620000 Min. :0.0000 Min. :28.3
## 1st Qu.:-0.37250 1st Qu.:-0.300000 1st Qu.:0.3300 1st Qu.:44.2
## Median : 0.21000 Median : 0.030000 Median :0.6700 Median :52.1
## Mean : 0.09653 Mean : 0.004917 Mean :0.6608 Mean :51.9
## 3rd Qu.: 0.51000 3rd Qu.: 0.440000 3rd Qu.:1.0000 3rd Qu.:60.1
## Max. : 1.36000 Max. : 1.190000 Max. :1.0000 Max. :76.0
## Write Math Science Sex
## Min. :25.50 Min. :31.80 Min. :26.00 Min. :0.000
## 1st Qu.:44.30 1st Qu.:44.50 1st Qu.:44.40 1st Qu.:0.000
## Median :54.10 Median :51.30 Median :52.60 Median :1.000
## Mean :52.38 Mean :51.85 Mean :51.76 Mean :0.545
## 3rd Qu.:59.90 3rd Qu.:58.38 3rd Qu.:58.65 3rd Qu.:1.000
## Max. :67.10 Max. :75.50 Max. :74.20 Max. :1.000
Penjelasan Output:
Output menunjukkan statistik deskriptif dari setiap variabel, seperti
nilai minimum, maksimum, rata-rata, dan median. Contohnya, median
variabel Control
adalah 0.21, dengan rentang nilai dari
-2.23 hingga 1.36.
Dataset dibagi menjadi dua kelompok variabel:
# Membagi data ke dalam dua set
psych <- mm[, 1:3] # Set psikologi
acad <- mm[, 4:8] # Set akademik
Korelasi dalam setiap set divisualisasikan menggunakan
ggpairs
untuk memahami hubungan antar variabel.
ggpairs(psych, title = "Korelasi Antar Variabel dalam set Psikologi")
Penjelasan Grafik:
Control
: Data mendekati distribusi normal dengan nilai
rata-rata di sekitar 0.Concept
: Distribusi serupa dengan Control
,
tetapi lebih tersebar.Motivation
: Data berbentuk bimodal, menunjukkan ada dua
kelompok utama pada variabel ini.Control
dan Concept
memiliki korelasi
0.171, menunjukkan hubungan positif yang sangat lemah.Control
dan Motivation
memiliki korelasi
0.245, juga lemah namun signifikan.Concept
dan Motivation
memiliki korelasi
0.289, menunjukkan hubungan positif yang sedikit lebih kuat dibandingkan
pasangan lainnya.Concept
dan Motivation
, terdapat
kecenderungan hubungan linear meskipun lemah.ggpairs(acad, title = "Korelasi Antar Variabel dalam set Akademik")
Penjelasan Grafik:
Read
hingga Science
memiliki distribusi
mendekati normal, tetapi Sex
menunjukkan data biner
(kategori).Read
dan
Math
(sekitar 0.68), menunjukkan hubungan yang cukup
kuat.Sex
memiliki korelasi lemah dengan variabel lainnya,
karena ini adalah variabel kategori.Read
dan Math
menunjukkan pola
hubungan linear yang cukup jelas, sesuai dengan nilai korelasi tinggi
mereka.Kesimpulan dari Grafik:
Korelasi antara variabel dalam set psikologi dan set akademik
dihitung menggunakan fungsi matcor
.
# Korelasi antar set
cor_results <- matcor(psych, acad)
cor_results
## $Xcor
## Control Concept Motivation
## Control 1.0000000 0.1711878 0.2451323
## Concept 0.1711878 1.0000000 0.2885707
## Motivation 0.2451323 0.2885707 1.0000000
##
## $Ycor
## Read Write Math Science Sex
## Read 1.00000000 0.6285909 0.6792757 0.6906929 -0.04174278
## Write 0.62859089 1.0000000 0.6326664 0.5691498 0.24433183
## Math 0.67927568 0.6326664 1.0000000 0.6495261 -0.04821830
## Science 0.69069291 0.5691498 0.6495261 1.0000000 -0.13818587
## Sex -0.04174278 0.2443318 -0.0482183 -0.1381859 1.00000000
##
## $XYcor
## Control Concept Motivation Read Write Math
## Control 1.0000000 0.17118778 0.24513227 0.37356505 0.35887684 0.3372690
## Concept 0.1711878 1.00000000 0.28857075 0.06065584 0.01944856 0.0535977
## Motivation 0.2451323 0.28857075 1.00000000 0.21060992 0.25424818 0.1950135
## Read 0.3735650 0.06065584 0.21060992 1.00000000 0.62859089 0.6792757
## Write 0.3588768 0.01944856 0.25424818 0.62859089 1.00000000 0.6326664
## Math 0.3372690 0.05359770 0.19501347 0.67927568 0.63266640 1.0000000
## Science 0.3246269 0.06982633 0.11566948 0.69069291 0.56914983 0.6495261
## Sex 0.1134108 -0.12595132 0.09810277 -0.04174278 0.24433183 -0.0482183
## Science Sex
## Control 0.32462694 0.11341075
## Concept 0.06982633 -0.12595132
## Motivation 0.11566948 0.09810277
## Read 0.69069291 -0.04174278
## Write 0.56914983 0.24433183
## Math 0.64952612 -0.04821830
## Science 1.00000000 -0.13818587
## Sex -0.13818587 1.00000000
Penjelasan Output:
Tabel ini menampilkan korelasi dalam setiap set (diagonal) dan antar
set (off-diagonal). Contohnya, Control
memiliki korelasi
sebesar 0.37 dengan Read
, menunjukkan hubungan yang lemah
namun signifikan.
Langkah utama adalah menjalankan analisis korelasi kanonik
menggunakan fungsi cc
dari paket CCA.
# Melakukan analisis korelasi kanonik
cc1 <- cc(psych, acad)
# Korelasi kanonik
cc1$cor
## [1] 0.4640861 0.1675092 0.1039911
Penjelasan Output:
Hasil menunjukkan tiga korelasi kanonik. Dimensi pertama memiliki korelasi kanonik tertinggi, yaitu 0.46, menunjukkan hubungan kuat antara kombinasi variabel dari kedua set. Dimensi berikutnya memiliki korelasi yang lebih kecil.
Koefisien kanonik asli menunjukkan kontribusi setiap variabel terhadap variat kanonik (kombinasi linier).
# Menampilkan koefisien kanonik mentah dengan nama variabel
rownames(cc1$xcoef) <- colnames(psych)
rownames(cc1$ycoef) <- colnames(acad)
cc1$xcoef # Koefisien kanonik untuk set psikologi
## [,1] [,2] [,3]
## Control -1.2538339 -0.6214776 -0.6616896
## Concept 0.3513499 -1.1876866 0.8267210
## Motivation -1.2624204 2.0272641 2.0002283
cc1$ycoef # Koefisien kanonik untuk set akademik
## [,1] [,2] [,3]
## Read -0.044620600 -0.004910024 0.021380576
## Write -0.035877112 0.042071478 0.091307329
## Math -0.023417185 0.004229478 0.009398182
## Science -0.005025152 -0.085162184 -0.109835014
## Sex -0.632119234 1.084642326 -1.794647036
Penjelasan Output:
Koefisien kanonik memberikan informasi tentang bagaimana setiap
variabel berkontribusi terhadap variat kanonik. Koefisien ini mirip
dengan koefisien regresi. Contohnya, untuk variabel Read
,
peningkatan satu unit akan mengurangi skor pada variat kanonik pertama
sebesar 0.0446.
Variat kanonik psikologi (X variables):
Control
, Concept
,
dan Motivation
.Variat kanonik akademik (Y variables):
Read
, Write
,
Math
, Science
, dan Sex
.Loadings kanonik menunjukkan hubungan antara variabel asli dengan variat kanonik.
# Menghitung loadings kanonik
cc2 <- comput(psych, acad, cc1)
rownames(cc2$corr.X.xscores) <- colnames(psych)
rownames(cc2$corr.Y.xscores) <- colnames(acad) #cross loading
rownames(cc2$corr.X.yscores) <- colnames(psych) #cross loading
rownames(cc2$corr.Y.yscores) <- colnames(acad)
cc2[3:6]
## $corr.X.xscores
## [,1] [,2] [,3]
## Control -0.90404631 -0.3896883 -0.1756227
## Concept -0.02084327 -0.7087386 0.7051632
## Motivation -0.56715106 0.3508882 0.7451289
##
## $corr.Y.xscores
## [,1] [,2] [,3]
## Read -0.3900402 -0.06010654 0.01407661
## Write -0.4067914 0.01086075 0.02647207
## Math -0.3545378 -0.04990916 0.01536585
## Science -0.3055607 -0.11336980 -0.02395489
## Sex -0.1689796 0.12645737 -0.05650916
##
## $corr.X.yscores
## [,1] [,2] [,3]
## Control -0.419555307 -0.06527635 -0.01826320
## Concept -0.009673069 -0.11872021 0.07333073
## Motivation -0.263206910 0.05877699 0.07748681
##
## $corr.Y.yscores
## [,1] [,2] [,3]
## Read -0.8404480 -0.35882541 0.1353635
## Write -0.8765429 0.06483674 0.2545608
## Math -0.7639483 -0.29794884 0.1477611
## Science -0.6584139 -0.67679761 -0.2303551
## Sex -0.3641127 0.75492811 -0.5434036
Penjelasan Output:
Loadings ini adalah korelasi antara variabel asli dengan variat
kanonik. Misalnya, variabel Control
memiliki korelasi -0.90
dengan variat kanonik pertama, menunjukkan hubungan yang kuat.
Dimensi dalam analisis korelasi kanonik adalah pasangan kombinasi linier antara dua set variabel yang menunjukkan hubungan maksimal. Jika suatu dimensi signifikan: - Kombinasi linier tersebut secara statistik menjelaskan hubungan yang berarti.
Fungsi Variat Kanonik:
# Koefisien kanonik dengan nama variabel
rownames(cc1$xcoef) <- colnames(psych)
rownames(cc1$ycoef) <- colnames(acad)
cat("Variat kanonik psikologi (X variables):\n")
## Variat kanonik psikologi (X variables):
for (i in 1:ncol(cc1$xcoef)) {
cat(paste0("u", i, " = ", paste0(round(cc1$xcoef[, i], 4), " * ", rownames(cc1$xcoef), collapse = " + "), "\n"))
}
## u1 = -1.2538 * Control + 0.3513 * Concept + -1.2624 * Motivation
## u2 = -0.6215 * Control + -1.1877 * Concept + 2.0273 * Motivation
## u3 = -0.6617 * Control + 0.8267 * Concept + 2.0002 * Motivation
cat("\nVariat kanonik akademik (Y variables):\n")
##
## Variat kanonik akademik (Y variables):
for (i in 1:ncol(cc1$ycoef)) {
cat(paste0("v", i, " = ", paste0(round(cc1$ycoef[, i], 4), " * ", rownames(cc1$ycoef), collapse = " + "), "\n"))
}
## v1 = -0.0446 * Read + -0.0359 * Write + -0.0234 * Math + -0.005 * Science + -0.6321 * Sex
## v2 = -0.0049 * Read + 0.0421 * Write + 0.0042 * Math + -0.0852 * Science + 1.0846 * Sex
## v3 = 0.0214 * Read + 0.0913 * Write + 0.0094 * Math + -0.1098 * Science + -1.7946 * Sex
Uji signifikansi dilakukan untuk menentukan jumlah dimensi yang signifikan.
# Uji signifikansi
rho <- cc1$cor
n <- dim(psych)[1]
p <- length(psych)
q <- length(acad)
# Menggunakan Wilks' Lambda
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.7543611 11.715733 15 1634.653 0.000000000
## 2 to 3: 0.9614300 2.944459 8 1186.000 0.002905057
## 3 to 3: 0.9891858 2.164612 3 594.000 0.091092180
Penjelasan tentang Dimensi dan Signifikansinya:
Koefisien ini memungkinkan perbandingan antar variabel dengan skala berbeda.
# Koefisien kanonik terstandar
s1 <- diag(sqrt(diag(cov(psych))))
std_xcoef <- s1 %*% cc1$xcoef
s2 <- diag(sqrt(diag(cov(acad))))
std_ycoef <- s2 %*% cc1$ycoef
rownames(std_xcoef) <- colnames(psych)
rownames(std_ycoef) <- colnames(acad)
std_xcoef
## [,1] [,2] [,3]
## Control -0.8404196 -0.4165639 -0.4435172
## Concept 0.2478818 -0.8379278 0.5832620
## Motivation -0.4326685 0.6948029 0.6855370
std_ycoef
## [,1] [,2] [,3]
## Read -0.45080116 -0.04960589 0.21600760
## Write -0.34895712 0.40920634 0.88809662
## Math -0.22046662 0.03981942 0.08848141
## Science -0.04877502 -0.82659938 -1.06607828
## Sex -0.31503962 0.54057096 -0.89442764
Penjelasan Output:
Koefisien ini menunjukkan kontribusi variabel terhadap variat kanonik
setelah menyesuaikan skala variabel. Misalnya, Control
memiliki kontribusi besar (-0.84) pada dimensi pertama.
Control
memiliki kontribusi terbesar dalam
dimensi pertama, sementara Motivation
dominan pada dimensi
kedua.Read
dan Science
memberikan pengaruh besar pada dimensi pertama dan kedua.Sekian dan Terima kasih :)