1. DATA DESCRIBE

df <- read.csv("energydata_complete.csv")
head(df)
##                  date Appliances lights    T1     RH_1   T2     RH_2    T3
## 1 2016-01-11 17:00:00         60     30 19.89 47.59667 19.2 44.79000 19.79
## 2 2016-01-11 17:10:00         60     30 19.89 46.69333 19.2 44.72250 19.79
## 3 2016-01-11 17:20:00         50     30 19.89 46.30000 19.2 44.62667 19.79
## 4 2016-01-11 17:30:00         50     40 19.89 46.06667 19.2 44.59000 19.79
## 5 2016-01-11 17:40:00         60     40 19.89 46.33333 19.2 44.53000 19.79
## 6 2016-01-11 17:50:00         50     40 19.89 46.02667 19.2 44.50000 19.79
##       RH_3       T4     RH_4       T5  RH_5       T6     RH_6       T7     RH_7
## 1 44.73000 19.00000 45.56667 17.16667 55.20 7.026667 84.25667 17.20000 41.62667
## 2 44.79000 19.00000 45.99250 17.16667 55.20 6.833333 84.06333 17.20000 41.56000
## 3 44.93333 18.92667 45.89000 17.16667 55.09 6.560000 83.15667 17.20000 41.43333
## 4 45.00000 18.89000 45.72333 17.16667 55.09 6.433333 83.42333 17.13333 41.29000
## 5 45.00000 18.89000 45.53000 17.20000 55.09 6.366667 84.89333 17.20000 41.23000
## 6 44.93333 18.89000 45.73000 17.13333 55.03 6.300000 85.76667 17.13333 41.26000
##     T8     RH_8       T9  RH_9    T_out Press_mm_hg RH_out Windspeed Visibility
## 1 18.2 48.90000 17.03333 45.53 6.600000       733.5     92  7.000000   63.00000
## 2 18.2 48.86333 17.06667 45.56 6.483333       733.6     92  6.666667   59.16667
## 3 18.2 48.73000 17.00000 45.50 6.366667       733.7     92  6.333333   55.33333
## 4 18.1 48.59000 17.00000 45.40 6.250000       733.8     92  6.000000   51.50000
## 5 18.1 48.59000 17.00000 45.40 6.133333       733.9     92  5.666667   47.66667
## 6 18.1 48.59000 17.00000 45.29 6.016667       734.0     92  5.333333   43.83333
##   Tdewpoint      rv1      rv2
## 1       5.3 13.27543 13.27543
## 2       5.2 18.60619 18.60619
## 3       5.1 28.64267 28.64267
## 4       5.0 45.41039 45.41039
## 5       4.9 10.08410 10.08410
## 6       4.8 44.91948 44.91948
str(df)
## 'data.frame':    19735 obs. of  29 variables:
##  $ date       : chr  "2016-01-11 17:00:00" "2016-01-11 17:10:00" "2016-01-11 17:20:00" "2016-01-11 17:30:00" ...
##  $ Appliances : int  60 60 50 50 60 50 60 60 60 70 ...
##  $ lights     : int  30 30 30 40 40 40 50 50 40 40 ...
##  $ T1         : num  19.9 19.9 19.9 19.9 19.9 ...
##  $ RH_1       : num  47.6 46.7 46.3 46.1 46.3 ...
##  $ T2         : num  19.2 19.2 19.2 19.2 19.2 ...
##  $ RH_2       : num  44.8 44.7 44.6 44.6 44.5 ...
##  $ T3         : num  19.8 19.8 19.8 19.8 19.8 ...
##  $ RH_3       : num  44.7 44.8 44.9 45 45 ...
##  $ T4         : num  19 19 18.9 18.9 18.9 ...
##  $ RH_4       : num  45.6 46 45.9 45.7 45.5 ...
##  $ T5         : num  17.2 17.2 17.2 17.2 17.2 ...
##  $ RH_5       : num  55.2 55.2 55.1 55.1 55.1 ...
##  $ T6         : num  7.03 6.83 6.56 6.43 6.37 ...
##  $ RH_6       : num  84.3 84.1 83.2 83.4 84.9 ...
##  $ T7         : num  17.2 17.2 17.2 17.1 17.2 ...
##  $ RH_7       : num  41.6 41.6 41.4 41.3 41.2 ...
##  $ T8         : num  18.2 18.2 18.2 18.1 18.1 18.1 18.1 18.1 18.1 18.1 ...
##  $ RH_8       : num  48.9 48.9 48.7 48.6 48.6 ...
##  $ T9         : num  17 17.1 17 17 17 ...
##  $ RH_9       : num  45.5 45.6 45.5 45.4 45.4 ...
##  $ T_out      : num  6.6 6.48 6.37 6.25 6.13 ...
##  $ Press_mm_hg: num  734 734 734 734 734 ...
##  $ RH_out     : num  92 92 92 92 92 ...
##  $ Windspeed  : num  7 6.67 6.33 6 5.67 ...
##  $ Visibility : num  63 59.2 55.3 51.5 47.7 ...
##  $ Tdewpoint  : num  5.3 5.2 5.1 5 4.9 ...
##  $ rv1        : num  13.3 18.6 28.6 45.4 10.1 ...
##  $ rv2        : num  13.3 18.6 28.6 45.4 10.1 ...

