library(readxl) # Untuk membaca file Excel
library(REdaS) # Untuk uji KMO dan Bartlett
## Warning: package 'REdaS' was built under R version 4.4.3
## Loading required package: grid
library(psych) # Untuk analisis faktor
## Warning: package 'psych' was built under R version 4.4.2
AirQualityUCI <- read_excel("~/1. Statmul/3. TUGAS FIX/Tugas 6/AirQualityUCI.xlsx")
AirQualityUCI
## # A tibble: 9,357 × 15
## `Date (X1)` `Time (X2)` `CO(GT) (X3)` `PT08.S1(CO) (X4)`
## <dttm> <dttm> <dbl> <dbl>
## 1 2004-03-10 00:00:00 1899-12-31 18:00:00 2.6 1360
## 2 2004-03-10 00:00:00 1899-12-31 19:00:00 2 1292.
## 3 2004-03-10 00:00:00 1899-12-31 20:00:00 2.2 1402
## 4 2004-03-10 00:00:00 1899-12-31 21:00:00 2.2 1376.
## 5 2004-03-10 00:00:00 1899-12-31 22:00:00 1.6 1272.
## 6 2004-03-10 00:00:00 1899-12-31 23:00:00 1.2 1197
## 7 2004-03-11 00:00:00 1899-12-31 00:00:00 1.2 1185
## 8 2004-03-11 00:00:00 1899-12-31 01:00:00 1 1136.
## 9 2004-03-11 00:00:00 1899-12-31 02:00:00 0.9 1094
## 10 2004-03-11 00:00:00 1899-12-31 03:00:00 0.6 1010.
## # ℹ 9,347 more rows
## # ℹ 11 more variables: `NMHC(GT) (X5)` <dbl>, `C6H6(GT) (X6)` <dbl>,
## # `PT08.S2(NMHC) (X7)` <dbl>, `NOx(GT) (X8)` <dbl>,
## # `PT08.S3(NOx) (X9)` <dbl>, `NO2(GT) (X10)` <dbl>,
## # `PT08.S4(NO2) (X11)` <dbl>, `PT08.S5(O3) (X12)` <dbl>, `T (X13)` <dbl>,
## # `RH (X14)` <dbl>, `AH (X15)` <dbl>
head(AirQualityUCI, 10)
## # A tibble: 10 × 15
## `Date (X1)` `Time (X2)` `CO(GT) (X3)` `PT08.S1(CO) (X4)`
## <dttm> <dttm> <dbl> <dbl>
## 1 2004-03-10 00:00:00 1899-12-31 18:00:00 2.6 1360
## 2 2004-03-10 00:00:00 1899-12-31 19:00:00 2 1292.
## 3 2004-03-10 00:00:00 1899-12-31 20:00:00 2.2 1402
## 4 2004-03-10 00:00:00 1899-12-31 21:00:00 2.2 1376.
## 5 2004-03-10 00:00:00 1899-12-31 22:00:00 1.6 1272.
## 6 2004-03-10 00:00:00 1899-12-31 23:00:00 1.2 1197
## 7 2004-03-11 00:00:00 1899-12-31 00:00:00 1.2 1185
## 8 2004-03-11 00:00:00 1899-12-31 01:00:00 1 1136.
## 9 2004-03-11 00:00:00 1899-12-31 02:00:00 0.9 1094
## 10 2004-03-11 00:00:00 1899-12-31 03:00:00 0.6 1010.
## # ℹ 11 more variables: `NMHC(GT) (X5)` <dbl>, `C6H6(GT) (X6)` <dbl>,
## # `PT08.S2(NMHC) (X7)` <dbl>, `NOx(GT) (X8)` <dbl>,
## # `PT08.S3(NOx) (X9)` <dbl>, `NO2(GT) (X10)` <dbl>,
## # `PT08.S4(NO2) (X11)` <dbl>, `PT08.S5(O3) (X12)` <dbl>, `T (X13)` <dbl>,
## # `RH (X14)` <dbl>, `AH (X15)` <dbl>
a. Melihat Tipe Data
sapply(AirQualityUCI, class)
## $`Date (X1)`
## [1] "POSIXct" "POSIXt"
##
## $`Time (X2)`
## [1] "POSIXct" "POSIXt"
##
## $`CO(GT) (X3)`
## [1] "numeric"
##
## $`PT08.S1(CO) (X4)`
## [1] "numeric"
##
## $`NMHC(GT) (X5)`
## [1] "numeric"
##
## $`C6H6(GT) (X6)`
## [1] "numeric"
##
## $`PT08.S2(NMHC) (X7)`
## [1] "numeric"
##
## $`NOx(GT) (X8)`
## [1] "numeric"
##
## $`PT08.S3(NOx) (X9)`
## [1] "numeric"
##
## $`NO2(GT) (X10)`
## [1] "numeric"
##
## $`PT08.S4(NO2) (X11)`
## [1] "numeric"
##
## $`PT08.S5(O3) (X12)`
## [1] "numeric"
##
## $`T (X13)`
## [1] "numeric"
##
## $`RH (X14)`
## [1] "numeric"
##
## $`AH (X15)`
## [1] "numeric"
b. Cek Missing Value
colSums(is.na(AirQualityUCI))
## Date (X1) Time (X2) CO(GT) (X3) PT08.S1(CO) (X4)
## 0 0 0 0
## NMHC(GT) (X5) C6H6(GT) (X6) PT08.S2(NMHC) (X7) NOx(GT) (X8)
## 0 0 0 0
## PT08.S3(NOx) (X9) NO2(GT) (X10) PT08.S4(NO2) (X11) PT08.S5(O3) (X12)
## 0 0 0 0
## T (X13) RH (X14) AH (X15)
## 0 0 0
c. Melihat Dimensi Data (Jumlah Baris dan Kolom)
dim(AirQualityUCI)
## [1] 9357 15
a. Memilih hanya kolom numerik (float dan integer) - Menampilkan nama variabel yang dipilih
data_numerik <- AirQualityUCI[, sapply(AirQualityUCI, is.numeric)]
colnames(data_numerik)
## [1] "CO(GT) (X3)" "PT08.S1(CO) (X4)" "NMHC(GT) (X5)"
## [4] "C6H6(GT) (X6)" "PT08.S2(NMHC) (X7)" "NOx(GT) (X8)"
## [7] "PT08.S3(NOx) (X9)" "NO2(GT) (X10)" "PT08.S4(NO2) (X11)"
## [10] "PT08.S5(O3) (X12)" "T (X13)" "RH (X14)"
## [13] "AH (X15)"
b. Standarisasi Data - Standarisasi data: Mean = 0, Standard Deviation = 1 - Konversi kembali ke data frame
data_standarisasi <- scale(data_numerik)
data_standarisasi <- as.data.frame(data_standarisasi)
head(data_standarisasi)
## CO(GT) (X3) PT08.S1(CO) (X4) NMHC(GT) (X5) C6H6(GT) (X6) PT08.S2(NMHC) (X7)
## 1 0.4739746 0.9433423 2.211117 0.2420520 0.4411832
## 2 0.4662483 0.7379254 1.939279 0.1820097 0.1760772
## 3 0.4688237 1.0706857 1.767592 0.1723590 0.1307974
## 4 0.4688237 0.9903381 1.710363 0.1779409 0.1570889
## 5 0.4610975 0.6772857 1.502908 0.1124367 -0.1722852
## 6 0.4559466 0.4491289 1.409910 0.0694883 -0.4213242
## NOx(GT) (X8) PT08.S3(NOx) (X9) NO2(GT) (X10) PT08.S4(NO2) (X11)
## 1 -0.01011636 0.8117898 0.4322342 0.64349665
## 2 -0.25484825 1.1767227 0.2667905 0.35828224
## 3 -0.14607852 1.0719015 0.4401124 0.34918535
## 4 0.01319144 0.9228226 0.5031386 0.41179339
## 5 -0.14607852 1.2737793 0.4558690 0.21112659
## 6 -0.30923312 1.6821935 0.2983036 0.00350334
## PT08.S5(O3) (X12) T (X13) RH (X14) AH (X15)
## 1 0.640258076 0.08849760 0.1833696 0.1948693
## 2 -0.005912452 0.08155371 0.1604273 0.1940415
## 3 0.216772904 0.04914888 0.2829485 0.1946765
## 4 0.499643490 0.02831720 0.4005883 0.1956123
## 5 0.295560843 0.03178915 0.3922901 0.1956657
## 6 -0.056249191 0.03236781 0.3844800 0.1955625
a. Membuat Matriks Korelasi
cor_matrix <- cor(data_standarisasi)
cor_matrix
## CO(GT) (X3) PT08.S1(CO) (X4) NMHC(GT) (X5) C6H6(GT) (X6)
## CO(GT) (X3) 1.00000000 0.04141486 1.283512e-01 -0.031377278
## PT08.S1(CO) (X4) 0.04141486 1.00000000 1.700092e-01 0.852658739
## NMHC(GT) (X5) 0.12835117 0.17000923 1.000000e+00 0.037328920
## C6H6(GT) (X6) -0.03137728 0.85265874 3.732892e-02 1.000000000
## PT08.S2(NMHC) (X7) 0.02993938 0.93310134 1.100973e-01 0.767400548
## NOx(GT) (X8) 0.52645032 0.27802887 -4.412891e-03 -0.001162976
## PT08.S3(NOx) (X9) -0.08998059 0.08693118 4.883223e-02 0.512154487
## NO2(GT) (X10) 0.67113955 0.15405777 1.033448e-01 -0.010971438
## PT08.S4(NO2) (X11) -0.07372055 0.84513309 1.626894e-01 0.774649129
## PT08.S5(O3) (X12) 0.08031560 0.89243569 1.011892e-01 0.641305687
## T (X13) -0.06895175 0.75480579 -7.577685e-06 0.971370209
## RH (X14) -0.04823058 0.74534354 8.287924e-03 0.925067595
## AH (X15) -0.04589222 0.76486567 1.250011e-02 0.984555673
## PT08.S2(NMHC) (X7) NOx(GT) (X8) PT08.S3(NOx) (X9)
## CO(GT) (X3) 0.02993938 0.526450315 -0.08998059
## PT08.S1(CO) (X4) 0.93310134 0.278028873 0.08693118
## NMHC(GT) (X5) 0.11009729 -0.004412891 0.04883223
## C6H6(GT) (X6) 0.76740055 -0.001162976 0.51215449
## PT08.S2(NMHC) (X7) 1.00000000 0.331330778 -0.07374833
## NOx(GT) (X8) 0.33133078 1.000000000 -0.43608280
## PT08.S3(NOx) (X9) -0.07374833 -0.436082800 1.00000000
## NO2(GT) (X10) 0.17656903 0.817137607 -0.25621745
## PT08.S4(NO2) (X11) 0.87476071 0.035579549 0.12267209
## PT08.S5(O3) (X12) 0.90990914 0.461915624 -0.20893460
## T (X13) 0.66898434 -0.138457415 0.58806103
## RH (X14) 0.58577531 -0.053008136 0.57351320
## AH (X15) 0.64653471 -0.095840633 0.62157636
## NO2(GT) (X10) PT08.S4(NO2) (X11) PT08.S5(O3) (X12)
## CO(GT) (X3) 0.67113955 -0.07372055 0.0803156
## PT08.S1(CO) (X4) 0.15405777 0.84513309 0.8924357
## NMHC(GT) (X5) 0.10334476 0.16268939 0.1011892
## C6H6(GT) (X6) -0.01097144 0.77464913 0.6413057
## PT08.S2(NMHC) (X7) 0.17656903 0.87476071 0.9099091
## NOx(GT) (X8) 0.81713761 0.03557955 0.4619156
## PT08.S3(NOx) (X9) -0.25621745 0.12267209 -0.2089346
## NO2(GT) (X10) 1.00000000 -0.02209248 0.2534693
## PT08.S4(NO2) (X11) -0.02209248 1.00000000 0.7236700
## PT08.S5(O3) (X12) 0.25346934 0.72367002 1.0000000
## T (X13) -0.08408449 0.75505285 0.5036591
## RH (X14) -0.08129972 0.64068549 0.5249216
## AH (X15) -0.06042311 0.69188886 0.5194315
## T (X13) RH (X14) AH (X15)
## CO(GT) (X3) -6.895175e-02 -0.048230582 -0.04589222
## PT08.S1(CO) (X4) 7.548058e-01 0.745343536 0.76486567
## NMHC(GT) (X5) -7.577685e-06 0.008287924 0.01250011
## C6H6(GT) (X6) 9.713702e-01 0.925067595 0.98455567
## PT08.S2(NMHC) (X7) 6.689843e-01 0.585775310 0.64653471
## NOx(GT) (X8) -1.384574e-01 -0.053008136 -0.09584063
## PT08.S3(NOx) (X9) 5.880610e-01 0.573513202 0.62157636
## NO2(GT) (X10) -8.408449e-02 -0.081299722 -0.06042311
## PT08.S4(NO2) (X11) 7.550529e-01 0.640685489 0.69188886
## PT08.S5(O3) (X12) 5.036591e-01 0.524921583 0.51943155
## T (X13) 1.000000e+00 0.885909850 0.98099773
## RH (X14) 8.859098e-01 1.000000000 0.94399717
## AH (X15) 9.809977e-01 0.943997165 1.00000000
b. Uji Bartlett’s Test of Sphericity Hipotesis - H₀: Tidak ada korelasi yang signifikan antara variabel, sehingga data tidak cocok untuk analisis faktor (matriks korelasi adalah matriks identitas). - H₁: Ada korelasi yang signifikan antara variabel, sehingga data cocok untuk analisis faktor.
Statistik Uji: - Menggunakan Bartlett’s Test of Sphericity
Kriteria Uji: - Tolak H₀ jika χ²hitung > χ²tabel, yang menunjukkan bahwa terdapat korelasi antar variabel, sehingga analisis faktor dapat dilakukan.
bartlett_test <- bart_spher(data_standarisasi)
bartlett_test
## Bartlett's Test of Sphericity
##
## Call: bart_spher(x = data_standarisasi)
##
## X2 = 247643.199
## df = 78
## p-value < 2.22e-16
Diperoleh: - Nilai Chi-Square (χ²) = 247643.199 - Derajat kebebasan (df) = 78 - χ²tabel = 99.617
Kesimpulan: Karena χ² hitung (247643.199) > dari χ² tabel (99.617), maka kita menolak H₀, yang berarti terdapat korelasi yang signifikan antara variabel dalam dataset. Ini menunjukkan bahwa data layak untuk analisis faktor, karena matriks korelasi bukan merupakan matriks identitas.
c. Uji Kaiser-Meyer-Olkin (KMO) Hipotesis - H₀: Sampel tidak cukup untuk analisis faktor (korelasi antar variabel tidak cukup kuat). - H₁: Sampel cukup untuk analisis faktor (korelasi antar variabel cukup kuat).
Statistik Uji: - Statistik uji yang digunakan adalah Kaiser-Meyer-Olkin (KMO), yang mengukur kelayakan data untuk analisis faktor. Nilai KMO berkisar antara 0 hingga 1.
Kriteria Uji: - Jika KMO > 0.60, maka data cukup layak untuk analisis faktor, sehingga tolak H₀ dan terima H₁. - Jika KMO ≤ 0.60, maka data tidak layak untuk analisis faktor, sehingga terima H₀ dan tolak H₁.
KMOS(data_standarisasi)
##
## Kaiser-Meyer-Olkin Statistics
##
## Call: KMOS(x = data_standarisasi)
##
## Measures of Sampling Adequacy (MSA):
## CO(GT) (X3) PT08.S1(CO) (X4) NMHC(GT) (X5) C6H6(GT) (X6)
## 0.8331261 0.9358076 0.1850667 0.7425467
## PT08.S2(NMHC) (X7) NOx(GT) (X8) PT08.S3(NOx) (X9) NO2(GT) (X10)
## 0.7463749 0.5869458 0.6638755 0.5473007
## PT08.S4(NO2) (X11) PT08.S5(O3) (X12) T (X13) RH (X14)
## 0.6852467 0.9300791 0.7014979 0.6915617
## AH (X15)
## 0.6741881
##
## KMO-Criterion: 0.725354
Kesimpulan: Dari hasil yang diperoleh, nilai KMO = 0.725354, yang berada dalam kategori cukup baik untuk analisis faktor. Karena KMO lebih besar dari 0.60, maka H₀ ditolak dan H₁ diterima. Kesimpulannya, data ini cukup layak untuk analisis faktor, meskipun ada beberapa variabel yang memiliki nilai KMO lebih rendah dan mungkin perlu dipertimbangkan kembali.
d. Measures of Sampling Adequacy (MSA) - Menghitung nilai KMO dan MSA
kmo_result <- KMOS(data_standarisasi)
msa_values <- kmo_result$MSA
msa_values
## CO(GT) (X3) PT08.S1(CO) (X4) NMHC(GT) (X5) C6H6(GT) (X6)
## 0.8331261 0.9358076 0.1850667 0.7425467
## PT08.S2(NMHC) (X7) NOx(GT) (X8) PT08.S3(NOx) (X9) NO2(GT) (X10)
## 0.7463749 0.5869458 0.6638755 0.5473007
## PT08.S4(NO2) (X11) PT08.S5(O3) (X12) T (X13) RH (X14)
## 0.6852467 0.9300791 0.7014979 0.6915617
## AH (X15)
## 0.6741881
selected_columns <- names(msa_values[msa_values > 0.5])
data_filter <- data_standarisasi[, selected_columns]
cat("Variabel setelah eliminasi (MSA > 0.5):", selected_columns, "\n")
## Variabel setelah eliminasi (MSA > 0.5): CO(GT) (X3) PT08.S1(CO) (X4) C6H6(GT) (X6) PT08.S2(NMHC) (X7) NOx(GT) (X8) PT08.S3(NOx) (X9) NO2(GT) (X10) PT08.S4(NO2) (X11) PT08.S5(O3) (X12) T (X13) RH (X14) AH (X15)
kmo_filtered <- KMOS(data_filter)
msa_values_filtered <- kmo_result$MSA
cat("Nilai MSA setelah eliminasi:\n")
## Nilai MSA setelah eliminasi:
print(msa_values_filtered)
## CO(GT) (X3) PT08.S1(CO) (X4) NMHC(GT) (X5) C6H6(GT) (X6)
## 0.8331261 0.9358076 0.1850667 0.7425467
## PT08.S2(NMHC) (X7) NOx(GT) (X8) PT08.S3(NOx) (X9) NO2(GT) (X10)
## 0.7463749 0.5869458 0.6638755 0.5473007
## PT08.S4(NO2) (X11) PT08.S5(O3) (X12) T (X13) RH (X14)
## 0.6852467 0.9300791 0.7014979 0.6915617
## AH (X15)
## 0.6741881
e. Membuat Matriks Korelasi Setelah Eliminasi Variabel yang Tidak Layak - Memilih variabel dengan MSA > 0.5 - Membuat matriks korelasi baru
data_filtered <- data_standarisasi[, msa_values > 0.5]
cor_filtered <- cor(data_filtered)
cor_filtered
## CO(GT) (X3) PT08.S1(CO) (X4) C6H6(GT) (X6)
## CO(GT) (X3) 1.00000000 0.04141486 -0.031377278
## PT08.S1(CO) (X4) 0.04141486 1.00000000 0.852658739
## C6H6(GT) (X6) -0.03137728 0.85265874 1.000000000
## PT08.S2(NMHC) (X7) 0.02993938 0.93310134 0.767400548
## NOx(GT) (X8) 0.52645032 0.27802887 -0.001162976
## PT08.S3(NOx) (X9) -0.08998059 0.08693118 0.512154487
## NO2(GT) (X10) 0.67113955 0.15405777 -0.010971438
## PT08.S4(NO2) (X11) -0.07372055 0.84513309 0.774649129
## PT08.S5(O3) (X12) 0.08031560 0.89243569 0.641305687
## T (X13) -0.06895175 0.75480579 0.971370209
## RH (X14) -0.04823058 0.74534354 0.925067595
## AH (X15) -0.04589222 0.76486567 0.984555673
## PT08.S2(NMHC) (X7) NOx(GT) (X8) PT08.S3(NOx) (X9)
## CO(GT) (X3) 0.02993938 0.526450315 -0.08998059
## PT08.S1(CO) (X4) 0.93310134 0.278028873 0.08693118
## C6H6(GT) (X6) 0.76740055 -0.001162976 0.51215449
## PT08.S2(NMHC) (X7) 1.00000000 0.331330778 -0.07374833
## NOx(GT) (X8) 0.33133078 1.000000000 -0.43608280
## PT08.S3(NOx) (X9) -0.07374833 -0.436082800 1.00000000
## NO2(GT) (X10) 0.17656903 0.817137607 -0.25621745
## PT08.S4(NO2) (X11) 0.87476071 0.035579549 0.12267209
## PT08.S5(O3) (X12) 0.90990914 0.461915624 -0.20893460
## T (X13) 0.66898434 -0.138457415 0.58806103
## RH (X14) 0.58577531 -0.053008136 0.57351320
## AH (X15) 0.64653471 -0.095840633 0.62157636
## NO2(GT) (X10) PT08.S4(NO2) (X11) PT08.S5(O3) (X12)
## CO(GT) (X3) 0.67113955 -0.07372055 0.0803156
## PT08.S1(CO) (X4) 0.15405777 0.84513309 0.8924357
## C6H6(GT) (X6) -0.01097144 0.77464913 0.6413057
## PT08.S2(NMHC) (X7) 0.17656903 0.87476071 0.9099091
## NOx(GT) (X8) 0.81713761 0.03557955 0.4619156
## PT08.S3(NOx) (X9) -0.25621745 0.12267209 -0.2089346
## NO2(GT) (X10) 1.00000000 -0.02209248 0.2534693
## PT08.S4(NO2) (X11) -0.02209248 1.00000000 0.7236700
## PT08.S5(O3) (X12) 0.25346934 0.72367002 1.0000000
## T (X13) -0.08408449 0.75505285 0.5036591
## RH (X14) -0.08129972 0.64068549 0.5249216
## AH (X15) -0.06042311 0.69188886 0.5194315
## T (X13) RH (X14) AH (X15)
## CO(GT) (X3) -0.06895175 -0.04823058 -0.04589222
## PT08.S1(CO) (X4) 0.75480579 0.74534354 0.76486567
## C6H6(GT) (X6) 0.97137021 0.92506759 0.98455567
## PT08.S2(NMHC) (X7) 0.66898434 0.58577531 0.64653471
## NOx(GT) (X8) -0.13845741 -0.05300814 -0.09584063
## PT08.S3(NOx) (X9) 0.58806103 0.57351320 0.62157636
## NO2(GT) (X10) -0.08408449 -0.08129972 -0.06042311
## PT08.S4(NO2) (X11) 0.75505285 0.64068549 0.69188886
## PT08.S5(O3) (X12) 0.50365905 0.52492158 0.51943155
## T (X13) 1.00000000 0.88590985 0.98099773
## RH (X14) 0.88590985 1.00000000 0.94399717
## AH (X15) 0.98099773 0.94399717 1.00000000
f. Analisis Faktor Menggunakan Metode PCA
fa_result <- principal(data_filtered, nfactors = ncol(data_filtered), rotate = "none")
fa_result
## Principal Components Analysis
## Call: principal(r = data_filtered, nfactors = ncol(data_filtered),
## rotate = "none")
## Standardized loadings (pattern matrix) based upon correlation matrix
## PC1 PC2 PC3 PC4 PC5 PC6 PC7 PC8 PC9 PC10
## CO(GT) (X3) -0.01 0.62 0.63 0.45 -0.16 0.02 -0.01 -0.02 0.00 0.00
## PT08.S1(CO) (X4) 0.93 0.24 -0.17 0.00 -0.07 0.02 -0.04 0.07 -0.17 0.06
## C6H6(GT) (X6) 0.98 -0.13 0.13 -0.04 -0.01 -0.04 -0.04 -0.06 0.00 -0.02
## PT08.S2(NMHC) (X7) 0.87 0.34 -0.31 0.07 0.06 0.05 -0.08 -0.08 -0.02 -0.12
## NOx(GT) (X8) 0.10 0.91 0.14 -0.30 -0.03 0.14 0.10 -0.14 0.00 0.03
## PT08.S3(NOx) (X9) 0.37 -0.66 0.59 -0.09 0.08 0.25 -0.07 0.06 0.00 -0.01
## NO2(GT) (X10) 0.04 0.83 0.44 -0.15 0.26 -0.13 -0.04 0.12 0.00 -0.02
## PT08.S4(NO2) (X11) 0.86 0.06 -0.28 0.26 0.25 0.09 0.17 0.05 0.03 0.02
## PT08.S5(O3) (X12) 0.77 0.48 -0.33 -0.05 -0.17 0.06 -0.12 0.11 0.12 0.03
## T (X13) 0.93 -0.26 0.17 0.03 0.10 -0.10 -0.04 -0.11 0.04 0.07
## RH (X14) 0.89 -0.23 0.21 -0.13 -0.20 -0.07 0.19 0.09 0.01 -0.05
## AH (X15) 0.93 -0.25 0.23 -0.06 -0.02 -0.09 -0.03 -0.05 0.01 0.01
## PC11 PC12 h2 u2 com
## CO(GT) (X3) 0.00 0.00 1 2.2e-16 2.9
## PT08.S1(CO) (X4) 0.00 0.00 1 -8.9e-16 1.3
## C6H6(GT) (X6) -0.03 -0.01 1 2.3e-15 1.1
## PT08.S2(NMHC) (X7) 0.01 0.00 1 4.4e-16 1.7
## NOx(GT) (X8) 0.00 0.00 1 2.3e-15 1.4
## PT08.S3(NOx) (X9) 0.00 0.00 1 1.8e-15 3.0
## NO2(GT) (X10) 0.00 0.00 1 2.6e-15 2.0
## PT08.S4(NO2) (X11) -0.01 0.00 1 6.7e-16 1.7
## PT08.S5(O3) (X12) 0.00 0.00 1 -2.2e-16 2.4
## T (X13) 0.03 0.00 1 8.9e-16 1.3
## RH (X14) 0.01 0.00 1 3.3e-16 1.6
## AH (X15) -0.02 0.01 1 1.1e-16 1.3
##
## PC1 PC2 PC3 PC4 PC5 PC6 PC7 PC8 PC9 PC10 PC11
## SS loadings 6.58 2.93 1.41 0.42 0.25 0.14 0.11 0.09 0.05 0.03 0
## Proportion Var 0.55 0.24 0.12 0.03 0.02 0.01 0.01 0.01 0.00 0.00 0
## Cumulative Var 0.55 0.79 0.91 0.94 0.97 0.98 0.99 0.99 1.00 1.00 1
## Proportion Explained 0.55 0.24 0.12 0.03 0.02 0.01 0.01 0.01 0.00 0.00 0
## Cumulative Proportion 0.55 0.79 0.91 0.94 0.97 0.98 0.99 0.99 1.00 1.00 1
## PC12
## SS loadings 0
## Proportion Var 0
## Cumulative Var 1
## Proportion Explained 0
## Cumulative Proportion 1
##
## Mean item complexity = 1.8
## Test of the hypothesis that 12 components are sufficient.
##
## The root mean square of the residuals (RMSR) is 0
## with the empirical chi square 0 with prob < NA
##
## Fit based upon off diagonal values = 1
g. Menentukan Banyak Faktor
1) Berdasarkan Nilai Eigen - Jika eigenvalue > 1, faktor tersebut dipilih.
eigen_values <- eigen(cor_filtered)$values
cat("\nNilai Eigen:\n")
##
## Nilai Eigen:
print(eigen_values)
## [1] 6.5764587952 2.9334760118 1.4080870725 0.4169728166 0.2545136896
## [6] 0.1360942089 0.1061640781 0.0906465116 0.0462965852 0.0282252117
## [11] 0.0026907944 0.0003742243
2) Berdasarkan Scree Plot
plot(1:length(eigen_values), eigen_values, type = "b",
main = "Scree Plot",
xlab = "Komponen Faktor",
ylab = "Eigen Value",
pch = 19, col = "blue")
abline(h = 1, col = "red", lty = 2) # Menambahkan garis batas Kaiser (Eigen > 1)
3) Rotasi Faktor Loading - Melakukan rotasi Varimax - Menentukan jumlah faktor yang sesuai
num_factors <- sum(eigen_values > 1)
fa_rotated <- factanal(data_filtered, factors = num_factors, rotation = "varimax")
cat("\nAnalisis Faktor Rotasi:\n")
##
## Analisis Faktor Rotasi:
fa_rotated
##
## Call:
## factanal(x = data_filtered, factors = num_factors, rotation = "varimax")
##
## Uniquenesses:
## CO(GT) (X3) PT08.S1(CO) (X4) C6H6(GT) (X6) PT08.S2(NMHC) (X7)
## 0.631 0.075 0.005 0.005
## NOx(GT) (X8) PT08.S3(NOx) (X9) NO2(GT) (X10) PT08.S4(NO2) (X11)
## 0.041 0.206 0.276 0.157
## PT08.S5(O3) (X12) T (X13) RH (X14) AH (X15)
## 0.134 0.030 0.108 0.005
##
## Loadings:
## Factor1 Factor2 Factor3
## CO(GT) (X3) 0.605
## PT08.S1(CO) (X4) 0.878 0.364 0.148
## C6H6(GT) (X6) 0.661 0.749
## PT08.S2(NMHC) (X7) 0.976 0.164 0.127
## NOx(GT) (X8) 0.257 -0.221 0.919
## PT08.S3(NOx) (X9) -0.189 0.842 -0.222
## NO2(GT) (X10) 0.844
## PT08.S4(NO2) (X11) 0.866 0.274 -0.135
## PT08.S5(O3) (X12) 0.886 0.274
## T (X13) 0.566 0.797 -0.117
## RH (X14) 0.466 0.821
## AH (X15) 0.527 0.847
##
## Factor1 Factor2 Factor3
## SS loadings 4.623 3.591 2.119
## Proportion Var 0.385 0.299 0.177
## Cumulative Var 0.385 0.684 0.861
##
## Test of the hypothesis that 3 factors are sufficient.
## The chi square statistic is 41408.26 on 33 degrees of freedom.
## The p-value is 0