==Menginstal beberapa library yang diperlukan

library(readxl)
library(psych)
## Warning: package 'psych' was built under R version 4.4.3
library(GPArotation)
## 
## Attaching package: 'GPArotation'
## The following objects are masked from 'package:psych':
## 
##     equamax, varimin
library(factoextra)
## Warning: package 'factoextra' was built under R version 4.4.3
## Loading required package: ggplot2
## Warning: package 'ggplot2' was built under R version 4.4.2
## 
## 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
library(corrplot)
## corrplot 0.94 loaded

==Mengimpor dataset kedalam R

library(readr)
price <- read_csv("C:/Users/asuss/Downloads/US_House_Price.csv")
## Rows: 240 Columns: 16
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## dbl  (15): building_permits, const_price_index, delinquency_rate, GDP, house...
## date  (1): DATE
## 
## ℹ 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.
View(price)

==Melihat Struktur data dalam Dataset

# Menampilkan beberapa baris pertama dan struktur data
head(price)
dim(price)
## [1] 240  16
str(price)
## spc_tbl_ [240 × 16] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ DATE                  : Date[1:240], format: "2003-01-01" "2003-02-01" ...
##  $ building_permits      : num [1:240] 1808 1854 1757 1803 1835 ...
##  $ const_price_index     : num [1:240] 144 145 145 146 146 ...
##  $ delinquency_rate      : num [1:240] 1.97 1.97 1.97 1.83 1.83 1.83 1.73 1.73 1.73 1.76 ...
##  $ GDP                   : num [1:240] 14614 14614 14614 14744 14744 ...
##  $ house_for_sale_or_sold: num [1:240] 76 82 98 91 101 107 99 105 90 88 ...
##  $ housing_subsidies     : num [1:240] 25.9 25.9 25.9 25.9 25.9 ...
##  $ income                : num [1:240] 10710 10674 10696 10753 10832 ...
##  $ interest_rate         : num [1:240] 1.24 1.26 1.25 1.26 1.26 1.22 1.01 1.03 1.01 1.01 ...
##  $ mortgage_rate         : num [1:240] 5.92 5.84 5.75 5.81 5.48 ...
##  $ construction_unit     : num [1:240] 1654 1688 1638 1662 1733 ...
##  $ total_houses          : num [1:240] 111278 111278 111278 111278 111278 ...
##  $ total_const_spending  : num [1:240] 1.5 -0.1 -1.1 1.7 0.2 2.3 4.1 1 1.2 2.4 ...
##  $ unemployment_rate     : num [1:240] 5.8 5.9 5.9 6 6.1 6.3 6.2 6.1 6.1 6 ...
##  $ urban_population      : num [1:240] 79.6 79.6 79.6 79.6 79.6 ...
##  $ home_price_index      : num [1:240] 128 129 130 131 132 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   DATE = col_date(format = ""),
##   ..   building_permits = col_double(),
##   ..   const_price_index = col_double(),
##   ..   delinquency_rate = col_double(),
##   ..   GDP = col_double(),
##   ..   house_for_sale_or_sold = col_double(),
##   ..   housing_subsidies = col_double(),
##   ..   income = col_double(),
##   ..   interest_rate = col_double(),
##   ..   mortgage_rate = col_double(),
##   ..   construction_unit = col_double(),
##   ..   total_houses = col_double(),
##   ..   total_const_spending = col_double(),
##   ..   unemployment_rate = col_double(),
##   ..   urban_population = col_double(),
##   ..   home_price_index = col_double()
##   .. )
##  - attr(*, "problems")=<externalptr>

==Memilih Variabel Yang Dibutuhkan

# Memilih hanya kolom dengan tipe numerik
price_float <- price[sapply(price, is.numeric)]
head(price_float)

==Menampilkan Variabel yang dipilih

price_selected <- subset(price_float, select = -c(building_permits,house_for_sale_or_sold,construction_unit))
head(price_selected)

TAHAPAN ANALISIS FAKTOR Langkah Demi Langkah 1. Uji Asumsi a. Uji Korelasi Antar Variabel