Memastikan variabel yang dipilih numerik

df_numeric17 <- df[, c(
  "T_out","T1","RH_1","T2","RH_6","T3",
  "RH_3","T4","RH_4","T6","RH_5","T7","RH_7",
  "T8","RH_9","Press_mm_hg","Windspeed"
)]
str(df_numeric17)
## 'data.frame':    19735 obs. of  17 variables:
##  $ T_out      : num  6.6 6.48 6.37 6.25 6.13 ...
##  $ T1         : num  19.9 19.9 19.9 19.9 19.9 ...
##  $ RH_1       : num  47.6 46.7 46.3 46.1 46.3 ...
##  $ T2         : num  19.2 19.2 19.2 19.2 19.2 ...
##  $ RH_6       : num  84.3 84.1 83.2 83.4 84.9 ...
##  $ T3         : num  19.8 19.8 19.8 19.8 19.8 ...
##  $ RH_3       : num  44.7 44.8 44.9 45 45 ...
##  $ T4         : num  19 19 18.9 18.9 18.9 ...
##  $ RH_4       : num  45.6 46 45.9 45.7 45.5 ...
##  $ T6         : num  7.03 6.83 6.56 6.43 6.37 ...
##  $ RH_5       : num  55.2 55.2 55.1 55.1 55.1 ...
##  $ T7         : num  17.2 17.2 17.2 17.1 17.2 ...
##  $ RH_7       : num  41.6 41.6 41.4 41.3 41.2 ...
##  $ T8         : num  18.2 18.2 18.2 18.1 18.1 18.1 18.1 18.1 18.1 18.1 ...
##  $ RH_9       : num  45.5 45.6 45.5 45.4 45.4 ...
##  $ Press_mm_hg: num  734 734 734 734 734 ...
##  $ Windspeed  : num  7 6.67 6.33 6 5.67 ...
head(df_numeric17)
##      T_out    T1     RH_1   T2     RH_6    T3     RH_3       T4     RH_4
## 1 6.600000 19.89 47.59667 19.2 84.25667 19.79 44.73000 19.00000 45.56667
## 2 6.483333 19.89 46.69333 19.2 84.06333 19.79 44.79000 19.00000 45.99250
## 3 6.366667 19.89 46.30000 19.2 83.15667 19.79 44.93333 18.92667 45.89000
## 4 6.250000 19.89 46.06667 19.2 83.42333 19.79 45.00000 18.89000 45.72333
## 5 6.133333 19.89 46.33333 19.2 84.89333 19.79 45.00000 18.89000 45.53000
## 6 6.016667 19.89 46.02667 19.2 85.76667 19.79 44.93333 18.89000 45.73000
##         T6  RH_5       T7     RH_7   T8  RH_9 Press_mm_hg Windspeed
## 1 7.026667 55.20 17.20000 41.62667 18.2 45.53       733.5  7.000000
## 2 6.833333 55.20 17.20000 41.56000 18.2 45.56       733.6  6.666667
## 3 6.560000 55.09 17.20000 41.43333 18.2 45.50       733.7  6.333333
## 4 6.433333 55.09 17.13333 41.29000 18.1 45.40       733.8  6.000000
## 5 6.366667 55.09 17.20000 41.23000 18.1 45.40       733.9  5.666667
## 6 6.300000 55.03 17.13333 41.26000 18.1 45.29       734.0  5.333333

2. Cek missing value

Data tidak memiliki missing value

colSums(is.na(df_numeric17))
##       T_out          T1        RH_1          T2        RH_6          T3 
##           0           0           0           0           0           0 
##        RH_3          T4        RH_4          T6        RH_5          T7 
##           0           0           0           0           0           0 
##        RH_7          T8        RH_9 Press_mm_hg   Windspeed 
##           0           0           0           0           0

