Ga naar hoofdinhoud

Introductie tot factoranalyse in Python

In deze tutorial leer je de basis van factoranalyse en hoe je die in Python implementeert.
Bijgewerkt 2 okt 2026  · 10 min lezen

Verken met AI

ChatGPTClaudePerplexity

Factoranalyse (FA) is een verkennende data-analysemethode die wordt gebruikt om invloedrijke onderliggende factoren of latente variabelen te zoeken in een set geobserveerde variabelen. Het helpt bij de interpretatie van data door het aantal variabelen te verminderen. Het extraheert maximale gemeenschappelijke variantie uit alle variabelen en zet die om in een gemeenschappelijke score.

Factoranalyse wordt veel gebruikt in marktonderzoek, reclame, psychologie, financiën en operationeel onderzoek. Marktonderzoekers gebruiken factoranalyse om prijsgevoelige klanten te identificeren, om merkkenmerken te vinden die de consumentenkeuze beïnvloeden, en om criteria voor kanaalselectie binnen het distributiekanaal te begrijpen.

Factoranalyse

Factoranalyse is een lineair statistisch model. Het wordt gebruikt om de variantie tussen de geobserveerde variabele te verklaren en een set geobserveerde variabelen te reduceren tot de niet-geobserveerde variabelen die factoren worden genoemd. Geobserveerde variabelen worden gemodelleerd als een lineaire combinatie van factoren en fouttermen (Bron). Een factor of latente variabele is verbonden met meerdere geobserveerde variabelen die gemeenschappelijke antwoordpatronen hebben. Elke factor verklaart een bepaalde hoeveelheid variantie in de geobserveerde variabelen. Het helpt bij data-interpretatie door het aantal variabelen te verminderen.

Factoranalyse is een methode om te onderzoeken of een aantal variabelen van belang X1, X2,……., Xl lineair gerelateerd zijn aan een kleiner aantal niet-observeerbare factoren F1, F2,..……, Fk.

Bron: Deze afbeelding is opnieuw gemaakt op basis van een afbeelding die ik vond in collegedictaten over factoranalyse. De afbeelding geeft een volledig beeld van factoranalyse.

Aannames:

  1. Er zijn geen uitschieters in de data.
  2. De steekproefgrootte moet groter zijn dan het aantal factoren.
  3. Er mag geen perfecte multicollineariteit zijn.
  4. Er mag geen homoscedasticiteit tussen de variabelen zijn.

Soorten factoranalyse

  • Exploratory Factor Analysis: Dit is de meest populaire factoranalysebenadering onder sociale en managementonderzoekers. De basisaanname is dat elke geobserveerde variabele direct verbonden kan zijn met elke factor.
  • Confirmatory Factor Analysis (CFA): De basisaanname is dat elke factor geassocieerd is met een specifieke set geobserveerde variabelen. CFA bevestigt wat op basis van de theorie wordt verwacht.

Hoe werkt factoranalyse?

Het primaire doel van factoranalyse is het verminderen van het aantal geobserveerde variabelen en het vinden van niet-geobserveerde variabelen. Deze niet-geobserveerde variabelen helpen de marktonderzoeker om conclusies te trekken uit de enquête. Deze omzetting van geobserveerde naar niet-geobserveerde variabelen gebeurt in twee stappen:

  • Factor-extractie: In deze stap worden het aantal factoren en de extractiebenadering gekozen met behulp van variantie-opdelingsmethoden zoals principale componentenanalyse en common factor analysis.
  • Factorrotatie: In deze stap probeert rotatie factoren om te zetten in ongecorreleerde factoren — het hoofddoel is de algehele interpreteerbaarheid te verbeteren. Er zijn veel rotatiemethoden beschikbaar, zoals: Varimax-rotatie, Quartimax-rotatie en Promax-rotatie.

Terminologie

Wat is een factor?

Een factor is een latente variabele die de samenhang beschrijft tussen meerdere geobserveerde variabelen. Het maximale aantal factoren is gelijk aan het aantal geobserveerde variabelen. Elke factor verklaart een bepaalde variantie in geobserveerde variabelen. De factoren met de laagste variantie worden weggelaten. Factoren staan ook bekend als latente variabelen, verborgen variabelen, niet-geobserveerde variabelen of hypothetische variabelen.

Wat zijn factorladingen?