bartlett.test(price_selected)
## 
##  Bartlett test of homogeneity of variances
## 
## data:  price_selected
## Bartlett's K-squared = 25991, df = 11, p-value < 2.2e-16
Dari nilai p-value 0,000 yang ditampilkan maka nampak jelas bahwa p value lebih kecil dari 0,05. Maka berdasarkan hipotesis maka tolak HO dan dapat disimpulkan bahwa data ini memiliki korelasi antar variabelnya.
  1. Uji Kelayakan dan Kecukupan data
# Uji KMO dan Bartlett
kmo_result <- KMO(price_selected)
kmo_result
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = price_selected)
## Overall MSA =  0.76
## MSA for each item = 
##    const_price_index     delinquency_rate                  GDP 
##                 0.74                 0.41                 0.84 
##    housing_subsidies               income        interest_rate 
##                 0.94                 0.87                 0.54 
##        mortgage_rate         total_houses total_const_spending 
##                 0.91                 0.82                 0.68 
##    unemployment_rate     urban_population     home_price_index 
##                 0.51                 0.79                 0.69
Dari nilai MSA masing masing variabel ternyata variabel kedua dan ke sepuluh memiliki nilai MSA yang mendekati 0,5. Maka dari itu akan dilakukan penghapusan variabel ke 2 dan dilakukan uji asumsi ulang.

Uji KMO dan MSA ulang setelah dilakukan penghapusan Variabel

price_selected <- subset(price_float, select = -c(delinquency_rate, unemployment_rate,building_permits,house_for_sale_or_sold,construction_unit))
kmo_result<- KMO(price_selected)
kmo_result
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = price_selected)
## Overall MSA =  0.83
## MSA for each item = 
##    const_price_index                  GDP    housing_subsidies 
##                 0.84                 0.90                 0.88 
##               income        interest_rate        mortgage_rate 
##                 0.91                 0.53                 0.89 
##         total_houses total_const_spending     urban_population 
##                 0.81                 0.56                 0.78 
##     home_price_index 
##                 0.79

Berdasarkan uji diatas, Nilai MSA masing-masing variabel sudah lebih dari 0,5 dan begitu juga dengan nilai KMO > 0,5. Maka dapat disimpulkan bahwa data ini sudah bisa dilakukan analisis faktor. 2. Menampilkan Matriks Korelasi Dari Data Frame

# Matriks Korelasi
correlation_matrix <- cor(price_selected)
correlation_matrix
##                      const_price_index        GDP housing_subsidies     income
## const_price_index           1.00000000  0.9035441         0.9293006  0.8529987
## GDP                         0.90354409  1.0000000         0.9454196  0.9507510
## housing_subsidies           0.92930057  0.9454196         1.0000000  0.9529067
## income                      0.85299870  0.9507510         0.9529067  1.0000000
## interest_rate              -0.22134981 -0.2039344        -0.3193375 -0.2881965
## mortgage_rate              -0.46202492 -0.6165636        -0.6270040 -0.6821986
## total_houses                0.85901431  0.9713168         0.9378642  0.9431654
## total_const_spending        0.08759367  0.1775978         0.1653869  0.1874986
## urban_population            0.88721996  0.9791989         0.9649488  0.9645618
## home_price_index            0.88882299  0.8376995         0.8288850  0.7882871
##                      interest_rate mortgage_rate total_houses
## const_price_index       -0.2213498    -0.4620249    0.8590143
## GDP                     -0.2039344    -0.6165636    0.9713168
## housing_subsidies       -0.3193375    -0.6270040    0.9378642
## income                  -0.2881965    -0.6821986    0.9431654
## interest_rate            1.0000000     0.7119463   -0.3484767
## mortgage_rate            0.7119463     1.0000000   -0.7161162
## total_houses            -0.3484767    -0.7161162    1.0000000
## total_const_spending    -0.3904719    -0.4626932    0.1941792
## urban_population        -0.3477492    -0.7073410    0.9936983
## home_price_index         0.1352455    -0.2185514    0.7204947
##                      total_const_spending urban_population home_price_index
## const_price_index              0.08759367        0.8872200       0.88882299
## GDP                            0.17759779        0.9791989       0.83769948
## housing_subsidies              0.16538688        0.9649488       0.82888505
## income                         0.18749856        0.9645618       0.78828706
## interest_rate                 -0.39047194       -0.3477492       0.13524553
## mortgage_rate                 -0.46269320       -0.7073410      -0.21855136
## total_houses                   0.19417919        0.9936983       0.72049468
## total_const_spending           1.00000000        0.1978094       0.03785224
## urban_population               0.19780944        1.0000000       0.76398463
## home_price_index               0.03785224        0.7639846       1.00000000
Matriks yang digunakan adalah matriks korelasi, karena tiap tiap variabel memiliki skala pengukuran yang berbeda.
  1. Menentukan Nilai dan Vektor Eigen
  1. Nilai Eigen