3. Karakteristik data

describe(df_numeric17)
##             vars     n   mean    sd median trimmed   mad    min    max range
## T_out          1 19735   7.41  5.32   6.92    7.12  5.02  -5.00  26.10 31.10
## T1             2 19735  21.69  1.61  21.60   21.65  1.33  16.79  26.26  9.47
## RH_1           3 19735  40.26  3.98  39.66   40.07  4.01  27.02  63.36 36.34
## T2             4 19735  20.34  2.19  20.00   20.15  1.93  16.10  29.86 13.76
## RH_6           5 19735  54.61 31.15  55.29   55.83 40.06   1.00  99.90 98.90
## T3             6 19735  22.27  2.01  22.10   22.15  1.91  17.20  29.24 12.04
## RH_3           7 19735  39.24  3.25  38.53   39.07  3.05  28.77  50.16 21.40
## T4             8 19735  20.86  2.04  20.67   20.81  1.89  15.10  26.20 11.10
## RH_4           9 19735  39.03  4.34  38.40   38.79  4.70  27.66  51.09 23.43
## T6            10 19735   7.91  6.09   7.30    7.52  5.62  -6.07  28.29 34.35
## RH_5          11 19735  50.95  9.02  49.09   49.59  5.93  29.82  96.32 66.51
## T7            12 19735  20.27  2.11  20.03   20.20  2.13  15.39  26.00 10.61
## RH_7          13 19735  35.39  5.11  34.86   35.26  5.47  23.20  51.40 28.20
## T8            14 19735  22.03  1.96  22.10   22.09  1.91  16.31  27.23 10.92
## RH_9          15 19735  41.55  4.15  40.90   41.37  4.11  29.17  53.33 24.16
## Press_mm_hg   16 19735 755.52  7.40 756.10  755.86  7.46 729.30 772.30 43.00
## Windspeed     17 19735   4.04  2.45   3.67    3.78  2.47   0.00  14.00 14.00
##              skew kurtosis   se
## T_out        0.53     0.36 0.04
## T1           0.12     0.16 0.01
## RH_1         0.47     0.11 0.03
## T2           0.89     0.93 0.02
## RH_6        -0.24    -1.14 0.22
## T3           0.45    -0.01 0.01
## RH_3         0.47    -0.58 0.02
## T4           0.17    -0.04 0.01
## RH_4         0.44    -0.61 0.03
## T6           0.60     0.42 0.04
## RH_5         1.87     4.50 0.06
## T7           0.25    -0.46 0.02
## RH_7         0.24    -0.55 0.04
## T8          -0.26    -0.16 0.01
## RH_9         0.37    -0.41 0.03
## Press_mm_hg -0.42     0.07 0.05
## Windspeed    0.86     0.25 0.02
head(df)
##                  date Appliances lights    T1     RH_1   T2     RH_2    T3
## 1 2016-01-11 17:00:00         60     30 19.89 47.59667 19.2 44.79000 19.79
## 2 2016-01-11 17:10:00         60     30 19.89 46.69333 19.2 44.72250 19.79
## 3 2016-01-11 17:20:00         50     30 19.89 46.30000 19.2 44.62667 19.79
## 4 2016-01-11 17:30:00         50     40 19.89 46.06667 19.2 44.59000 19.79
## 5 2016-01-11 17:40:00         60     40 19.89 46.33333 19.2 44.53000 19.79
## 6 2016-01-11 17:50:00         50     40 19.89 46.02667 19.2 44.50000 19.79
##       RH_3       T4     RH_4       T5  RH_5       T6     RH_6       T7     RH_7
## 1 44.73000 19.00000 45.56667 17.16667 55.20 7.026667 84.25667 17.20000 41.62667
## 2 44.79000 19.00000 45.99250 17.16667 55.20 6.833333 84.06333 17.20000 41.56000
## 3 44.93333 18.92667 45.89000 17.16667 55.09 6.560000 83.15667 17.20000 41.43333
## 4 45.00000 18.89000 45.72333 17.16667 55.09 6.433333 83.42333 17.13333 41.29000
## 5 45.00000 18.89000 45.53000 17.20000 55.09 6.366667 84.89333 17.20000 41.23000
## 6 44.93333 18.89000 45.73000 17.13333 55.03 6.300000 85.76667 17.13333 41.26000
##     T8     RH_8       T9  RH_9    T_out Press_mm_hg RH_out Windspeed Visibility
## 1 18.2 48.90000 17.03333 45.53 6.600000       733.5     92  7.000000   63.00000
## 2 18.2 48.86333 17.06667 45.56 6.483333       733.6     92  6.666667   59.16667
## 3 18.2 48.73000 17.00000 45.50 6.366667       733.7     92  6.333333   55.33333
## 4 18.1 48.59000 17.00000 45.40 6.250000       733.8     92  6.000000   51.50000
## 5 18.1 48.59000 17.00000 45.40 6.133333       733.9     92  5.666667   47.66667
## 6 18.1 48.59000 17.00000 45.29 6.016667       734.0     92  5.333333   43.83333
##   Tdewpoint      rv1      rv2
## 1       5.3 13.27543 13.27543
## 2       5.2 18.60619 18.60619
## 3       5.1 28.64267 28.64267
## 4       5.0 45.41039 45.41039
## 5       4.9 10.08410 10.08410
## 6       4.8 44.91948 44.91948
str(df)
## 'data.frame':    19735 obs. of  29 variables:
##  $ date       : chr  "2016-01-11 17:00:00" "2016-01-11 17:10:00" "2016-01-11 17:20:00" "2016-01-11 17:30:00" ...
##  $ Appliances : int  60 60 50 50 60 50 60 60 60 70 ...
##  $ lights     : int  30 30 30 40 40 40 50 50 40 40 ...
##  $ T1         : num  19.9 19.9 19.9 19.9 19.9 ...
##  $ RH_1       : num  47.6 46.7 46.3 46.1 46.3 ...
##  $ T2         : num  19.2 19.2 19.2 19.2 19.2 ...
##  $ RH_2       : num  44.8 44.7 44.6 44.6 44.5 ...
##  $ T3         : num  19.8 19.8 19.8 19.8 19.8 ...
##  $ RH_3       : num  44.7 44.8 44.9 45 45 ...
##  $ T4         : num  19 19 18.9 18.9 18.9 ...
##  $ RH_4       : num  45.6 46 45.9 45.7 45.5 ...
##  $ T5         : num  17.2 17.2 17.2 17.2 17.2 ...
##  $ RH_5       : num  55.2 55.2 55.1 55.1 55.1 ...
##  $ T6         : num  7.03 6.83 6.56 6.43 6.37 ...
##  $ RH_6       : num  84.3 84.1 83.2 83.4 84.9 ...
##  $ T7         : num  17.2 17.2 17.2 17.1 17.2 ...
##  $ RH_7       : num  41.6 41.6 41.4 41.3 41.2 ...
##  $ T8         : num  18.2 18.2 18.2 18.1 18.1 18.1 18.1 18.1 18.1 18.1 ...
##  $ RH_8       : num  48.9 48.9 48.7 48.6 48.6 ...
##  $ T9         : num  17 17.1 17 17 17 ...
##  $ RH_9       : num  45.5 45.6 45.5 45.4 45.4 ...
##  $ T_out      : num  6.6 6.48 6.37 6.25 6.13 ...
##  $ Press_mm_hg: num  734 734 734 734 734 ...
##  $ RH_out     : num  92 92 92 92 92 ...
##  $ Windspeed  : num  7 6.67 6.33 6 5.67 ...
##  $ Visibility : num  63 59.2 55.3 51.5 47.7 ...
##  $ Tdewpoint  : num  5.3 5.2 5.1 5 4.9 ...
##  $ rv1        : num  13.3 18.6 28.6 45.4 10.1 ...
##  $ rv2        : num  13.3 18.6 28.6 45.4 10.1 ...

