Anggota Kelompok: 1. Zulaika Fadila Handini 23031554182 2. Kezia Joice Cicilia 23031554191
Import Library
# 1️⃣ Load Library yang Dibutuhkan
library(readr) # Untuk membaca file CSV
## Warning: package 'readr' was built under R version 4.4.3
library(dplyr) # Untuk manipulasi data
## Warning: package 'dplyr' was built under R version 4.4.3
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(psych) # Untuk uji KMO dan Bartlett
## Warning: package 'psych' was built under R version 4.4.3
library(corrplot) # Untuk visualisasi korelasi
## Warning: package 'corrplot' was built under R version 4.4.3
## corrplot 0.95 loaded
library(FactoMineR) # Untuk PCA FactoMineR
## Warning: package 'FactoMineR' was built under R version 4.4.3
library(factoextra) # Untuk visualisasi PCA
## Warning: package 'factoextra' was built under R version 4.4.3
## Loading required package: ggplot2
##
## Attaching package: 'ggplot2'
## The following objects are masked from 'package:psych':
##
## %+%, alpha
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
Membaca Dataset dan menghasilkan: 506 obs. of 14 variables → Dataset memiliki 506 observasi dan 14 variabel. Seluruh data merupakan bertipe numerik Min (Minimum): Nilai terkecil dalam variabel. 1st Qu. (Kuartil 1): Nilai di persentil ke-25. Median (Kuartil 2): Nilai tengah dalam dataset. Mean: Rata-rata dari semua nilai dalam variabel. 3rd Qu. (Kuartil 3): Nilai di persentil ke-75. Max (Maksimum): Nilai terbesar dalam variabel.
# 2️⃣ Baca Dataset
data <- read_csv("C:/Users/zulai/Downloads/Boston.csv")
## New names:
## Rows: 506 Columns: 15
## ── Column specification
## ──────────────────────────────────────────────────────── Delimiter: "," dbl
## (15): ...1, crim, zn, indus, chas, nox, rm, age, dis, rad, tax, ptratio,...
## ℹ Use `spec()` to retrieve the full column specification for this data. ℹ
## Specify the column types or set `show_col_types = FALSE` to quiet this message.
## • `` -> `...1`
# 3️⃣ Hapus kolom pertama karena hanya berisi indeks
data <- data %>% select(-1)
# 4️⃣ Cek Struktur Data dan Ringkasan Statistik
head(data)
## # A tibble: 6 × 14
## crim zn indus chas nox rm age dis rad tax ptratio black
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 0.00632 18 2.31 0 0.538 6.58 65.2 4.09 1 296 15.3 397.
## 2 0.0273 0 7.07 0 0.469 6.42 78.9 4.97 2 242 17.8 397.
## 3 0.0273 0 7.07 0 0.469 7.18 61.1 4.97 2 242 17.8 393.
## 4 0.0324 0 2.18 0 0.458 7.00 45.8 6.06 3 222 18.7 395.
## 5 0.0690 0 2.18 0 0.458 7.15 54.2 6.06 3 222 18.7 397.
## 6 0.0298 0 2.18 0 0.458 6.43 58.7 6.06 3 222 18.7 394.
## # ℹ 2 more variables: lstat <dbl>, medv <dbl>
str(data)
## tibble [506 × 14] (S3: tbl_df/tbl/data.frame)
## $ crim : num [1:506] 0.00632 0.02731 0.02729 0.03237 0.06905 ...
## $ zn : num [1:506] 18 0 0 0 0 0 12.5 12.5 12.5 12.5 ...
## $ indus : num [1:506] 2.31 7.07 7.07 2.18 2.18 2.18 7.87 7.87 7.87 7.87 ...
## $ chas : num [1:506] 0 0 0 0 0 0 0 0 0 0 ...
## $ nox : num [1:506] 0.538 0.469 0.469 0.458 0.458 0.458 0.524 0.524 0.524 0.524 ...
## $ rm : num [1:506] 6.58 6.42 7.18 7 7.15 ...
## $ age : num [1:506] 65.2 78.9 61.1 45.8 54.2 58.7 66.6 96.1 100 85.9 ...
## $ dis : num [1:506] 4.09 4.97 4.97 6.06 6.06 ...
## $ rad : num [1:506] 1 2 2 3 3 3 5 5 5 5 ...
## $ tax : num [1:506] 296 242 242 222 222 222 311 311 311 311 ...
## $ ptratio: num [1:506] 15.3 17.8 17.8 18.7 18.7 18.7 15.2 15.2 15.2 15.2 ...
## $ black : num [1:506] 397 397 393 395 397 ...
## $ lstat : num [1:506] 4.98 9.14 4.03 2.94 5.33 ...
## $ medv : num [1:506] 24 21.6 34.7 33.4 36.2 28.7 22.9 27.1 16.5 18.9 ...
summary(data)
## crim zn indus chas
## Min. : 0.00632 Min. : 0.00 Min. : 0.46 Min. :0.00000
## 1st Qu.: 0.08205 1st Qu.: 0.00 1st Qu.: 5.19 1st Qu.:0.00000
## Median : 0.25651 Median : 0.00 Median : 9.69 Median :0.00000
## Mean : 3.61352 Mean : 11.36 Mean :11.14 Mean :0.06917
## 3rd Qu.: 3.67708 3rd Qu.: 12.50 3rd Qu.:18.10 3rd Qu.:0.00000
## Max. :88.97620 Max. :100.00 Max. :27.74 Max. :1.00000
## nox rm age dis
## Min. :0.3850 Min. :3.561 Min. : 2.90 Min. : 1.130
## 1st Qu.:0.4490 1st Qu.:5.886 1st Qu.: 45.02 1st Qu.: 2.100
## Median :0.5380 Median :6.208 Median : 77.50 Median : 3.207
## Mean :0.5547 Mean :6.285 Mean : 68.57 Mean : 3.795
## 3rd Qu.:0.6240 3rd Qu.:6.623 3rd Qu.: 94.08 3rd Qu.: 5.188
## Max. :0.8710 Max. :8.780 Max. :100.00 Max. :12.127
## rad tax ptratio black
## Min. : 1.000 Min. :187.0 Min. :12.60 Min. : 0.32
## 1st Qu.: 4.000 1st Qu.:279.0 1st Qu.:17.40 1st Qu.:375.38
## Median : 5.000 Median :330.0 Median :19.05 Median :391.44
## Mean : 9.549 Mean :408.2 Mean :18.46 Mean :356.67
## 3rd Qu.:24.000 3rd Qu.:666.0 3rd Qu.:20.20 3rd Qu.:396.23
## Max. :24.000 Max. :711.0 Max. :22.00 Max. :396.90
## lstat medv
## Min. : 1.73 Min. : 5.00
## 1st Qu.: 6.95 1st Qu.:17.02
## Median :11.36 Median :21.20
## Mean :12.65 Mean :22.53
## 3rd Qu.:16.95 3rd Qu.:25.00
## Max. :37.97 Max. :50.00
PCA dapat dilakukan
# 5️⃣ Uji Asumsi untuk PCA
# Uji Bartlett’s Test (Cek korelasi antar variabel)
# Tentukan jumlah observasi secara otomatis
# Tentukan jumlah observasi
n <- nrow(data)
# Uji Bartlett dengan jumlah sampel yang benar
cortest.bartlett(R = cor(data), n = n)
## $chisq
## [1] 5132.764
##
## $p.value
## [1] 0
##
## $df
## [1] 91
# Uji KMO (Cek kecocokan data untuk PCA)
KMO(data)
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = data)
## Overall MSA = 0.85
## MSA for each item =
## crim zn indus chas nox rm age dis rad tax
## 0.92 0.84 0.90 0.63 0.89 0.84 0.91 0.86 0.77 0.80
## ptratio black lstat medv
## 0.80 0.94 0.89 0.79
# Cek Determinan Matriks Korelasi (Cek multikolinearitas)
det(cor(data))
## [1] 3.445683e-05
# (Opsional) Visualisasi Heatmap Korelasi
corrplot(cor(data), method = "color", type = "upper", tl.col = "black", tl.cex = 0.7)
# 6️⃣ Normalisasi Data (Standarisasi)
scaled_data <- scale(data %>% select(-medv)) # Tidak termasuk variabel target
Matriks kovarians digunakan untuk mengukur hubungan antara variabel dalam dataset setelah dinormalisasi. Eigenvalues menunjukkan seberapa besar variasi data yang bisa dijelaskan oleh setiap Principal Component (PC). Semakin besar eigenvalue, semakin besar kontribusi PC tersebut dalam menjelaskan variasi data. Biasanya, kita memilih PC dengan eigenvalue ≥ 1 atau berdasarkan cumulative variance (≥ 70%). Eigenvectors adalah kombinasi linier dari variabel asli yang membentuk setiap Principal Component. Setiap kolom dari eigenvectors mewakili satu Principal Component (PC). Elemen dalam eigenvector menunjukkan bobot dari masing-masing variabel dalam pembentukan PC tersebut.
Interpretasi output: a. PC1 (Komponen 1) memiliki eigenvalue 5.34, artinya PC1 menjelaskan varian terbesar dalam data. PC2 (Komponen 2) memiliki eigenvalue 2.78, artinya PC2 menjelaskan varians kedua terbesar. PC yang memiliki eigenvalue kecil (< 1) biasanya diabaikan karena kontribusinya kecil.
# 7️⃣ Menghitung Eigenvalues dan Eigenvectors Secara Manual
cov_matrix <- cov(scaled_data) # Matriks kovarians
eig_decomp <- eigen(cov_matrix) # Dekomposisi nilai eigen
# 8️⃣ Menampilkan Eigenvalues dan Eigenvectors
eig_values <- eig_decomp$values # Nilai eigen
eig_vectors <- eig_decomp$vectors # Vektor eigen
print(eig_values) # Menampilkan nilai eigen
## [1] 6.12684883 1.43327512 1.24261667 0.85757511 0.83481594 0.65740718
## [7] 0.53535609 0.39609731 0.27694333 0.22023782 0.18601437 0.16930298
## [13] 0.06350926
print(eig_vectors) # Menampilkan vektor eigen
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 0.250951397 0.31525237 -0.24656649 -0.06177071 0.082156919 -0.21965961
## [2,] -0.256314541 0.32331290 -0.29585782 -0.12871159 0.320616987 -0.32338810
## [3,] 0.346672065 -0.11249291 0.01594592 -0.01714571 -0.007811194 -0.07613790
## [4,] 0.005042434 -0.45482914 -0.28978082 -0.81594136 0.086530945 0.16749014
## [5,] 0.342852313 -0.21911553 -0.12096411 0.12822614 0.136853557 -0.15298267
## [6,] -0.189242570 -0.14933154 -0.59396117 0.28059184 -0.423447195 0.05926707
## [7,] 0.313670596 -0.31197778 0.01767481 0.17520603 0.016690847 -0.07170914
## [8,] -0.321543866 0.34907000 0.04973627 -0.21543585 0.098592247 0.02343872
## [9,] 0.319792768 0.27152094 -0.28725483 -0.13234996 -0.204131621 -0.14319401
## [10,] 0.338469147 0.23945365 -0.22074447 -0.10333509 -0.130460565 -0.19293428
## [11,] 0.204942258 0.30589695 0.32344627 -0.28262198 -0.584002232 0.27315330
## [12,] -0.202972612 -0.23855944 0.30014590 -0.16849850 -0.345606947 -0.80345454
## [13,] 0.309759840 0.07432203 0.26700025 -0.06941441 0.394561129 -0.05321583
## [,7] [,8] [,9] [,10] [,11]
## [1,] 0.777607207 0.153350477 0.26039028 -0.019369130 0.10964435
## [2,] -0.274996280 -0.402680309 0.35813749 -0.267527234 -0.26275629
## [3,] -0.339576454 0.173931716 0.64441615 0.363532262 0.30316943
## [4,] 0.074136208 -0.024662148 -0.01372777 0.006181836 -0.01392667
## [5,] -0.199634840 0.080120560 -0.01852201 -0.231056455 -0.11131888
## [6,] 0.063939924 -0.326752259 0.04789804 0.431420193 -0.05316154
## [7,] 0.116010713 -0.600822917 -0.06756218 -0.362778957 0.45915939
## [8,] -0.103900440 -0.121811982 -0.15329124 0.171213138 0.69569257
## [9,] -0.137942546 0.080358311 -0.47089067 -0.021909452 -0.03654388
## [10,] -0.314886835 0.082774347 -0.17656339 0.035168348 0.10483575
## [11,] 0.002323869 -0.317884202 0.25442836 -0.153430488 -0.17450534
## [12,] 0.070294759 -0.004922915 -0.04489802 0.096515117 -0.01927490
## [13,] 0.087011169 -0.424352926 -0.19522139 0.600711409 -0.27138243
## [,12] [,13]
## [1,] 0.086761070 0.045952304
## [2,] -0.071425278 -0.080918973
## [3,] -0.113199629 -0.251076540
## [4,] -0.003982683 0.035921715
## [5,] 0.804322567 0.043630446
## [6,] 0.152872864 0.045567096
## [7,] -0.211936074 -0.038550683
## [8,] 0.390941129 -0.018298538
## [9,] -0.107025890 -0.633489720
## [10,] -0.215191126 0.720233448
## [11,] 0.209598826 0.023398052
## [12,] 0.041723158 -0.004463073
## [13,] 0.055225960 0.024431677
-scaled_data adalah data yang sudah dinormalisasi (standardized). -eig_vectors adalah eigenvectors yang sebelumnya dihitung. -Operasi perkalian matriks (%*%) ini mengonversi data awal ke dalam Principal Component (PC) space. -prcomp() adalah fungsi di R untuk melakukan PCA. -scale = FALSE dan center = FALSE digunakan karena kita sudah melakukan normalisasi sebelumnya. -Outputnya akan berisi nilai eigen (variance explained), eigenvectors, dan skor PCA.
Interpretasi Output Summary: a. Standard Deviation (Simpangan Baku) Kolom pertama menunjukkan standard deviation (simpangan baku) dari setiap Principal Component (PC). PC1 memiliki nilai tertinggi (2.4752) → artinya PC1 memiliki variabilitas terbesar dalam data. PC13 memiliki nilai terendah (0.25201) → artinya PC13 menyumbang sedikit informasi terhadap total variabilitas data.
Proportion of Variance (Proporsi Variansi) Menunjukkan berapa persen variabilitas total yang dijelaskan oleh setiap PC. PC1 menjelaskan 47.13% dari total variansi data. PC2 menambah 11.03% → Total (PC1 + PC2) = 58.16%. PC3 menambah 9.56% → Total (PC1 + PC2 + PC3) = 67.71%. PC4 menambah 6.59% → Total (PC1 + PC2 + PC3 + PC4) = 74.31%.
Cumulative Proportion (Proporsi Kumulatif Variansi) Menunjukkan akumulasi variabilitas yang dijelaskan oleh PC secara bertahap. PC1 hingga PC4 sudah menjelaskan 74.31% dari total variabilitas data. PC1 hingga PC5 sudah menjelaskan 80.73%. PC1 hingga PC7 sudah menjelaskan 89.91%. Semua PC (PC1 - PC13) menjelaskan 100% variansi.
Output Plot: 1. Plot 1. Plot Layar ( Gambar 1(Gambar 1) Menampilkan persentase variansi yang dijelaskan oleh masing-masing komponen utama (principal komponen). Komponen pertama (Dim1) menjelaskan 47.1% dari total variansi — ini berarti komponen pertama sudah menjelaskan hampir setengah informasi dari data asli. Komponen kedua (Dim2) menjelaskan 11% variansi tambahan. Setelah komponen ke-2, kontribusi setiap dimensi menurun signifikan, artinya hanya komponen 1 dan 2 yang paling signifikan analisis untuk visualisasi.
Ini adalah visualisasi kontribusi masing-masing variabel terhadap dua komponen utama (Dim1 & Dim2). Panjang anak panah menunjukkan seberapa kuat kontribusi variabel tersebut (semakin panjang, semakin penting). Warna anak panah menunjukkan kualitas representasi variabel pada komponen (dengan cos²; warna merah lebih tinggi artinya lebih baik terwakili). Variabel-variabel yang dekat dengan lingkaran luar memiliki kontribusi besar. Variabel yang berkontribusi besar ke PC1 (Dim1) : age, nox, indus, lstat, tax, crim— ini berarti mereka yang paling penting dalam membentuk dimensi utama pertama. Variabel dengan kontribusi tinggi pada PC2 (Dim2) : chas, black, rmmeskipun kontribusinya tidak sebesar yang dominan di Dim1.
Ini adalah gabungan antara observasi (titik data, ditampilkan sebagai angka berwarna merah) dan variabel (arah panah biru). Angka merah mewakili masing-masing titik observasi/data. Arah panah menunjukkan arah variabel kontribusi; observasi yang terletak pada arah panah lebih jauh cenderung memiliki nilai tinggi untuk variabel tersebut.
# 9️⃣ Menghitung Skor PCA (Perkalian Matriks)
pca_scores_manual <- as.data.frame(scaled_data %*% eig_vectors)
# 🔟 PCA Menggunakan prcomp() (Verifikasi Hasil)
pca_prcomp <- prcomp(scaled_data, scale = FALSE, center = FALSE)
# 1️⃣1️⃣ Menampilkan Ringkasan PCA
summary(pca_prcomp)
## Importance of components:
## PC1 PC2 PC3 PC4 PC5 PC6 PC7
## Standard deviation 2.4752 1.1972 1.11473 0.92605 0.91368 0.81081 0.73168
## Proportion of Variance 0.4713 0.1103 0.09559 0.06597 0.06422 0.05057 0.04118
## Cumulative Proportion 0.4713 0.5816 0.67713 0.74310 0.80732 0.85789 0.89907
## PC8 PC9 PC10 PC11 PC12 PC13
## Standard deviation 0.62936 0.5263 0.46930 0.43129 0.41146 0.25201
## Proportion of Variance 0.03047 0.0213 0.01694 0.01431 0.01302 0.00489
## Cumulative Proportion 0.92954 0.9508 0.96778 0.98209 0.99511 1.00000
# 1️⃣2️⃣ Visualisasi Scree Plot
fviz_eig(pca_prcomp, addlabels = TRUE, barfill = "steelblue", barcolor = "black")
# 1️⃣3️⃣ Visualisasi Biplot PCA
fviz_pca_biplot(pca_prcomp, repel = TRUE, col.var = "blue", col.ind = "red")
# 1️⃣4️⃣ Visualisasi Kontribusi Variabel pada PCA
fviz_pca_var(pca_prcomp, col.var = "cos2", gradient.cols = c("blue", "red"))
# 1️⃣5️⃣ Simpan Hasil PCA untuk Analisis Lebih Lanjut
write.csv(pca_scores_manual, "C:/Users/zulai/Downloads/PCA_Scores_Manual.csv", row.names = FALSE)
write.csv(pca_prcomp$x, "C:/Users/zulai/Downloads/PCA_Scores_prcomp.csv", row.names = FALSE)
Melakukan Factor Analysis (FA) menggunakan metode Maximum Likelihood (ML). nfactors = 3berarti kita ingin mencari 3 faktor utama dari data kita. rotate = “varimax”dipakai supaya hasil faktor lebih “bersih” dan mudah diinterpretasi (variabel cenderung hanya dominan pada satu faktor). print(fa_ml)akan menampilkan hasil loading faktor (berapa besar variabel masuk ke faktor 1, 2, atau 3), komunalitas (seberapa besar variabel faktor yang dijelaskan), dan keunikan (sisa variansi yang tidak menjelaskan faktor).
Menggunakan metode Principal Axis Factoring (PAF). PAF lebih cocok jika data tidak normal. nfactors = 3juga mencari 3 faktor, dengan rotasi varimax. print(fa_paf)akan menampilkan struktur loading faktor, komunalitas, dan keunikan hasil metode PAF.
# Analisis Faktor (FA)
fa_ml <- fa(data, nfactors = 3, fm = "ml", rotate = "varimax")
fa_paf <- fa(data, nfactors = 3, fm = "pa", rotate = "varimax")
# 1️⃣6️⃣ Factor Analysis (FA) - Maximum Likelihood
fa_ml <- fa(r = cor(data), nfactors = 3, fm = "ml", rotate = "varimax") # Ubah nfactors sesuai kebutuhan
print(fa_ml)
## Factor Analysis using method = ml
## Call: fa(r = cor(data), nfactors = 3, rotate = "varimax", fm = "ml")
## Standardized loadings (pattern matrix) based upon correlation matrix
## ML3 ML1 ML2 h2 u2 com
## crim 0.20 0.56 -0.21 0.40 0.599 1.5
## zn -0.68 -0.11 0.20 0.51 0.491 1.2
## indus 0.63 0.51 -0.24 0.72 0.276 2.2
## chas 0.15 -0.04 0.21 0.07 0.930 1.9
## nox 0.72 0.47 -0.15 0.77 0.233 1.8
## rm -0.21 -0.11 0.70 0.55 0.451 1.2
## age 0.76 0.29 -0.15 0.69 0.310 1.4
## dis -0.87 -0.32 -0.02 0.86 0.136 1.3
## rad 0.23 0.91 -0.10 0.89 0.109 1.2
## tax 0.29 0.91 -0.18 0.94 0.059 1.3
## ptratio 0.11 0.40 -0.41 0.34 0.663 2.1
## black -0.19 -0.40 0.19 0.23 0.765 1.9
## lstat 0.47 0.34 -0.61 0.71 0.290 2.5
## medv -0.22 -0.27 0.89 0.92 0.081 1.3
##
## ML3 ML1 ML2
## SS loadings 3.28 3.17 2.15
## Proportion Var 0.23 0.23 0.15
## Cumulative Var 0.23 0.46 0.61
## Proportion Explained 0.38 0.37 0.25
## Cumulative Proportion 0.38 0.75 1.00
##
## Mean item complexity = 1.6
## Test of the hypothesis that 3 factors are sufficient.
##
## df null model = 91 with the objective function = 10.28
## df of the model are 52 and the objective function was 0.87
##
## The root mean square of the residuals (RMSR) is 0.04
## The df corrected root mean square of the residuals is 0.05
##
## Fit based upon off diagonal values = 0.99
## Measures of factor score adequacy
## ML3 ML1 ML2
## Correlation of (regression) scores with factors 0.95 0.97 0.96
## Multiple R square of scores with factors 0.90 0.94 0.91
## Minimum correlation of possible factor scores 0.79 0.87 0.83
# 1️⃣7️⃣ Factor Analysis (FA) - Principal Axis Factoring (PAF)
fa_paf <- fa(r = cor(data), nfactors = 3, fm = "pa", rotate = "varimax")
print(fa_paf)
## Factor Analysis using method = pa
## Call: fa(r = cor(data), nfactors = 3, rotate = "varimax", fm = "pa")
## Standardized loadings (pattern matrix) based upon correlation matrix
## PA1 PA3 PA2 h2 u2 com
## crim 0.17 0.59 -0.21 0.427 0.573 1.4
## zn -0.64 -0.12 0.25 0.486 0.514 1.4
## indus 0.64 0.47 -0.28 0.714 0.286 2.2
## chas 0.17 -0.05 0.20 0.072 0.928 2.1
## nox 0.73 0.46 -0.15 0.769 0.231 1.8
## rm -0.20 -0.07 0.73 0.580 0.420 1.2
## age 0.76 0.29 -0.17 0.693 0.307 1.4
## dis -0.88 -0.31 0.02 0.866 0.134 1.3
## rad 0.23 0.93 -0.12 0.929 0.071 1.2
## tax 0.30 0.87 -0.21 0.899 0.101 1.4
## ptratio 0.13 0.34 -0.42 0.314 0.686 2.1
## black -0.17 -0.44 0.16 0.247 0.753 1.6
## lstat 0.44 0.34 -0.63 0.711 0.289 2.4
## medv -0.19 -0.27 0.89 0.904 0.096 1.3
##
## PA1 PA3 PA2
## SS loadings 3.23 3.12 2.26
## Proportion Var 0.23 0.22 0.16
## Cumulative Var 0.23 0.45 0.62
## Proportion Explained 0.37 0.36 0.26
## Cumulative Proportion 0.37 0.74 1.00
##
## Mean item complexity = 1.6
## Test of the hypothesis that 3 factors are sufficient.
##
## df null model = 91 with the objective function = 10.28
## df of the model are 52 and the objective function was 0.9
##
## The root mean square of the residuals (RMSR) is 0.04
## The df corrected root mean square of the residuals is 0.05
##
## Fit based upon off diagonal values = 0.99
## Measures of factor score adequacy
## PA1 PA3 PA2
## Correlation of (regression) scores with factors 0.95 0.97 0.95
## Multiple R square of scores with factors 0.90 0.94 0.91
## Minimum correlation of possible factor scores 0.81 0.87 0.81
fa.diagram(fa_ml) # Untuk FA Maximum Likelihood fa.diagram(fa_paf) # Untuk FA Principal Axis Factoring Fungsi: Menampilkan diagram yang menampilkan faktor (PA1, PA2, PA3) dan variabel-variabel yang berisi faktor tersebut, lengkap dengan nilai loadings-nya.
-⃣ Cek Variance Explained oleh Setiap Faktor SS Loadings : jumlah loading kuadrat untuk masing-masing faktor. Proportion Var : proporsi varians yang dijelaskan tiap faktor. Proporsi Kumulatif : akumulasi varians yang dijelaskan oleh seluruh faktor.
Interpretasi Output: Hasil analisis faktor menggunakan metode Maximum Likelihood (ML) dan Principal Axis Factoring (PAF) menunjukkan bahwa tiga faktor utama mampu menjelaskan sekitar 61-62% dari total varians dalam dataset. Faktor pertama menangkap proporsi varians terbesar, dengan ML menjelaskan 23.46% dan PAF menjelaskan 23.06%. Faktor kedua dan ketiga menambah akumulasi varians yang dijelaskan hingga 61.47% dalam ML dan 61.50% dalam PAF.
Interpretasi Visualisasi: 1. Maximal Likelihood a. ML1 – Faktor Infrastruktur & Regulasi Variabel dengan loading tinggi: RAD (0.9) – Akses ke jalan raya utama TAX (0.9) – Pajak properti CRIM (0.6) – Tingkat kriminalitas BLACK (-0.4) – Proporsi populasi keturunan Afrika-Amerika (karena negatif sering menjadi indikator ketimpangan sosial) Interpretasi: Faktor ini menunjukkan keterkaitan antara ketersediaan infrastruktur (akses ke jalan raya), besarnya pajak properti, dan aspek sosial (kriminalitas, minoritas). Bisa disebut sebagai Faktor Infrastruktur, Pajak, dan Ketimpangan Sosial.
ML2 – Faktor Kualitas Hunian & Ekonomi Variabel dengan loading tinggi: MEDV (0.9) – Median harga rumah RM (0.7) – Jumlah rata-rata kamar per rumah LSTAT (-0.6) – Persentase penduduk berstatus sosial rendah PTRATIO (-0.4) – Rasio murid-guru di sekolah umum Interpretasi: Faktor ini berkaitan dengan kualitas properti (harga rumah, jumlah kamar) yang berlawanan arah dengan status sosial rendah dan kualitas pendidikan buruk (PTRATIO tinggi). Ini cocok disebut Faktor Kualitas Hunian dan Status Ekonomi.
ML3 – Faktor Urbanisasi & Polusi Variabel dengan loading tinggi: DIS (-0.9) – Jarak ke pusat pekerjaan (negatif berarti semakin dekat ke pusat kota) AGE (0.8) – Persentase bangunan tua NOX (0.7) – Konsentrasi polusi udara ZN (-0.7) – Zona perumahan kelas atas (negatif loading) INDUS (0.6) – Persentase area bisnis non-ritel Interpretasi: Faktor ini menangkap aspek urbanisasi: area dekat pusat kota (DIS negatif) dengan polusi tinggi (NOX), bangunan tua (AGE), area industri (INDUS), dan zona yang bukan perumahan elit (ZN negatif). Faktor ini bisa disebut Faktor Urbanisasi, Polusi, dan Kepadatan Kota.
PA1 – Faktor Urbanisasi & Polusi Variabel dengan loading tinggi: DIS (-0.9) – Jarak ke pusat pekerjaan (semakin jauh dari pusat kota) AGE (0.8) – Persentase bangunan tua NOX (0.7) – Konsentrasi polusi udara INDUS (0.6) – Persentase area bisnis non-ritel ZN (-0.6) - Zona perumahan kelas atas (negatif loading) Interpretasi: Faktor ini menangkap aspek urbanisasi dan kepadatan kota. Semakin jauh dari pusat kota (DIS negatif), semakin tinggi proporsi bangunan tua dan area industri, serta meningkatnya polusi udara. Bisa disebut sebagai Faktor Urbanisasi & Polusi Lingkungan.
PA2 – Faktor Kualitas Hunian & Status Ekonomi Variabel dengan loading tinggi: MEDV (0.9) – Median harga rumah RM (0.7) – Jumlah rata-rata kamar per rumah LSTAT (-0.6) – Persentase penduduk dengan status sosial rendah PTRATIO (-0.4) – Rasio murid-guru di sekolah umum Interpretasi: Faktor ini berkaitan dengan kualitas hunian dan status ekonomi penduduk. Harga rumah tinggi (MEDV) dan jumlah kamar banyak (RM) berlawanan arah dengan status sosial rendah (LSTAT) dan tingginya rasio murid-guru. Bisa disebut sebagai Faktor Kualitas Hunian & Status Sosial-Ekonomi.
PA3 – Faktor Infrastruktur & Keamanan Variabel dengan loading tinggi: RAD (0.9) – Akses ke jalan raya utama TAX (0.9) – Pajak properti CRIM (0.6) – Tingkat kriminalitas BLACK (-0.4) – Proporsi populasi keturunan Afrika-Amerika Interpretasi: Faktor ini menangkap hubungan antara aksesibilitas, regulasi pajak, dan tingkat keamanan. Wilayah dengan akses jalan raya tinggi dan pajak properti tinggi sering kali berhubungan dengan tingkat kriminalitas tertentu. Bisa disebut sebagai Faktor Infrastruktur & Keamanan Lingkungan.
# 1️⃣8️⃣ Visualisasi Faktor (Loading Plot)
fa.diagram(fa_ml) # Untuk FA Maximum Likelihood
fa.diagram(fa_paf) # Untuk FA Principal Axis Factoring
# 1️⃣9️⃣ Cek Komunalitas (Seberapa baik variabel dijelaskan oleh faktor)
print(fa_ml$communalities)
## crim zn indus chas nox rm age
## 0.40119309 0.50946281 0.72414838 0.06986859 0.76684851 0.54909402 0.68976968
## dis rad tax ptratio black lstat medv
## 0.86433805 0.89086287 0.94051406 0.33671646 0.23485915 0.70968608 0.91906872
print(fa_paf$communalities)
## [1] 8.610414
# 2️⃣0️⃣ Cek Variance Explained oleh Setiap Faktor
print(fa_ml$Vaccounted)
## ML3 ML1 ML2
## SS loadings 3.2841542 3.1702438 2.1520653
## Proportion Var 0.2345824 0.2264460 0.1537189
## Cumulative Var 0.2345824 0.4610284 0.6147474
## Proportion Explained 0.3815916 0.3683562 0.2500522
## Cumulative Proportion 0.3815916 0.7499478 1.0000000
print(fa_paf$Vaccounted)
## PA1 PA3 PA2
## SS loadings 3.2281204 3.1223325 2.2599615
## Proportion Var 0.2305800 0.2230237 0.1614258
## Cumulative Var 0.2305800 0.4536038 0.6150296
## Proportion Explained 0.3749088 0.3626228 0.2624684
## Cumulative Proportion 0.3749088 0.7375316 1.0000000
# 2️⃣1️⃣ Simpan Hasil F
write.csv(fa_ml$loadings, "C:/Users/zulai/Downloads/FA_Loadings_ML.csv", row.names = TRUE)
write.csv(fa_paf$loadings, "C:/Users/zulai/Downloads/FA_Loadings_PAF.csv", row.names = TRUE)
# Menampilkan Proporsi Varians yang Dijelaskan
print(fa_ml$Vaccounted) # Untuk metode Maximum Likelihood
## ML3 ML1 ML2
## SS loadings 3.2841542 3.1702438 2.1520653
## Proportion Var 0.2345824 0.2264460 0.1537189
## Cumulative Var 0.2345824 0.4610284 0.6147474
## Proportion Explained 0.3815916 0.3683562 0.2500522
## Cumulative Proportion 0.3815916 0.7499478 1.0000000
print(fa_paf$Vaccounted) # Untuk metode Principal Axis Factoring
## PA1 PA3 PA2
## SS loadings 3.2281204 3.1223325 2.2599615
## Proportion Var 0.2305800 0.2230237 0.1614258
## Cumulative Var 0.2305800 0.4536038 0.6150296
## Proportion Explained 0.3749088 0.3626228 0.2624684
## Cumulative Proportion 0.3749088 0.7375316 1.0000000
write.csv(fa_ml$Vaccounted, "C:/Users/zulai/Downloads/FA_Variance_ML.csv", row.names = TRUE)
write.csv(fa_paf$Vaccounted, "C:/Users/zulai/Downloads/FA_Variance_PAF.csv", row.names = TRUE)