Kursus
Analisis Faktor (FA) adalah metode analisis data eksploratori yang digunakan untuk mencari faktor bawah permukaan atau variabel laten yang berpengaruh dari sekumpulan variabel teramati. Metode ini membantu interpretasi data dengan mengurangi jumlah variabel. FA mengekstrak varians umum maksimum dari semua variabel dan memasukkannya ke dalam skor umum.
Analisis faktor banyak digunakan dalam riset pasar, periklanan, psikologi, keuangan, dan riset operasi. Peneliti pasar menggunakan analisis faktor untuk mengidentifikasi pelanggan yang sensitif terhadap harga, mengidentifikasi fitur merek yang memengaruhi pilihan konsumen, serta membantu memahami kriteria pemilihan kanal untuk saluran distribusi.
Analisis Faktor
Analisis faktor adalah model statistik linear. Metode ini digunakan untuk menjelaskan varians di antara variabel teramati dan memadatkan sekumpulan variabel teramati menjadi variabel tak teramati yang disebut faktor. Variabel teramati dimodelkan sebagai kombinasi linear dari faktor dan suku galat (Sumber). Faktor atau variabel laten terkait dengan beberapa variabel teramati yang memiliki pola respons yang sama. Setiap faktor menjelaskan sejumlah varians tertentu pada variabel teramati. Metode ini membantu interpretasi data dengan mengurangi jumlah variabel.
Analisis faktor adalah metode untuk menyelidiki apakah sejumlah variabel yang diminati X1, X2,……., Xl, berkaitan secara linear dengan sejumlah faktor tak teramati yang lebih kecil F1, F2,..……, Fk.
Sumber: Gambar ini dibuat ulang dari gambar yang saya temukan di catatan analisis faktor. Gambar tersebut memberikan gambaran lengkap tentang analisis faktor.
Asumsi:
- Tidak ada pencilan (outlier) dalam data.
- Ukuran sampel harus lebih besar daripada jumlah faktor.
- Tidak boleh ada multikolinieritas sempurna.
- Tidak boleh ada homoskedastisitas antar variabel.
Jenis Analisis Faktor
- Exploratory Factor Analysis: Ini adalah pendekatan analisis faktor yang paling populer di kalangan peneliti sosial dan manajemen. Asumsi dasarnya adalah setiap variabel teramati dapat berasosiasi langsung dengan faktor mana pun.
- Confirmatory Factor Analysis (CFA): Asumsi dasarnya adalah setiap faktor terkait dengan sekumpulan variabel teramati tertentu. CFA mengonfirmasi apa yang diharapkan berdasarkan asumsi tersebut.
Bagaimana Cara Kerja Analisis Faktor?
Tujuan utama analisis faktor adalah mengurangi jumlah variabel teramati dan menemukan variabel tak teramati. Variabel tak teramati ini membantu peneliti pasar menyimpulkan hasil survei. Konversi dari variabel teramati ke variabel tak teramati dapat dilakukan dalam dua langkah:
- Ekstraksi Faktor: Pada langkah ini, jumlah faktor dan pendekatan ekstraksi dipilih menggunakan metode pemartisian varians seperti principal components analysis dan common factor analysis.
- Rotasi Faktor: Pada langkah ini, rotasi berupaya mengubah faktor menjadi faktor yang tidak berkorelasi — tujuan utamanya untuk meningkatkan keterjelasan interpretasi. Tersedia banyak metode rotasi seperti: metode rotasi Varimax, Quartimax, dan Promax.
Terminologi
Apa itu faktor?
Faktor adalah variabel laten yang menggambarkan keterkaitan di antara sejumlah variabel teramati. Jumlah faktor maksimum sama dengan jumlah variabel teramati. Setiap faktor menjelaskan varians tertentu pada variabel teramati. Faktor dengan jumlah varians terendah dihapus. Faktor juga dikenal sebagai variabel laten, variabel tersembunyi, variabel tak teramati, atau variabel hipotetik.
Apa itu factor loading?
Factor loading adalah matriks yang menunjukkan hubungan setiap variabel dengan faktor dasarnya. Matriks ini menunjukkan koefisien korelasi antara variabel teramati dan faktor. Matriks ini menunjukkan varians yang dijelaskan oleh variabel teramati.
Apa itu Eigenvalues?
Eigenvalues merepresentasikan varians yang dijelaskan masing-masing faktor dari total varians. Nilai ini juga dikenal sebagai akar karakteristik.
Apa itu Communalities?
Commonalities adalah jumlah kuadrat loading untuk setiap variabel. Nilai ini merepresentasikan varians umum. Rentangnya 0-1 dan nilai yang mendekati 1 merepresentasikan varians yang lebih besar.
Apa itu Rotasi Faktor?
Rotasi adalah alat untuk interpretasi analisis faktor yang lebih baik. Rotasi dapat bersifat ortogonal atau oblik. Rotasi mendistribusikan ulang commonalities dengan pola loading yang lebih jelas.
Menentukan Jumlah Faktor
Kriteria Kaiser adalah pendekatan analitis yang didasarkan pada proporsi varians yang lebih besar yang dijelaskan oleh faktor akan dipilih. Eigenvalue adalah kriteria yang baik untuk menentukan jumlah faktor. Umumnya, eigenvalue lebih besar dari 1 akan dianggap sebagai kriteria pemilihan fitur.
Pendekatan grafis didasarkan pada representasi visual eigenvalue faktor yang juga disebut scree plot. Scree plot ini membantu kita menentukan jumlah faktor pada titik di mana kurva membentuk siku (elbow).
Analisis Faktor vs. Principal Component Analysis
- Komponen PCA menjelaskan jumlah varians maksimum sedangkan analisis faktor menjelaskan kovarians dalam data.
- Komponen PCA sepenuhnya ortogonal satu sama lain sedangkan analisis faktor tidak mensyaratkan faktor bersifat ortogonal.
- Komponen PCA adalah kombinasi linear dari variabel teramati, sedangkan pada FA, variabel teramati adalah kombinasi linear dari variabel tak teramati atau faktor.
- Komponen PCA tidak dapat ditafsirkan. Dalam FA, faktor dasar dapat diberi label dan ditafsirkan.
- PCA adalah jenis metode reduksi dimensi sedangkan analisis faktor adalah metode variabel laten.
- PCA adalah salah satu jenis analisis faktor. PCA bersifat observasional sedangkan FA adalah teknik pemodelan.
Analisis Faktor di Python menggunakan paket factor_analyzer
Impor Pustaka yang Diperlukan
# Import required libraries
import pandas as pd
from sklearn.datasets import load_iris
from factor_analyzer import FactorAnalyzer
import matplotlib.pyplot as plt
Memuat Data
Mari lakukan analisis faktor pada BFI (dataset berdasarkan proyek asesmen kepribadian), yang dikumpulkan menggunakan skala respons 6 poin: 1 Sangat Tidak Akurat, 2 Cukup Tidak Akurat, 3 Agak Tidak Akurat, 4 Agak Akurat, 5 Cukup Akurat, dan 6 Sangat Akurat. Anda juga dapat mengunduh dataset ini dari tautan berikut: https://vincentarelbundock.github.io/Rdatasets/datasets.html
df= pd.read_csv("bfi.csv")
Praproses Data
df.columns
Index(['A1', 'A2', 'A3', 'A4', 'A5', 'C1', 'C2', 'C3', 'C4', 'C5', 'E1', 'E2',
'E3', 'E4', 'E5', 'N1', 'N2', 'N3', 'N4', 'N5', 'O1', 'O2', 'O3', 'O4',
'O5', 'gender', 'education', 'age'],
dtype='object')
# Dropping unnecessary columns
df.drop(['gender', 'education', 'age'],axis=1,inplace=True)
# Dropping missing values rows
df.dropna(inplace=True)
df.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 2436 entries, 0 to 2799
Data columns (total 25 columns):
A1 2436 non-null float64
A2 2436 non-null float64
A3 2436 non-null float64
A4 2436 non-null float64
A5 2436 non-null float64
C1 2436 non-null float64
C2 2436 non-null float64
C3 2436 non-null float64
C4 2436 non-null float64
C5 2436 non-null float64
E1 2436 non-null float64
E2 2436 non-null float64
E3 2436 non-null float64
E4 2436 non-null float64
E5 2436 non-null float64
N1 2436 non-null float64
N2 2436 non-null float64
N3 2436 non-null float64
N4 2436 non-null float64
N5 2436 non-null float64
O1 2436 non-null float64
O2 2436 non-null int64
O3 2436 non-null float64
O4 2436 non-null float64
O5 2436 non-null float64
dtypes: float64(24), int64(1)
memory usage: 494.8 KB
df.head()
| A1 | A2 | A3 | A4 | A5 | C1 | C2 | C3 | C4 | C5 | ... | N1 | N2 | N3 | N4 | N5 | O1 | O2 | O3 | O4 | O5 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 2.0 | 4.0 | 3.0 | 4.0 | 4.0 | 2.0 | 3.0 | 3.0 | 4.0 | 4.0 | ... | 3.0 | 4.0 | 2.0 | 2.0 | 3.0 | 3.0 | 6 | 3.0 | 4.0 | 3.0 |
| 1 | 2.0 | 4.0 | 5.0 | 2.0 | 5.0 | 5.0 | 4.0 | 4.0 | 3.0 | 4.0 | ... | 3.0 | 3.0 | 3.0 | 5.0 | 5.0 | 4.0 | 2 | 4.0 | 3.0 | 3.0 |
| 2 | 5.0 | 4.0 | 5.0 | 4.0 | 4.0 | 4.0 | 5.0 | 4.0 | 2.0 | 5.0 | ... | 4.0 | 5.0 | 4.0 | 2.0 | 3.0 | 4.0 | 2 | 5.0 | 5.0 | 2.0 |
| 3 | 4.0 | 4.0 | 6.0 | 5.0 | 5.0 | 4.0 | 4.0 | 3.0 | 5.0 | 5.0 | ... | 2.0 | 5.0 | 2.0 | 4.0 | 1.0 | 3.0 | 3 | 4.0 | 3.0 | 5.0 |
| 4 | 2.0 | 3.0 | 3.0 | 4.0 | 5.0 | 4.0 | 4.0 | 5.0 | 3.0 | 2.0 | ... | 2.0 | 3.0 | 4.0 | 4.0 | 3.0 | 3.0 | 3 | 4.0 | 3.0 | 3.0 |
5 baris × 25 kolom
Uji Kelayakan
Sebelum Anda melakukan analisis faktor, Anda perlu mengevaluasi "factorability" dari dataset kita. Factorability berarti "dapatkah kita menemukan faktor dalam dataset?". Ada dua metode untuk memeriksa factorability atau kecukupan sampel:
- Uji Bartlett
- Uji Kaiser-Meyer-Olkin
Uji sferisitas Bartlett memeriksa apakah variabel teramati saling berkorelasi dengan menggunakan matriks korelasi teramati terhadap matriks identitas. Jika uji ini tidak signifikan secara statistik, Anda sebaiknya tidak melakukan analisis faktor.
from factor_analyzer.factor_analyzer import calculate_bartlett_sphericity
chi_square_value,p_value=calculate_bartlett_sphericity(df)
chi_square_value, p_value
(18146.065577234807, 0.0)
Pada uji Bartlett ini, nilai p adalah 0. Uji ini signifikan secara statistik, yang menunjukkan bahwa matriks korelasi teramati bukan matriks identitas.
Uji Kaiser-Meyer-Olkin (KMO) mengukur kesesuaian data untuk analisis faktor. Uji ini menentukan kecukupan untuk setiap variabel teramati dan untuk model secara keseluruhan. KMO mengestimasi proporsi varians di antara semua variabel teramati. Proporsi yang lebih rendah lebih sesuai untuk analisis faktor. Nilai KMO berkisar antara 0 dan 1. Nilai KMO kurang dari 0,6 dianggap tidak memadai.
from factor_analyzer.factor_analyzer import calculate_kmo
kmo_all,kmo_model=calculate_kmo(df)
kmo_model
0.8486452309468382
Nilai KMO keseluruhan untuk data kita adalah 0,84, yang sangat baik. Nilai ini menunjukkan bahwa Anda dapat melanjutkan analisis faktor yang direncanakan.
Menentukan Jumlah Faktor
Untuk menentukan jumlah faktor, Anda dapat menggunakan kriteria Kaiser dan scree plot. Keduanya didasarkan pada eigenvalue.
# Create factor analysis object and perform factor analysis
fa = FactorAnalyzer()
fa.analyze(df, 25, rotation=None)
# Check Eigenvalues
ev, v = fa.get_eigenvalues()
ev
| Original_Eigenvalues | |
|---|---|
| 0 | 5.134311 |
| 1 | 2.751887 |
| 2 | 2.142702 |
| 3 | 1.852328 |
| 4 | 1.548163 |
| 5 | 1.073582 |
| 6 | 0.839539 |
| 7 | 0.799206 |
| 8 | 0.718989 |
| 9 | 0.688089 |
| 10 | 0.676373 |
| 11 | 0.651800 |
| 12 | 0.623253 |
| 13 | 0.596563 |
| 14 | 0.563091 |
| 15 | 0.543305 |
| 16 | 0.514518 |
| 17 | 0.494503 |
| 18 | 0.482640 |
| 19 | 0.448921 |
| 20 | 0.423366 |
| 21 | 0.400671 |
| 22 | 0.387804 |
| 23 | 0.381857 |
| 24 | 0.262539 |
Di sini, Anda dapat melihat hanya untuk 6 faktor eigenvalue lebih besar dari satu. Ini berarti kita perlu memilih hanya 6 faktor (atau variabel tak teramati).
# Create scree plot using matplotlib
plt.scatter(range(1,df.shape[1]+1),ev)
plt.plot(range(1,df.shape[1]+1),ev)
plt.title('Scree Plot')
plt.xlabel('Factors')
plt.ylabel('Eigenvalue')
plt.grid()
plt.show()
Metode scree plot menggambar garis untuk setiap faktor dan eigenvalue-nya. Jumlah eigenvalue yang lebih besar dari satu dianggap sebagai jumlah faktor.
Di sini, Anda dapat melihat hanya untuk 6 faktor eigenvalue lebih besar dari satu. Ini berarti kita perlu memilih hanya 6 faktor (atau variabel tak teramati).
Melakukan Analisis Faktor
# Create factor analysis object and perform factor analysis
fa = FactorAnalyzer()
fa.analyze(df, 6, rotation="varimax")
fa.loadings
| Factor1 | Factor2 | Factor3 | Factor4 | Factor5 | Factor6 | |
|---|---|---|---|---|---|---|
| A1 | 0.040783 | 0.095220 | 0.048734 | -0.113057 | -0.530987 | 0.161216 |
| A2 | 0.235538 | 0.033131 | 0.133714 | 0.063734 | 0.661141 | -0.006244 |
| A3 | 0.343008 | -0.009621 | 0.121353 | 0.033990 | 0.605933 | 0.160106 |
| A4 | 0.219717 | -0.081518 | 0.235140 | -0.125338 | 0.404594 | 0.086356 |
| A5 | 0.414458 | -0.149616 | 0.106382 | 0.030977 | 0.469698 | 0.236519 |
| C1 | 0.077248 | -0.004358 | 0.554582 | 0.190124 | 0.007511 | 0.095035 |
| C2 | 0.038370 | 0.068330 | 0.674545 | 0.087593 | 0.057055 | 0.152775 |
| C3 | 0.031867 | -0.039994 | 0.551164 | -0.011338 | 0.101282 | 0.008996 |
| C4 | -0.066241 | 0.216283 | -0.638475 | -0.143846 | -0.102617 | 0.318359 |
| C5 | -0.180812 | 0.284187 | -0.544838 | 0.025837 | -0.059955 | 0.132423 |
| E1 | -0.590451 | 0.022280 | 0.053915 | -0.071205 | -0.130851 | 0.156583 |
| E2 | -0.684578 | 0.233624 | -0.088497 | -0.045561 | -0.116716 | 0.115065 |
| E3 | 0.556774 | -0.000895 | 0.103390 | 0.241180 | 0.179396 | 0.267291 |
| E4 | 0.658395 | -0.136788 | 0.113798 | -0.107808 | 0.241143 | 0.158513 |
| E5 | 0.507535 | 0.034490 | 0.309813 | 0.200821 | 0.078804 | 0.008747 |
| N1 | 0.068011 | 0.805806 | -0.051264 | -0.074977 | -0.174849 | -0.096266 |
| N2 | 0.022958 | 0.789832 | -0.037477 | 0.006726 | -0.141134 | -0.139823 |
| N3 | -0.065687 | 0.725081 | -0.059039 | -0.010664 | -0.019184 | 0.062495 |
| N4 | -0.345072 | 0.578319 | -0.162174 | 0.062916 | 0.000403 | 0.147551 |
| N5 | -0.161675 | 0.523097 | -0.025305 | -0.161892 | 0.090125 | 0.120049 |
| O1 | 0.225339 | -0.020004 | 0.133201 | 0.479477 | 0.005178 | 0.218690 |
| O2 | -0.001982 | 0.156230 | -0.086047 | -0.496640 | 0.043989 | 0.134693 |
| O3 | 0.325954 | 0.011851 | 0.093880 | 0.566128 | 0.076642 | 0.210777 |
| O4 | -0.177746 | 0.207281 | -0.005671 | 0.349227 | 0.133656 | 0.178068 |
| O5 | -0.014221 | 0.063234 | -0.047059 | -0.576743 | -0.057561 | 0.135936 |
- Faktor 1 memiliki factor loading tinggi untuk E1,E2,E3,E4, dan E5 (Ekstraversi)
- Faktor 2 memiliki factor loading tinggi untuk N1,N2,N3,N4, dan N5 (Neurotisisme)
- Faktor 3 memiliki factor loading tinggi untuk C1,C2,C3,C4, dan C5 (Ketaatan/Conscientiousness)
- Faktor 4 memiliki factor loading tinggi untuk O1,O2,O3,O4, dan O5 (Keterbukaan/Openness)
- Faktor 5 memiliki factor loading tinggi untuk A1,A2,A3,A4, dan A5 (Keramahan/Agreeableness)
- Faktor 6 tidak memiliki loading tinggi pada variabel mana pun dan tidak mudah ditafsirkan. Lebih baik jika kita mengambil hanya lima faktor.
Mari lakukan analisis faktor untuk 5 faktor.
# Create factor analysis object and perform factor analysis using 5 factors
fa = FactorAnalyzer()
fa.analyze(df, 5, rotation="varimax")
fa.loadings
| Factor1 | Factor2 | Factor3 | Factor4 | Factor5 | |
|---|---|---|---|---|---|
| A1 | 0.040465 | 0.111126 | 0.022798 | -0.077931 | -0.428166 |
| A2 | 0.213716 | 0.029588 | 0.139037 | 0.062139 | 0.626946 |
| A3 | 0.317848 | 0.009357 | 0.109331 | 0.056196 | 0.650743 |
| A4 | 0.204566 | -0.066476 | 0.230584 | -0.112700 | 0.435624 |
| A5 | 0.393034 | -0.122113 | 0.087869 | 0.066708 | 0.537087 |
| C1 | 0.070184 | 0.010416 | 0.545824 | 0.209584 | 0.038878 |
| C2 | 0.033270 | 0.089574 | 0.648731 | 0.115434 | 0.102782 |
| C3 | 0.023907 | -0.030855 | 0.557036 | -0.005183 | 0.111578 |
| C4 | -0.064984 | 0.240410 | -0.633806 | -0.107535 | -0.037498 |
| C5 | -0.176395 | 0.290318 | -0.562467 | 0.036822 | -0.047525 |
| E1 | -0.574835 | 0.042819 | 0.033144 | -0.058795 | -0.104813 |
| E2 | -0.678731 | 0.244743 | -0.102483 | -0.042010 | -0.112517 |
| E3 | 0.536816 | 0.024180 | 0.083010 | 0.280877 | 0.257906 |
| E4 | 0.646833 | -0.115614 | 0.102023 | -0.073422 | 0.306101 |
| E5 | 0.504069 | 0.036145 | 0.312899 | 0.213739 | 0.090354 |
| N1 | 0.078923 | 0.786807 | -0.045997 | -0.084704 | -0.216363 |
| N2 | 0.027301 | 0.754109 | -0.030568 | -0.010304 | -0.193744 |
| N3 | -0.061430 | 0.731721 | -0.067084 | -0.004217 | -0.027712 |
| N4 | -0.345388 | 0.590602 | -0.178902 | 0.075225 | 0.005886 |
| N5 | -0.161291 | 0.537858 | -0.037309 | -0.149769 | 0.100931 |
| O1 | 0.213005 | -0.002224 | 0.115080 | 0.504907 | 0.061550 |
| O2 | 0.004560 | 0.175788 | -0.099729 | -0.468925 | 0.081809 |
| O3 | 0.310956 | 0.026736 | 0.076873 | 0.596007 | 0.126889 |
| O4 | -0.191196 | 0.220582 | -0.021906 | 0.369012 | 0.155475 |
| O5 | -0.005347 | 0.085401 | -0.062730 | -0.533778 | -0.010384 |
# Get variance of each factors
fa.get_factor_variance()
| Factor1 | Factor2 | Factor3 | Factor4 | Factor5 | |
|---|---|---|---|---|---|
| SS Loadings | 2.473090 | 2.709633 | 2.041106 | 1.522153 | 1.844498 |
| Proportion Var | 0.098924 | 0.108385 | 0.081644 | 0.060886 | 0.073780 |
| Cumulative Var | 0.098924 | 0.207309 | 0.288953 | 0.349839 | 0.423619 |
Total 42% Varians kumulatif dijelaskan oleh 5 faktor.
Kelebihan dan Kekurangan Analisis Faktor
Analisis faktor mengeksplorasi dataset besar dan menemukan keterkaitan yang saling terhubung. Metode ini mengurangi variabel teramati menjadi beberapa variabel tak teramati atau mengidentifikasi kelompok variabel yang saling berkaitan, yang membantu peneliti pasar meringkas situasi pasar dan menemukan hubungan tersembunyi di antara selera, preferensi, dan pengaruh budaya konsumen. Selain itu, metode ini membantu memperbaiki kuesioner untuk survei di masa depan. Faktor memudahkan interpretasi data yang lebih alami.
Hasil analisis faktor dapat memicu perdebatan. Interpretasinya bisa diperdebatkan karena lebih dari satu interpretasi dapat dibuat dari faktor data yang sama. Setelah identifikasi faktor, penamaan faktor memerlukan pengetahuan domain.
Kesimpulan
Selamat, Anda telah sampai di akhir tutorial ini!
Dalam tutorial ini, Anda telah mempelajari apa itu analisis faktor. Jenis-jenis analisis faktor, bagaimana analisis faktor bekerja, terminologi dasar analisis faktor, penentuan jumlah faktor, perbandingan antara principal component analysis dan analisis faktor, implementasi di Python menggunakan paket FactorAnalyzer untuk Python, serta kelebihan dan kekurangannya.
Saya menantikan masukan atau pertanyaan apa pun. Anda dapat mengajukan pertanyaan dengan meninggalkan komentar dan saya akan berusaha sebaik mungkin untuk menjawabnya.
Jika Anda ingin mempelajari lebih lanjut tentang faktor di Python, ikuti kursus DataCamp Unsupervised Learning in Python.