4. Korelasi matriks

cor_matrix <- cor(df_numeric17)
dev.new(width = 12, height = 10)

corrplot(cor_matrix,
         method = "color",
         type = "upper",
         addCoef.col = "black",
         tl.col = "black",
         tl.cex = 0.6,
         tl.srt = 60,
         number.cex = 0.5)

5. Kaiser-Meyer-Olkin (KMO) Test

kmo_awal <- KMO(cor_matrix)
kmo_awal
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = cor_matrix)
## Overall MSA =  0.87
## MSA for each item = 
##       T_out          T1        RH_1          T2        RH_6          T3 
##        0.82        0.83        0.84        0.85        0.94        0.91 
##        RH_3          T4        RH_4          T6        RH_5          T7 
##        0.89        0.93        0.85        0.78        0.91        0.91 
##        RH_7          T8        RH_9 Press_mm_hg   Windspeed 
##        0.88        0.88        0.90        0.65        0.74
## Cek MSA per variabel
msa <- kmo_awal$MSAi
msa
##       T_out          T1        RH_1          T2        RH_6          T3 
##   0.8240907   0.8290688   0.8420932   0.8525562   0.9354439   0.9105668 
##        RH_3          T4        RH_4          T6        RH_5          T7 
##   0.8853338   0.9310322   0.8453031   0.7819708   0.9123548   0.9085413 
##        RH_7          T8        RH_9 Press_mm_hg   Windspeed 
##   0.8813463   0.8832419   0.9022824   0.6538605   0.7398809

