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 ...
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
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
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 ...
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)
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
cortest.bartlett(cor_matrix, n = nrow(df_numeric17))
## $chisq
## [1] 451361.7
##
## $p.value
## [1] 0
##
## $df
## [1] 136
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
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
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
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.
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
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