fa_eigen <- eigen(correlation_matrix)
eigenvalues <- fa_eigen$values
eigenvalues
##  [1] 6.967024496 1.783319647 0.704835437 0.310128498 0.097028568 0.073518733
##  [7] 0.033374408 0.021592095 0.007950806 0.001227312

Berdasarkan output diatas terlihat bahwa nilai eigen masing masing variabel bermacam-macam, dan terdapat 2 variabel yang memiliki nilai eigen > 1 yaitu variabel pertama dan kedua. b. Vektor Eigen

fa_eigen <- eigen(correlation_matrix)
eigenvector <- fa_eigen$vectors
eigenvector
##              [,1]         [,2]         [,3]        [,4]         [,5]
##  [1,] -0.34778820 -0.174291378 -0.003011165  0.49293561 -0.001079763
##  [2,] -0.36963626 -0.104255735 -0.044638514 -0.17310709 -0.278508843
##  [3,] -0.37064424 -0.065333489  0.041282037  0.13887135  0.100164829
##  [4,] -0.36740609 -0.039295767  0.024990505 -0.20818745  0.275187355
##  [5,]  0.13801599 -0.604693682 -0.393350517 -0.56691996  0.075485828
##  [6,]  0.26976373 -0.458132529 -0.160219001  0.42689069 -0.549312753
##  [7,] -0.36922397  0.005974273  0.090463361 -0.23276839 -0.501770956
##  [8,] -0.09425467  0.486712431 -0.852984439  0.06077963 -0.117378587
##  [9,] -0.37521548 -0.009408937  0.068316640 -0.14082232 -0.283492468
## [10,] -0.30369423 -0.374683282 -0.273571947  0.28823782  0.428145035
##               [,6]         [,7]        [,8]        [,9]        [,10]
##  [1,] -0.521351469 -0.224038190  0.53100993  0.03368425 -0.023737994
##  [2,] -0.137907917  0.362711604 -0.04661544 -0.76366780  0.083869753
##  [3,]  0.287956316 -0.718683116 -0.39214814 -0.23674278  0.134463250
##  [4,]  0.612383633  0.114604813  0.59041062  0.04420776  0.071323124
##  [5,] -0.201837868 -0.286196215  0.09376525  0.03090083 -0.032902480
##  [6,]  0.445753334  0.038872824  0.08324197 -0.02284737 -0.005785519
##  [7,] -0.084686320  0.034099197 -0.10148673  0.50385512  0.526303203
##  [8,]  0.044619701 -0.065295084  0.05164458  0.01545957 -0.003491418
##  [9,]  0.051362151 -0.008118676 -0.12220400  0.21735864 -0.830286796
## [10,]  0.002485363  0.446873597 -0.41215156  0.23418962  0.041660013
  1. Menentukan Faktor Loading dari Data Tersebut
# Memuat library yang diperlukan
library(psych)

# Menjalankan analisis faktor tanpa menentukan jumlah faktor (menggunakan semua variabel)
fa_result <- fa(price_selected, nfactors = ncol(price_selected), rotate = "none", fm = "ml")

# Mengubah faktor loading menjadi matriks
factor_loadings <- fa_result$loadings[]

# Mengonversi ke data frame
factor_loadings_df <- as.data.frame(factor_loadings)