8. Bartlett’s Test of Sphericity

cortest.bartlett(cor_matrix, n = nrow(df_numeric17))
## $chisq
## [1] 451361.7
## 
## $p.value
## [1] 0
## 
## $df
## [1] 136

9. STANDARISASI DATA

Output hasil pengecekan mean menunjukkan nilai yang sangat mendekati nol, sedangkan standar deviasi seluruh variabel bernilai satu. Hal ini membuktikan bahwa proses standardisasi berhasil.

data_scaled <- scale(df_numeric17)

colMeans(data_scaled)
##         T_out            T1          RH_1            T2          RH_6 
##  9.704114e-17  1.399967e-15  9.393367e-17 -8.144542e-17 -7.253438e-17 
##            T3          RH_3            T4          RH_4            T6 
##  9.448625e-16  1.427369e-17  1.104024e-15  7.960724e-16 -6.276825e-17 
##          RH_5            T7          RH_7            T8          RH_9 
## -4.641130e-17  1.667467e-15 -3.419878e-16  1.846047e-15  6.914675e-16 
##   Press_mm_hg     Windspeed 
##  1.531868e-15  1.379884e-16
apply(data_scaled, 2, sd)
##       T_out          T1        RH_1          T2        RH_6          T3 
##           1           1           1           1           1           1 
##        RH_3          T4        RH_4          T6        RH_5          T7 
##           1           1           1           1           1           1 
##        RH_7          T8        RH_9 Press_mm_hg   Windspeed 
##           1           1           1           1           1

10. PCA

Berdasarkan hasil Principal Component Analysis (PCA), diperoleh bahwa komponen utama pertama (PC1) memiliki standar deviasi sebesar 2,6322 dengan proporsi variasi sebesar 40,76%. Komponen kedua (PC2) memiliki standar deviasi 2,2637 dan mampu menjelaskan 30,14% variasi data. Dengan demikian, dua komponen pertama sudah mampu menjelaskan sebesar 70,90% dari total variasi data. Komponen ketiga (PC3) memberikan tambahan variasi sebesar 7,24%, sehingga secara kumulatif tiga komponen pertama mampu menjelaskan 78,14% variasi. Komponen keempat (PC4) memiliki standar deviasi 1,00426 dengan proporsi variasi 5,93%, sehingga total variasi yang dapat dijelaskan oleh empat komponen mencapai 84,07%. Setelah komponen keempat, proporsi variasi yang dijelaskan masing-masing komponen menjadi relatif kecil (kurang dari 5%).

Berdasarkan kriteria Kaiser (eigenvalue > 1), terdapat empat komponen yang memenuhi syarat untuk dipertahankan karena nilai standar deviasinya lebih dari 1 (yang berarti eigenvalue > 1). Namun demikian, jika mempertimbangkan persentase variasi kumulatif, dua komponen pertama sebenarnya sudah cukup representatif karena telah menjelaskan lebih dari 60% variasi total data. Untuk memperoleh representasi yang lebih stabil dan informatif, pemilihan tiga komponen dapat menjadi pilihan yang paling rasional karena telah mampu menjelaskan sekitar 78% variasi data secara keseluruhan. Dengan demikian, secara statistik hasil ini menunjukkan bahwa data telah memenuhi syarat untuk dilakukan PCA dan memiliki struktur komponen yang cukup kuat untuk keperluan reduksi dimensi maupun analisis lanjutan.