De factorlading is een matrix die de relatie van elke variabele met de onderliggende factor laat zien. Het toont de correlatiecoëfficiënt tussen de geobserveerde variabele en de factor. Het laat de door de geobserveerde variabelen verklaarde variantie zien.

Wat zijn eigenwaarden?

Eigenwaarden representeren de door elke factor verklaarde variantie uit de totale variantie. Ze staan ook bekend als karakteristieke wortels.

Wat zijn communaliteiten?

Communaliteiten zijn de som van de gekwadrateerde ladingen voor elke variabele. Ze vertegenwoordigen de gemeenschappelijke variantie. Ze liggen tussen 0 en 1 en een waarde dicht bij 1 staat voor meer verklaarde variantie.

Wat is factorrotatie?

Rotatie is een hulpmiddel voor een betere interpretatie van factoranalyse. Rotatie kan orthogonaal of oblieek zijn. Het herverdeelt de communaliteiten met een duidelijk patroon van ladingen.

Het aantal factoren kiezen

Het Kaiser-criterium is een analytische benadering die is gebaseerd op het kiezen van de factor met een groter aandeel verklaarde variantie. De eigenwaarde is een goed criterium om het aantal factoren te bepalen. Over het algemeen wordt een eigenwaarde groter dan 1 beschouwd als selectiecriterium voor de component.

De grafische benadering is gebaseerd op de visuele weergave van de eigenwaarden van factoren, ook wel screeplot genoemd. Deze screeplot helpt ons het aantal factoren te bepalen op het punt waar de curve een knik (elbow) vertoont.

Bron

Factoranalyse vs. principal component analysis

  • PCA-componenten verklaren de maximale hoeveelheid variantie, terwijl factoranalyse de covariantie in data verklaart.
  • PCA-componenten zijn volledig orthogonaal aan elkaar, terwijl factoranalyse niet vereist dat factoren orthogonaal zijn.
  • Een PCA-component is een lineaire combinatie van de geobserveerde variabele, terwijl in FA de geobserveerde variabelen lineaire combinaties zijn van de niet-geobserveerde variabele of factor.
  • PCA-componenten zijn moeilijk te interpreteren. In FA zijn onderliggende factoren te labelen en te interpreteren.
  • PCA is een vorm van dimensionaliteitsreductie, terwijl factoranalyse een latente-variabelemethode is.
  • PCA is een type factoranalyse. PCA is observationeel, terwijl FA een modelleertechniek is.

Bron

Factoranalyse in Python met het pakket factor_analyzer

Benodigde libraries importeren

# Import required libraries
import pandas as pd
from sklearn.datasets import load_iris
from factor_analyzer import FactorAnalyzer
import matplotlib.pyplot as plt

Data laden

Laten we factoranalyse uitvoeren op BFI (dataset gebaseerd op een project voor persoonlijkheidsbeoordeling), die is verzameld met een 6-puntsschaal: 1 Zeer onjuist, 2 Matig onjuist, 3 Licht onjuist, 4 Licht juist, 5 Matig juist en 6 Zeer juist. Je kunt deze dataset ook downloaden via de volgende link: https://vincentarelbundock.github.io/Rdatasets/datasets.html

df= pd.read_csv("bfi.csv")

Data preprocesen

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 rijen × 25 kolommen

Toets op geschiktheid

Voordat je factoranalyse uitvoert, moet je de “factorabiliteit” van je dataset beoordelen. Factorabiliteit betekent: kunnen we factoren in de dataset vinden? Er zijn twee methoden om de factorabiliteit of steekproefgeschiktheid te toetsen:

  • Bartlett-toets
  • Kaiser-Meyer-Olkin-toets

Bartlett’s sfericiteitstoets controleert of de geobserveerde variabelen onderling correleren door de geobserveerde correlatiematrix te toetsen tegen de identiteitsmatrix. Als de toets niet statistisch significant is, moet je geen factoranalyse toepassen.

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)

In deze Bartlett-toets is de p-waarde 0. De toets is statistisch significant, wat aangeeft dat de geobserveerde correlatiematrix geen identiteitsmatrix is.

Kaiser-Meyer-Olkin (KMO)-toets meet de geschiktheid van data voor factoranalyse. Het bepaalt de geschiktheid voor elke geobserveerde variabele en voor het volledige model. KMO schat het aandeel variantie tussen alle geobserveerde variabelen. Een lager aandeel unieke variantie is geschikter voor factoranalyse. KMO-waarden liggen tussen 0 en 1. Een KMO-waarde kleiner dan 0,6 wordt als onvoldoende beschouwd.