# Menambahkan nama faktor
colnames(factor_loadings_df) <- paste0("Factor ", 1:ncol(factor_loadings_df))

# Menampilkan hasil faktor loading
print("Factor Loadings untuk Semua Faktor:")
## [1] "Factor Loadings untuk Semua Faktor:"
print(factor_loadings_df)
##                        Factor 1    Factor 2    Factor 3     Factor 4
## const_price_index     0.8997937  0.28916430 -0.18532721  0.049949295
## GDP                   0.9856691  0.10184290  0.07361188  0.051948355
## housing_subsidies     0.9667595  0.10437366 -0.17798141 -0.062120572
## income                0.9644219  0.03575486 -0.06142493 -0.054658011
## interest_rate        -0.3160370  0.68151699  0.52511746 -0.101114209
## mortgage_rate        -0.6853274  0.57314657  0.18473703 -0.139988568
## total_houses          0.9914659 -0.09435113  0.05744984 -0.005053825
## total_const_spending  0.1899744 -0.28058691 -0.19057109  0.488610943
## urban_population      0.9978503 -0.03809378 -0.01002567 -0.009616792
## home_price_index      0.7874498  0.58594345 -0.04306433  0.045079281
##                          Factor 5 Factor 6 Factor 7 Factor 8 Factor 9 Factor 10
## const_price_index    -0.168223077    1e-15    1e-15    1e-15    1e-15     1e-15
## GDP                   0.018866052    1e-15    1e-15    1e-15    1e-15     1e-15
## housing_subsidies     0.010941601    1e-15    1e-15    1e-15    1e-15     1e-15
## income                0.175144653    1e-15    1e-15    1e-15    1e-15     1e-15
## interest_rate         0.108726009    1e-15    1e-15    1e-15    1e-15     1e-15
## mortgage_rate        -0.180617387    1e-15    1e-15    1e-15    1e-15     1e-15
## total_houses         -0.029199628    1e-15    1e-15    1e-15    1e-15     1e-15
## total_const_spending  0.253225058    1e-15    1e-15    1e-15    1e-15     1e-15
## urban_population      0.004025886    1e-15    1e-15    1e-15    1e-15     1e-15
## home_price_index      0.031830953    1e-15    1e-15    1e-15    1e-15     1e-15
  1. Menentukan Jumlah Faktor
fa_eigen <- eigen(correlation_matrix)
eigenvalues <- fa_eigen$values
cat("Nilai Eigen:\n", eigenvalues, "\n")
## Nilai Eigen:
##  6.967024 1.78332 0.7048354 0.3101285 0.09702857 0.07351873 0.03337441 0.02159209 0.007950806 0.001227312
Berdasarkan nilai Eigen yang nilainya lebih dari 1, maka hanya 2 variabel pertama yang bisa dijadikan faktor. Maka berdasarkan metode nilai eigen, data house_price ini hanya memiliki 2 faktor saja.
proporsi_varians <- eigenvalues / sum(eigenvalues)
proporsi_kumulatif <- cumsum(proporsi_varians)


cat("Proporsi Varians:\n", proporsi_varians, "\n")
## Proporsi Varians:
##  0.6967024 0.178332 0.07048354 0.03101285 0.009702857 0.007351873 0.003337441 0.002159209 0.0007950806 0.0001227312
cat("Proporsi Varians Kumulatif:\n", proporsi_kumulatif, "\n")
## Proporsi Varians Kumulatif:
##  0.6967024 0.8750344 0.945518 0.9765308 0.9862337 0.9935855 0.996923 0.9990822 0.9998773 1
Berdasarkan hasil analisis faktor, ditemukan bahwa faktor pertama menjelaskan 69,67% dari total varians, sedangkan faktor kedua menambah penjelasan varians hingga mencapai 87,50% secara kumulatif. Karena ambang batas minimal yang umum digunakan dalam analisis faktor adalah 80%, maka faktor kedua sudah cukup untuk memenuhi kriteria tersebut. Dengan demikian, dua faktor utama dianggap mampu mewakili struktur data dengan baik tanpa kehilangan terlalu banyak informasi.

#Penentuan Jumlah Faktor