pca <- prcomp(data_scaled, center = TRUE, scale. = TRUE)
summary(pca)
## Importance of components:
##                           PC1    PC2     PC3     PC4     PC5     PC6     PC7
## Standard deviation     2.6322 2.2637 1.10952 1.00426 0.90363 0.70359 0.57270
## Proportion of Variance 0.4076 0.3014 0.07241 0.05933 0.04803 0.02912 0.01929
## Cumulative Proportion  0.4076 0.7090 0.78139 0.84072 0.88875 0.91787 0.93716
##                            PC8     PC9    PC10    PC11    PC12    PC13    PC14
## Standard deviation     0.50070 0.41397 0.38083 0.36607 0.31966 0.28139 0.26788
## Proportion of Variance 0.01475 0.01008 0.00853 0.00788 0.00601 0.00466 0.00422
## Cumulative Proportion  0.95191 0.96199 0.97052 0.97841 0.98442 0.98907 0.99330
##                           PC15    PC16    PC17
## Standard deviation     0.23108 0.20650 0.13393
## Proportion of Variance 0.00314 0.00251 0.00106
## Cumulative Proportion  0.99644 0.99894 1.00000

10.1 Menentukan jumlah komponen dengan eigen value

eigenvalues <- pca$sdev^2
eigenvalues
##  [1] 6.92845674 5.12418023 1.23103365 1.00854224 0.81655035 0.49503652
##  [7] 0.32798486 0.25070186 0.17137270 0.14503261 0.13400514 0.10218282
## [13] 0.07918274 0.07175760 0.05340017 0.04264140 0.01793837
n_components <- sum(eigenvalues > 1)
n_components
## [1] 4

10.2 Scree plot

Scree plot memperlihatkan penurunan tajam eigenvalue dari PC1 ke PC4, kemudian melandai setelahnya. Pola ini mengindikasikan adanya titik siku (elbow) pada komponen ke-4, yang memperkuat keputusan untuk mempertahankan empat komponen utama.

library(ggplot2)

eigenvalues <- pca$sdev^2

df_eigen <- data.frame(
  Komponen = 1:length(eigenvalues),
  Eigenvalue = eigenvalues
)

ggplot(df_eigen, aes(Komponen, Eigenvalue)) +
  geom_line(linewidth = 1.2) +
  geom_point(size = 4) +
  geom_hline(yintercept = 1, linetype = "dashed") +
  scale_x_continuous(breaks = 1:length(eigenvalues)) +
  labs(
    title = "Scree Plot PCA",
    x = "Komponen",
    y = "Eigenvalue"
  ) +
  theme_minimal(base_size = 14)

fa.parallel(data_scaled, fa = "pc", n.iter = 100)

## Parallel analysis suggests that the number of factors =  NA  and the number of components =  3

Hasil parallel analysis menyarankan tiga komponen utama, yang lebih konservatif dibandingkan kriteria Kaiser. Perbedaan ini umum terjadi dan menunjukkan bahwa secara statistik ketat, tiga komponen sudah cukup.Sehingga pada analisis PCA ini kami memakai tiga komponen utama saja.

11. Mengambil factor loading

Tabel loading menunjukkan kontribusi masing-masing variabel terhadap setiap komponen utama. PC1 memiliki kontribusi terbesar pada variabel suhu seperti T7 dan T8, meskipun pada bagian tabel ini kontribusinya tidak terlalu dominan dibandingkan hasil keseluruhan sebelumnya. PC2 lebih dipengaruhi oleh variabel kelembaban, khususnya RH_7 dan RH_9, yang menunjukkan bahwa komponen ini merepresentasikan faktor kelembaban. PC3 terutama dipengaruhi secara kuat oleh variabel Windspeed (dengan loading terbesar secara absolut), serta memiliki kontribusi dari RH_5 dan T8, sehingga komponen ini dapat diinterpretasikan sebagai faktor lingkungan eksternal yang berkaitan dengan kondisi angin dan variasi suhu luar. Sementara itu, PC4 didominasi oleh variabel Press_mm_hg dengan loading yang sangat tinggi (0.840), yang menunjukkan bahwa komponen keempat merepresentasikan faktor tekanan udara. Nilai communality (h²) menunjukkan proporsi varians masing-masing variabel yang dapat dijelaskan oleh keempat komponen tersebut, dengan nilai tertinggi pada variabel Press_mm_hg (0.738) dan Windspeed (0.563), yang berarti kedua variabel tersebut cukup baik direpresentasikan oleh struktur komponen yang terbentuk.

# Ambil loading PCA
loadings <- pca$rotation[, 1:3]

# Hitung communalities (h2)
h2 <- rowSums(loadings^2)

pc_table <- data.frame(
  Variable = rownames(loadings),
  round(loadings, 3),
  h2 = round(h2, 3)
)