from factor_analyzer.factor_analyzer import calculate_kmo
kmo_all,kmo_model=calculate_kmo(df)

kmo_model

0.8486452309468382

De algehele KMO voor onze data is 0,84, wat uitstekend is. Deze waarde geeft aan dat je kunt doorgaan met de geplande factoranalyse.

Het aantal factoren kiezen

Voor het kiezen van het aantal factoren kun je het Kaiser-criterium en de screeplot gebruiken. Beide zijn gebaseerd op eigenwaarden.

# 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

Hier zie je dat alleen voor 6 factoren de eigenwaarden groter dan één zijn. Dat betekent dat we slechts 6 factoren (of niet-geobserveerde variabelen) moeten kiezen.

# 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()

De screeplot tekent een lijn voor elke factor en de bijbehorende eigenwaarden. Het aantal eigenwaarden groter dan één wordt beschouwd als het aantal factoren.

Hier zie je dat alleen voor 6 factoren de eigenwaarden groter dan één zijn. Dat betekent dat we slechts 6 factoren (of niet-geobserveerde variabelen) moeten kiezen.

Factoranalyse uitvoeren

# 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
  • Factor 1 heeft hoge factorladingen voor E1, E2, E3, E4 en E5 (Extraversie)
  • Factor 2 heeft hoge factorladingen voor N1, N2, N3, N4 en N5 (Neuroticisme)
  • Factor 3 heeft hoge factorladingen voor C1, C2, C3, C4 en C5 (Consciëntieusheid)
  • Factor 4 heeft hoge factorladingen voor O1, O2, O3, O4 en O5 (Openheid)
  • Factor 5 heeft hoge factorladingen voor A1, A2, A3, A4 en A5 (Vriendelijkheid)
  • Factor 6 heeft geen hoge ladingen voor welke variabele dan ook en is niet gemakkelijk te interpreteren. Het is beter om slechts vijf factoren te nemen.

Laten we factoranalyse uitvoeren voor 5 factoren.

# 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

In totaal wordt 42% cumulatieve variantie verklaard door de 5 factoren.

Voor- en nadelen van factoranalyse

Factoranalyse verkent grote datasets en vindt onderling verbonden samenhangen. Het reduceert de geobserveerde variabelen tot enkele niet-geobserveerde variabelen of identificeert groepen onderling gerelateerde variabelen, wat marktonderzoekers helpt om marktsituaties te comprimeren en verborgen relaties te vinden tussen smaak, voorkeur en culturele invloeden van consumenten. Ook helpt het bij het verbeteren van vragenlijsten voor toekomstige enquêtes. Factoren zorgen voor een natuurlijkere data-interpretatie.

De resultaten van factoranalyse zijn soms controversieel. De interpretaties kunnen discutabel zijn, omdat meer dan één interpretatie van dezelfde data mogelijk is. Na factoridentificatie en het benoemen van factoren is domeinkennis vereist.

Conclusie

Gefeliciteerd, je bent aan het einde van deze tutorial gekomen!

In deze tutorial heb je geleerd wat factoranalyse is, de verschillende soorten factoranalyse, hoe factoranalyse werkt, basisterminologie rond factoranalyse, het kiezen van het aantal factoren, de vergelijking tussen principal component analysis en factoranalyse, de implementatie in Python met het pakket FactorAnalyzer, en de voor- en nadelen van factoranalyse.

Ik hoor graag je feedback of vragen. Je kunt je vraag achterlaten in een reactie en ik zal mijn best doen om te antwoorden.

Wil je meer leren over factoren in Python? Volg dan de DataCamp-cursus Unsupervised Learning in Python.

Onderwerpen
Python
Data Science

Python-cursussen

Cursus

Introductie tot Python

4 uur
7M
Leer de basis van data-analyse met Python in 4 uur. Deze online cursus laat je kennismaken met de Python-interface en populaire pakketten.
Bekijk detailsRight Arrow
Start Cursus
Meer bekijkenRight Arrow
Gerelateerd

blog

AI vanaf nul leren in 2026: een complete gids van de experts

Ontdek alles wat je moet weten om in 2026 AI te leren, van tips om te beginnen tot handige resources en inzichten van industrie-experts.
Adel Nehme's photo

Adel Nehme

15 min

Meer BekijkenMeer Bekijken