num_factors <- sum(eigenvalues > 1)
cat("Jumlah Faktor yang Dipilih:", num_factors, "\n")
## Jumlah Faktor yang Dipilih: 2
  1. Melakukan Rotasi Faktor (Metode Varimax)
num_factors <- sum(eigenvalues > 1)
cat("Jumlah Faktor yang Dipilih:", num_factors, "\n")
## Jumlah Faktor yang Dipilih: 2
# Melakukan analisis faktor dengan rotasi Varimax
fa_result <- fa(price_selected, nfactors = num_factors, rotate = "varimax", fm = "ml")

# Mendapatkan faktor loading setelah rotasi
rotated_factor_loadings <- fa_result$loadings
rotated_factor_loadings
## 
## Loadings:
##                      ML1    ML2   
## const_price_index     0.934  0.144
## GDP                   0.924  0.358
## housing_subsidies     0.911  0.338
## income                0.880  0.396
## interest_rate               -0.697
## mortgage_rate        -0.372 -0.778
## total_houses          0.839  0.537
## total_const_spending         0.257
## urban_population      0.873  0.484
## home_price_index      0.980 -0.188
## 
##                 ML1   ML2
## SS loadings    5.90 2.137
## Proportion Var 0.59 0.214
## Cumulative Var 0.59 0.804

INTERPRETASI Berdasarkan hasil faktor loading setelah rotasi Varimax, terlihat bahwa variabel-variabel dalam analisis ini terbagi menjadi dua faktor utama.

Faktor pertama memiliki loading tinggi pada variabel home price index , const price index , GDP , housing subsidies , income , total houses , dan urban population . Hal ini menunjukkan bahwa faktor pertama dapat diinterpretasikan sebagai faktor ekonomi dan pasar perumahan, yang mencerminkan bagaimana harga rumah, subsidi perumahan, pendapatan, jumlah rumah yang tersedia, dan populasi perkotaan saling berkaitan dalam mempengaruhi kondisi pasar properti.

Sementara itu, faktor kedua memiliki loading tinggi pada total construction spending , serta loading negatif yang cukup besar pada interest rate dan mortgage rate . Faktor ini dapat diinterpretasikan sebagai faktor pembiayaan dan investasi perumahan, yang mencerminkan bagaimana tingkat suku bunga dan pengeluaran konstruksi berperan dalam memengaruhi investasi di sektor properti.

Selain itu, terlihat bahwa variabel interest rate dan mortgage rate juga memiliki loading yang cukup besar pada faktor pertama, meskipun dengan arah negatif. Ini menunjukkan bahwa kenaikan suku bunga dan tingkat hipotek cenderung berlawanan dengan kondisi pasar perumahan dan variabel ekonomi lainnya.

Secara keseluruhan, hasil ini menunjukkan bahwa pasar properti dan sektor ekonomi dapat dijelaskan oleh dua faktor utama, yaitu faktor ekonomi & pasar perumahan (Faktor 1) dan faktor pembiayaan & investasi perumahan (Faktor 2).

ANALISIS FAKTOR SYNTAX LANGSUNG

eigenvalues <- eigen(correlation_matrix)$values
num_factors <- sum(eigenvalues > 1)

cat("Jumlah Faktor yang Dipilih:", num_factors, "\n")
## Jumlah Faktor yang Dipilih: 2
fa_result <- fa(price_selected, nfactors = num_factors, rotate = "varimax", fm = "ml")

# Menampilkan faktor loadings setelah rotasi
print(fa_result$loadings)
## 
## Loadings:
##                      ML1    ML2   
## const_price_index     0.934  0.144
## GDP                   0.924  0.358
## housing_subsidies     0.911  0.338
## income                0.880  0.396
## interest_rate               -0.697
## mortgage_rate        -0.372 -0.778
## total_houses          0.839  0.537
## total_const_spending         0.257
## urban_population      0.873  0.484
## home_price_index      0.980 -0.188
## 
##                 ML1   ML2
## SS loadings    5.90 2.137
## Proportion Var 0.59 0.214
## Cumulative Var 0.59 0.804