pc_table
##                Variable    PC1    PC2    PC3    h2
## T_out             T_out  0.324  0.089 -0.318 0.214
## T1                   T1  0.352 -0.007  0.150 0.146
## RH_1               RH_1  0.087  0.389  0.076 0.164
## T2                   T2  0.331  0.062 -0.081 0.120
## RH_6               RH_6 -0.288  0.220  0.192 0.168
## T3                   T3  0.351  0.009  0.136 0.142
## RH_3               RH_3 -0.015  0.419  0.080 0.182
## T4                   T4  0.347 -0.061  0.163 0.150
## RH_4               RH_4  0.043  0.424  0.014 0.182
## T6                   T6  0.321  0.073 -0.338 0.222
## RH_5               RH_5 -0.028  0.187  0.294 0.122
## T7                   T7  0.341 -0.103  0.150 0.149
## RH_7               RH_7  0.060  0.404  0.090 0.175
## T8                   T8  0.311 -0.124  0.239 0.170
## RH_9               RH_9  0.034  0.395  0.080 0.164
## Press_mm_hg Press_mm_hg -0.067 -0.138  0.089 0.031
## Windspeed     Windspeed -0.016  0.159 -0.688 0.498
importance <- summary(pca)$importance
round(importance[, 1:3], 3)
##                          PC1   PC2   PC3
## Standard deviation     2.632 2.264 1.110
## Proportion of Variance 0.408 0.301 0.072
## Cumulative Proportion  0.408 0.709 0.781

13. Faktor Analisis

FA dengan ML

fa_model <- fa(data_scaled,
               nfactors = 3,
               rotate = "varimax",
               fm = "ml")   # ml = maximum likelihood

fa_model
## Factor Analysis using method =  ml
## Call: fa(r = data_scaled, nfactors = 3, rotate = "varimax", fm = "ml")
## Standardized loadings (pattern matrix) based upon correlation matrix
##               ML1   ML2   ML3    h2    u2 com
## T_out        0.70  0.16  0.66 0.960 0.040 2.1
## T1           0.94  0.11  0.00 0.893 0.107 1.0
## RH_1         0.12  0.87  0.19 0.815 0.185 1.1
## T2           0.78  0.18  0.34 0.759 0.241 1.5
## RH_6        -0.74  0.48 -0.31 0.863 0.137 2.1
## T3           0.93  0.13  0.05 0.877 0.123 1.0
## RH_3        -0.14  0.93  0.10 0.893 0.107 1.1
## T4           0.93 -0.03  0.02 0.865 0.135 1.0
## RH_4        -0.02  0.95  0.23 0.950 0.050 1.1
## T6           0.69  0.11  0.71 0.995 0.005 2.0
## RH_5        -0.08  0.38 -0.09 0.163 0.837 1.2
## T7           0.93 -0.11 -0.02 0.887 0.113 1.0
## RH_7         0.05  0.90  0.17 0.844 0.156 1.1
## T8           0.89 -0.14 -0.16 0.836 0.164 1.1
## RH_9        -0.01  0.88  0.12 0.789 0.211 1.0
## Press_mm_hg -0.14 -0.27 -0.02 0.093 0.907 1.5
## Windspeed   -0.15  0.22  0.36 0.198 0.802 2.1
## 
##                        ML1  ML2  ML3
## SS loadings           6.48 4.74 1.46
## Proportion Var        0.38 0.28 0.09
## Cumulative Var        0.38 0.66 0.75
## Proportion Explained  0.51 0.37 0.12
## Cumulative Proportion 0.51 0.88 1.00
## 
## Mean item complexity =  1.4
## Test of the hypothesis that 3 factors are sufficient.
## 
## df null model =  136  with the objective function =  22.88 with Chi Square =  451361.7
## df of  the model are 88  and the objective function was  1.95 
## 
## The root mean square of the residuals (RMSR) is  0.03 
## The df corrected root mean square of the residuals is  0.03 
## 
## The harmonic n.obs is  19735 with the empirical chi square  2082.59  with prob <  0 
## The total n.obs was  19735  with Likelihood Chi Square =  38424.03  with prob <  0 
## 
## Tucker Lewis Index of factoring reliability =  0.869
## RMSEA index =  0.149  and the 90 % confidence intervals are  0.147 0.15
## BIC =  37553.7
## Fit based upon off diagonal values = 1
## Measures of factor score adequacy             
##                                                    ML1  ML2  ML3
## Correlation of (regression) scores with factors   0.99 0.99 0.98
## Multiple R square of scores with factors          0.97 0.97 0.96
## Minimum correlation of possible factor scores     0.95 0.95 0.93

Berdasarkan output factor loading dengan batas cutoff 0,4, terlihat bahwa Faktor 1 (ML1) didominasi oleh variabel suhu seperti T1, T2, T3, T4, T7, T8, dan T_out yang memiliki loading tinggi, sehingga faktor ini dapat diinterpretasikan sebagai faktor temperatur. Selain itu, RH_6 memiliki loading negatif yang cukup kuat pada Faktor 1, yang menunjukkan hubungan berlawanan arah dengan dimensi suhu. Faktor 2 (ML2) didominasi oleh variabel kelembapan seperti RH_1, RH_3, RH_4, RH_7, dan RH_9, sehingga dapat diartikan sebagai faktor kelembapan. Faktor 3 (ML3) memiliki kontribusi lebih kecil dan terutama dipengaruhi oleh T6 serta T_out, yang menunjukkan adanya dimensi tambahan yang berkaitan dengan kondisi suhu tertentu atau variasi lingkungan. Variabel RH_5, Press_mm_hg, dan Windspeed tidak memiliki loading ≥ 0,4, sehingga kontribusinya terhadap ketiga faktor relatif rendah.

print(fa_model$loadings, cutoff = 0.4)
## 
## Loadings:
##             ML1    ML2    ML3   
## T_out        0.705         0.661
## T1           0.939              
## RH_1                0.875       
## T2           0.784              
## RH_6        -0.736  0.477       
## T3           0.926              
## RH_3                0.929       
## T4           0.929              
## RH_4                0.947       
## T6           0.689         0.713
## RH_5                            
## T7           0.935              
## RH_7                0.902       
## T8           0.890              
## RH_9                0.880       
## Press_mm_hg                     
## Windspeed                       
## 
##                  ML1   ML2   ML3
## SS loadings    6.479 4.741 1.458
## Proportion Var 0.381 0.279 0.086
## Cumulative Var 0.381 0.660 0.746

Berdasarkan nilai SS Loadings, Faktor 1 menjelaskan 38,1% varians, Faktor 2 sebesar 27,9%, dan Faktor 3 sebesar 8,6%. Secara kumulatif, ketiga faktor mampu menjelaskan sekitar 74,6% total varians data, yang menunjukkan bahwa model cukup efektif dalam mereduksi dimensi variabel menjadi tiga konstruk laten utama.

fa_model$Vaccounted
##                             ML1       ML2        ML3
## SS loadings           6.4794156 4.7412447 1.45833532
## Proportion Var        0.3811421 0.2788967 0.08578443
## Cumulative Var        0.3811421 0.6600388 0.74582327
## Proportion Explained  0.5110354 0.3739448 0.11501978
## Cumulative Proportion 0.5110354 0.8849802 1.00000000

Berdasarkan nilai communality (h²), sebagian besar variabel memiliki nilai yang tinggi (mendekati 1), seperti T6 (0,995), T_out (0,960), RH_4 (0,950), T3 (0,877), T7 (0,887), dan T1 (0,893). Hal ini menunjukkan bahwa variabel-variabel tersebut mampu dijelaskan dengan sangat baik oleh ketiga faktor yang terbentuk. Secara umum, variabel suhu (T1–T8 dan T_out) serta sebagian besar variabel kelembapan (RH_1, RH_3, RH_4, RH_6, RH_7, RH_9) memiliki nilai communality di atas 0,75, yang berarti lebih dari 75% varians masing-masing variabel dapat dijelaskan oleh model faktor.

Sebaliknya, beberapa variabel seperti RH_5 (0,163), Press_mm_hg (0,093), dan Windspeed (0,198) memiliki nilai communality yang rendah (< 0,30). Hal ini mengindikasikan bahwa variabel-variabel tersebut kurang terwakili dalam struktur faktor yang terbentuk dan kontribusinya terhadap model relatif kecil. Dengan demikian, secara keseluruhan model tiga faktor sudah cukup baik dalam menjelaskan sebagian besar variabel, namun terdapat beberapa variabel yang kurang sesuai dengan struktur faktor yang dihasilkan.

fa_model$communality
##       T_out          T1        RH_1          T2        RH_6          T3 
##  0.95958224  0.89313033  0.81472736  0.75868881  0.86303998  0.87706151 
##        RH_3          T4        RH_4          T6        RH_5          T7 
##  0.89276499  0.86457458  0.94963294  0.99503544  0.16310136  0.88658434 
##        RH_7          T8        RH_9 Press_mm_hg   Windspeed 
##  0.84434296  0.83640197  0.78936174  0.09322364  0.19774136