here::here("code", "_common.R") |>
source()
# Load packages
if (!requireNamespace("pacman")) install.packages("pacman")
pacman::p_load(lavaan, psych, GPArotation)
27 L’estrazione dei fattori
- Come implementare il metodo delle componenti principali per l’estrazione delle saturazioni fattoriali utilizzando l’algebra matriciale.
- Come implementare il metodo dei fattori principali e comprenderne i fondamenti teorici.
- Il funzionamento del metodo dei fattori principali iterato, con un focus sul processo di convergenza.
- Le caratteristiche principali del metodo di massima verosimiglianza e il suo utilizzo nell’analisi fattoriale.
- Leggere il capitolo Factor Analysis and Principal Component Analysis del testo di Petersen (2024).
27.1 Introduzione
L’analisi fattoriale è una tecnica statistica multivariata utilizzata per identificare strutture latenti, ovvero fattori non osservabili, che spiegano le correlazioni tra variabili osservate.
In altre parole, quando abbiamo molte variabili (es. item di un questionario), l’analisi fattoriale cerca di scoprire quali gruppi di item misurano lo stesso costrutto psicologico sottostante, riducendo così la complessità dei dati.
Questa tecnica è particolarmente utile nelle scienze sociali e in psicologia, dove costrutti astratti come intelligenza, ansia o autostima non possono essere misurati direttamente, ma solo attraverso più item. L’analisi fattoriale aiuta a verificare se questi item misurano effettivamente un numero limitato di costrutti sottostanti, rendendo i dati più interpretabili.
27.1.1 Il modello statistico dell’analisi fattoriale
Il modello matematico alla base dell’analisi fattoriale si esprime così:
\[ \boldsymbol{\Sigma} = \boldsymbol{\Lambda} \boldsymbol{\Phi} \boldsymbol{\Lambda}^{\mathsf{T}} + \boldsymbol{\Psi}, \]
dove:
- \(\boldsymbol{\Sigma}\) è la matrice delle covarianze osservate tra le variabili;
- \(\boldsymbol{\Lambda}\) è la matrice dei carichi fattoriali: ciascun elemento rappresenta l’intensità della relazione tra una variabile osservata e un fattore latente;
- \(\boldsymbol{\Phi}\) è la matrice delle correlazioni tra i fattori (è l’identità se i fattori sono ortogonali, cioè non correlati);
- \(\boldsymbol{\Psi}\) è una matrice diagonale contenente le unicità (la porzione di varianza di ciascuna variabile che non è spiegata dai fattori comuni).
Questo modello riflette l’idea che ogni variabile osservata sia influenzata da uno o più fattori comuni, più una componente specifica e casuale (l’unicità).
27.2 Estrazione dei Fattori: Panoramica dei Metodi
L’estrazione dei fattori consiste nel stimare i parametri del modello (soprattutto \(\boldsymbol{\Lambda}\)), sulla base della matrice di correlazioni o covarianze. I diversi metodi si distinguono per:
- le assunzioni statistiche (es. normalità dei dati);
- il tipo di informazione utilizzata (es. varianza totale o varianza comune);
- la possibilità di testare l’adattamento del modello ai dati.
Metodo | Tiene conto della specificità? | Richiede normalità? | Permette test di bontà del modello? |
---|---|---|---|
Componenti principali (PCA) | ❌ No | ❌ No | ❌ No |
Fattori principali | ✅ Sì | ❌ No | ❌ No |
Fattori principali iterato | ✅ Sì (con aggiornamenti) | ❌ No | ❌ No |
Massima verosimiglianza (ML) | ✅ Sì | ✅ Sì | ✅ Sì |
Vediamo ora in dettaglio ciascun metodo.
27.3 Metodo delle Componenti Principali (PCA)
❗ Importante: Sebbene sia molto diffuso, il metodo delle componenti principali (Principal Component Analysis, PCA) non è un vero metodo fattoriale. Non fa distinzione tra varianza comune (quella condivisa tra variabili) e varianza specifica (quella unica di ogni variabile), e non assume l’esistenza di fattori latenti. Per questo motivo, in psicometria, viene usato per riduzione della dimensionalità, non per identificare costrutti teorici.
27.3.1 Obiettivo
La PCA costruisce un numero ridotto di componenti principali:
- sono combinazioni lineari delle variabili originali;
- sono ortogonali (cioè non correlate tra loro);
- spiegano progressivamente la massima varianza possibile nei dati.
27.3.2 Fondamento teorico: il teorema spettrale
La PCA si basa sul teorema spettrale, che dice che ogni matrice simmetrica (come la matrice di correlazione \(\mathbf{R}\)) può essere scomposta come:
\[ \mathbf{R} = \mathbf{C} \mathbf{D} \mathbf{C}^{\mathsf{T}}, \]
dove:
- \(\mathbf{C}\) è la matrice i cui vettori colonna sono gli autovettori (direzioni principali) di \(\mathbf{R}\);
- \(\mathbf{D}\) è una matrice diagonale con gli autovalori (quantità di varianza spiegata da ciascuna direzione);
- \(\mathbf{C}^{\mathsf{T}}\) è la trasposta di \(\mathbf{C}\).
Questa è la scomposizione spettrale della matrice \(\mathbf{R}\).
27.3.3 Costruzione delle saturazioni (carichi)
Vogliamo una matrice \(\hat{\boldsymbol{\Lambda}}\) che approssimi la matrice \(\mathbf{R}\):
\[ \mathbf{R} \approx \hat{\boldsymbol{\Lambda}} \hat{\boldsymbol{\Lambda}}^\mathsf{T}. \]
Poiché \(\mathbf{D}\) è diagonale, possiamo scriverla come:
\[ \mathbf{D} = \mathbf{D}^{1/2} \cdot \mathbf{D}^{1/2}, \]
dove \(\mathbf{D}^{1/2}\) ha sulla diagonale le radici quadrate degli autovalori. Allora:
\[ \mathbf{R} = \mathbf{C} \mathbf{D}^{1/2} \cdot \mathbf{D}^{1/2} \mathbf{C}^{\mathsf{T}}. \]
Definiamo:
\[ \hat{\boldsymbol{\Lambda}} = \mathbf{C} \mathbf{D}^{1/2}, \]
e otteniamo:
\[ \hat{\boldsymbol{\Lambda}} \hat{\boldsymbol{\Lambda}}^\mathsf{T} = \mathbf{R}. \]
💡 Le saturazioni si ottengono moltiplicando ogni autovettore per la radice quadrata dell’autovalore corrispondente. Questo consente di ricostruire esattamente la matrice \(\mathbf{R}\).
Ogni elemento \(l_{ij}\) di \(\hat{\boldsymbol{\Lambda}}\) indica quanto la variabile \(i\) contribuisce alla componente \(j\).
Quando si selezionano solo i primi \(k\) autovalori e autovettori (cioè quelli che spiegano più varianza), si ottiene una rappresentazione semplificata dei dati, utile per la riduzione della dimensionalità.
27.3.4 Interpretazione
- Gli autovalori indicano quanta varianza è spiegata da ciascuna componente.
- Le componenti principali sono nuove variabili non osservate, che sintetizzano l’informazione contenuta nelle variabili originali.
27.3.5 Limiti della PCA come analisi fattoriale
- Non separa varianza comune da varianza specifica.
- Non assume fattori latenti.
- Non consente di valutare l’adattamento del modello ai dati.
27.3.6 Quando usarla
La PCA è utile quando:
- si vuole ridurre il numero di variabili mantenendo la massima varianza;
- si desidera costruire indici sintetici (es. punteggi compositi);
- si vuole esplorare la struttura dei dati in modo preliminare.
Non è invece adatta quando l’obiettivo è identificare costrutti latenti teorici.
27.4 Metodo dei Fattori Principali
Il metodo dei fattori principali (principal factor method) si differenzia dalla PCA perché considera solo la varianza comune tra le variabili, escludendo la varianza specifica e l’errore.
27.4.1 Procedura
- Si stima la comunalità iniziale di ogni variabile (cioè la quota di varianza spiegata da fattori comuni).
- Si sostituiscono le varianze totali sulla diagonale della matrice \(\mathbf{R}\) con le comunalità stimate.
- Si esegue la decomposizione spettrale sulla nuova matrice per ottenere autovettori e autovalori.
- Si costruisce la matrice dei carichi fattoriali.
27.4.2 Stima delle comunalità iniziali
Può essere fatta, ad esempio:
- prendendo il massimo quadrato della correlazione della variabile con le altre;
- oppure il \(R^2\) da una regressione multipla della variabile sulle altre.
27.4.3 Vantaggi
- Tiene conto della specificità delle variabili.
- È più coerente con il modello fattoriale classico.
27.4.4 Limiti
- I risultati dipendono fortemente dalla stima iniziale delle comunalità.
- Non permette test di bontà dell’adattamento del modello.
27.5 Metodo dei Fattori Principali Iterato
Questo metodo affina il precedente aggiornando iterativamente le comunalità:
- si calcolano carichi fattoriali e comunalità iniziali;
- si sostituiscono le nuove comunalità nella diagonale;
- si ripete la procedura finché i valori convergono.
27.5.1 Vantaggi
- Fornisce stime più stabili delle comunalità.
- Migliora la qualità della rappresentazione se la struttura è forte.
27.5.2 Limiti
- Può generare soluzioni improprie (es. comunalità > 1: problemi di Heywood).
- Non offre criteri interni per la scelta del numero di fattori.
27.6 Metodo della Massima Verosimiglianza (ML)
Il metodo di massima verosimiglianza assume che i dati provengano da una distribuzione normale multivariata. Si basa sulla stima dei parametri che rendono massimamente probabile l’osservazione dei dati dati i parametri.
27.6.1 Caratteristiche
- Permette di stimare carichi, unicità e correlazioni tra fattori.
- Fornisce un test statistico di bontà dell’adattamento (test chi-quadro).
- Permette confronti tra modelli alternativi (usando AIC, BIC, etc.).
27.6.2 Vantaggi
- È il più coerente con un’interpretazione psicometrica.
- Consente analisi inferenziali e confronti tra ipotesi.
27.6.3 Limiti
- Sensibile alle violazioni della normalità.
- Richiede campioni sufficientemente numerosi.
- Può non convergere in presenza di dati problematici.
🎓 Suggerimento:
Se l’obiettivo è identificare costrutti psicologici latenti, scegliete metodi coerenti con il modello fattoriale, come la massima verosimiglianza.
Se invece volete solo ridurre le dimensioni dei dati per scopi descrittivi o pratici, allora la PCA può essere sufficiente.
27.7 Esempio in R: Confronto tra Metodi di Estrazione
Per illustrare i principali metodi di estrazione dei fattori, useremo un semplice esempio tratto da Rencher (2010). Una ragazza ha valutato 7 persone su 5 tratti personali:
-
K = Kind (Gentile)
-
I = Intelligent (Intelligente)
-
H = Happy (Felice)
-
L = Likeable (Simpatica)
- J = Just (Giusta)
La matrice di correlazione tra i tratti è la seguente:
R <- matrix(c(
1.000, .296, .881, .995, .545,
.296, 1.000, -.022, .326, .837,
.881, -.022, 1.000, .867, .130,
.995, .326, .867, 1.000, .544,
.545, .837, .130, .544, 1.000
),
ncol = 5, byrow = TRUE,
dimnames = list(c("K", "I", "H", "L", "J"),
c("K", "I", "H", "L", "J")))
R
#> K I H L J
#> K 1.000 0.296 0.881 0.995 0.545
#> I 0.296 1.000 -0.022 0.326 0.837
#> H 0.881 -0.022 1.000 0.867 0.130
#> L 0.995 0.326 0.867 1.000 0.544
#> J 0.545 0.837 0.130 0.544 1.000
27.7.1 Metodo delle Componenti Principali (PCA)
1. Calcolo degli autovalori e autovettori.
e <- eigen(R)
e$values # varianza spiegata da ciascuna componente
#> [1] 3.2633766 1.5383821 0.1679693 0.0300298 0.0002422
e$vectors # coefficienti delle combinazioni lineari
#> [,1] [,2] [,3] [,4] [,5]
#> [1,] -0.5367 -0.1860 -0.18992 -0.1248 0.7910
#> [2,] -0.2875 0.6506 0.68489 -0.1198 0.1034
#> [3,] -0.4344 -0.4737 0.40695 0.6137 -0.2116
#> [4,] -0.5374 -0.1693 -0.09533 -0.6294 -0.5266
#> [5,] -0.3897 0.5377 -0.56583 0.4442 -0.2037
- Gli autovalori indicano quanta varianza spiega ciascuna componente.
- Gli autovettori sono le “direzioni” lungo cui le componenti combinano le variabili.
2. Verifica della decomposizione spettrale.
Questa moltiplicazione ricostruisce la matrice di correlazione originale:
\(\mathbf{R} = \mathbf{C} \mathbf{D} \mathbf{C}^{\mathsf{T}}\)
3. Varianza spiegata dai primi 2 fattori.
Interpretazione: Se i primi due autovalori spiegano, ad esempio, il 96% della varianza totale, possiamo ridurre da 5 a 2 dimensioni con perdita minima di informazione.
4. Calcolo delle saturazioni fattoriali (matrice \(\hat{\Lambda}\)).
- Ogni colonna rappresenta una componente.
- Ogni riga rappresenta una variabile.
- Gli elementi indicano quanto una variabile satura su una componente.
5. Matrice riprodotta e residui.
Se i residui (cioè la differenza tra \(\mathbf{R}\) e \(\hat{\Lambda} \hat{\Lambda}^\mathsf{T}\)) sono piccoli, la soluzione a 2 fattori è soddisfacente.
27.7.2 Metodo dei Fattori Principali
Il metodo dei fattori principali (o principal factor method) mira a estrarre solo la varianza comune tra le variabili, escludendo la varianza specifica (quella unica di ciascuna variabile).
Stima iniziale delle comunalità.
Per avere una stima iniziale delle comunalità, qui si propone di prendere, per ciascuna variabile, il massimo valore di correlazione in valore assoluto, escludendo la diagonale principale della matrice delle correlazioni (che rappresenta la correlazione di ogni variabile con sé stessa, pari a 1). In R si può fare così:
# Copiamo la matrice di correlazione
R_no_diag <- R
# Mettiamo 0 sulla diagonale (anziché 1)
diag(R_no_diag) <- 0
# Calcoliamo il massimo (in valore assoluto) per ogni riga
h.hat <- apply(abs(R_no_diag), 1, max)
# Arrotondiamo a 3 cifre decimali
round(h.hat, 3)
#> K I H L J
#> 0.995 0.837 0.881 0.995 0.837
Questa stima della comunalità (per ogni variabile) è volutamente molto semplificata e potrebbe risultare meno accurata di altre procedure (ad esempio, correlazione multipla al quadrato). Tuttavia, si usa spesso a scopo didattico per illustrare l’algoritmo.
Matrice ridotta.
Creiamo la matrice ridotta sostituendo la diagonale di \(R\) (che vale 1, in quanto matrice di correlazione) con i valori stimati di comunalità:
R1 <- R
diag(R1) <- h.hat
R1
#> K I H L J
#> K 0.995 0.296 0.881 0.995 0.545
#> I 0.296 0.837 -0.022 0.326 0.837
#> H 0.881 -0.022 0.881 0.867 0.130
#> L 0.995 0.326 0.867 0.995 0.544
#> J 0.545 0.837 0.130 0.544 0.837
Decomposizione della matrice ridotta.
Calcoliamo gli autovalori e gli autovettori della matrice ridotta:
Saturazioni fattoriali.
Infine, estraiamo le saturazioni fattoriali per i fattori desiderati (ad esempio, i primi due). Le saturazioni (\(\mathbf{L}\)) indicano la relazione tra le variabili originali e i fattori latenti, considerando solo la varianza comune:
Conclusione: questa procedura illustra il metodo dei fattori principali e mostra come escludere correttamente la diagonale principale dal calcolo delle comunalità iniziali, utilizzando il massimo (in valore assoluto) delle correlazioni di ogni variabile con le altre.
27.7.3 Metodo dei Fattori Principali Iterato
Questo metodo aggiorna iterativamente le stime delle comunalità finché le saturazioni non cambiano più (convergenza).
Esecuzione in R con il pacchetto psych
.
pa <- psych::fa(R, nfactors = 2, rotate = "none", fm = "pa")
pa
#> Factor Analysis using method = pa
#> Call: psych::fa(r = R, nfactors = 2, rotate = "none", fm = "pa")
#> Standardized loadings (pattern matrix) based upon correlation matrix
#> PA1 PA2 h2 u2 com
#> K 0.98 -0.21 1.01 -0.008 1.1
#> I 0.48 0.74 0.77 0.230 1.7
#> H 0.78 -0.56 0.92 0.085 1.8
#> L 0.98 -0.19 0.99 0.010 1.1
#> J 0.69 0.69 0.95 0.049 2.0
#>
#> PA1 PA2
#> SS loadings 3.22 1.41
#> Proportion Var 0.64 0.28
#> Cumulative Var 0.64 0.93
#> Proportion Explained 0.70 0.30
#> Cumulative Proportion 0.70 1.00
#>
#> Mean item complexity = 1.5
#> Test of the hypothesis that 2 factors are sufficient.
#>
#> df null model = 10 with the objective function = 12
#> df of the model are 1 and the objective function was 5.6
#>
#> The root mean square of the residuals (RMSR) is 0.01
#> The df corrected root mean square of the residuals is 0.04
#>
#> Fit based upon off diagonal values = 1
-
fm = "pa"
: specifica il metodo dei fattori principali. - L’output include:
- saturazioni fattoriali;
- unicità (\(1 - h^2\));
- varianza spiegata da ciascun fattore.
⚠️ Se una unicità > 1 o negativa → soluzione impropria (caso di Heywood).
27.8 Metodo di Massima Verosimiglianza (ML)
Questo è il metodo più coerente con l’analisi fattoriale teorica: assume normalità multivariata e consente test formali di adattamento.
Esecuzione con factanal()
.
ml <- factanal(
covmat = R,
factors = 2,
rotation = "none",
n.obs = 225 # necessario per il test chi-quadro
)
ml
#>
#> Call:
#> factanal(factors = 2, covmat = R, n.obs = 225, rotation = "none")
#>
#> Uniquenesses:
#> K I H L J
#> 0.005 0.268 0.055 0.008 0.005
#>
#> Loadings:
#> Factor1 Factor2
#> K 0.955 -0.289
#> I 0.528 0.673
#> H 0.720 -0.653
#> L 0.954 -0.287
#> J 0.764 0.642
#>
#> Factor1 Factor2
#> SS loadings 3.203 1.457
#> Proportion Var 0.641 0.291
#> Cumulative Var 0.641 0.932
#>
#> Test of the hypothesis that 2 factors are sufficient.
#> The chi square statistic is 648.1 on 1 degree of freedom.
#> The p-value is 5.81e-143
-
loadings
: saturazioni fattoriali -
uniquenesses
: varianza specifica di ciascuna variabile -
test statistic
: test chi-quadro per valutare se i fattori estratti spiegano sufficientemente la correlazione tra le variabili
Il p-value indica se il modello a 2 fattori è adeguato:
- p alto → il modello spiega bene i dati (non c’è differenza significativa con la matrice osservata).
- p basso → il modello è insufficiente (i residui sono troppo grandi).
Se vogliamo usare lavaan
dobbiamo introdurre una rotazione obliqua:
ml2 <- factanal(
covmat = R,
factors = 2,
rotation = "oblimin",
n.obs = 225
)
ml2
#>
#> Call:
#> factanal(factors = 2, covmat = R, n.obs = 225, rotation = "oblimin")
#>
#> Uniquenesses:
#> K I H L J
#> 0.005 0.268 0.055 0.008 0.005
#>
#> Loadings:
#> Factor1 Factor2
#> K 0.927 0.192
#> I 0.875
#> H 1.011 -0.257
#> L 0.925 0.193
#> J 0.116 0.959
#>
#> Factor1 Factor2
#> SS loadings 2.759 1.827
#> Proportion Var 0.552 0.365
#> Cumulative Var 0.552 0.917
#>
#> Factor Correlations:
#> Factor1 Factor2
#> Factor1 1.000 -0.277
#> Factor2 -0.277 1.000
#>
#> Test of the hypothesis that 2 factors are sufficient.
#> The chi square statistic is 648.1 on 1 degree of freedom.
#> The p-value is 5.81e-143
Replichiamo ora i risultati con lavaan
:
fit <- efa(sample.cov = R,
sample.nobs = 225,
nfactors = 1:2,
rotation = "geomin",
rotation.args = list(geomin.epsilon = 0.01, rstarts = 1))
summary(fit, nd = 3L, cutoff = 0.2, dot.cutoff = 0.05)
#> This is lavaan 0.6-19 -- running exploratory factor analysis
#>
#> Estimator ML
#> Rotation method GEOMIN OBLIQUE
#> Geomin epsilon 0.01
#> Rotation algorithm (rstarts) GPA (1)
#> Standardized metric TRUE
#> Row weights None
#>
#> Number of observations 225
#>
#> Overview models:
#> aic bic sabic chisq df pvalue cfi rmsea
#> nfactors = 1 1734 1768 1737 1227.0 5 0 0.546 1.042
#> nfactors = 2 1122 1170 1126 607.1 1 0 0.775 1.641
#>
#> Eigenvalues correlation matrix:
#>
#> ev1 ev2 ev3 ev4 ev5
#> 3.263377 1.538382 0.167969 0.030030 0.000242
#>
#> Number of factors: 1
#>
#> Standardized loadings: (* = significant at 1% level)
#>
#> f1 unique.var communalities
#> K 1.000 0.000 1.000
#> I 0.296* 0.912 0.088
#> H 0.881* 0.224 0.776
#> L 0.995* 0.010 0.990
#> J 0.545* 0.703 0.297
#>
#> f1
#> Sum of squared loadings 3.151
#> Proportion of total 1.000
#> Proportion var 0.630
#> Cumulative var 0.630
#>
#> Number of factors: 2
#>
#> Standardized loadings: (* = significant at 1% level)
#>
#> f1 f2 unique.var communalities
#> K 0.967* .* 0.000 1.000
#> I .* 0.876* 0.263 0.737
#> H 1.031* -0.360* 0.049 0.951
#> L 0.961* .* 0.010 0.990
#> J .* 0.933* 0.000 1.000
#>
#> f1 f2 total
#> Sum of sq (obliq) loadings 2.922 1.755 4.678
#> Proportion of total 0.625 0.375 1.000
#> Proportion var 0.584 0.351 0.936
#> Cumulative var 0.584 0.936 0.936
#>
#> Factor correlations: (* = significant at 1% level)
#>
#> f1 f2
#> f1 1.000
#> f2 0.325 1.000
fitMeasures(fit, fit.measures = "all")
#> nfct=1 nfct=2
#> npar 9.000 14.000
#> fmin 2.727 1.349
#> chisq 1226.984 607.148
#> df 5.000 1.000
#> pvalue 0.000 0.000
#> baseline.chisq 2700.426 2700.426
#> baseline.df 10.000 10.000
#> baseline.pvalue 0.000 0.000
#> cfi 0.546 0.775
#> tli 0.092 -1.253
#> nnfi 0.092 -1.253
#> rfi 0.091 1.000
#> nfi 0.546 0.775
#> pnfi 0.273 0.078
#> ifi 0.547 0.775
#> rni 0.546 0.775
#> logl -857.079 -547.161
#> unrestricted.logl -243.587 -243.587
#> aic 1734.159 1122.323
#> bic 1768.320 1170.148
#> ntotal 225.000 225.000
#> bic2 1736.628 1125.779
#> rmsea 1.042 1.641
#> rmsea.ci.lower 0.994 1.533
#> rmsea.ci.upper 1.092 1.752
#> rmsea.ci.level 0.900 0.900
#> rmsea.pvalue 0.000 0.000
#> rmsea.close.h0 0.050 0.050
#> rmsea.notclose.pvalue 1.000 1.000
#> rmsea.notclose.h0 0.080 0.080
#> rmr 0.209 0.016
#> rmr_nomean 0.209 0.016
#> srmr 0.210 0.016
#> srmr_bentler 0.210 0.016
#> srmr_bentler_nomean 0.210 0.016
#> crmr 0.257 0.020
#> crmr_nomean 0.257 0.020
#> srmr_mplus 0.210 0.016
#> srmr_mplus_nomean 0.210 0.016
#> cn_05 3.030 2.424
#> cn_01 3.766 3.459
#> gfi 0.552 0.777
#> agfi -0.345 -2.341
#> pgfi 0.184 0.052
#> mfi 0.066 0.260
#> ecvi 5.533 2.823
In sintesi:
Metodo | Obiettivo principale | Include specificità? | Test del modello? | Quando usarlo |
---|---|---|---|---|
PCA | Ridurre dimensionalità | ❌ No | ❌ No | Sintesi descrittiva |
Fattori principali | Isolare la varianza comune | ✅ Sì | ❌ No | Analisi esplorativa |
Fattori iterato | Raffinare le comunalità | ✅ Sì | ❌ No | Soluzioni più stabili |
ML | Testare modello fattoriale | ✅ Sì | ✅ Sì | Verifica ipotesi psicologiche |
🎓 Suggerimento:
- se lo scopo è identificare costrutti teorici (es. “l’autostima ha due dimensioni?”), si preferisce il metodo ML.
- se invece lo scopo è solo quello di riassumendo dati (es. da un questionario), anche la PCA può andare bene.
27.9 Riflessioni Conclusive
L’analisi fattoriale non è una procedura automatica, ma un processo di modellizzazione che richiede scelte motivate e valutazioni critiche a ogni passaggio. I metodi di estrazione dei fattori, pur essendo matematicamente diversi, riflettono concezioni differenti del ruolo della varianza nelle variabili osservate e, quindi, diverse filosofie di ricerca.
Ad esempio, la PCA tende a trattare le variabili come manifestazioni dirette della varianza totale, rendendola utile per scopi pratici come la riduzione della dimensionalità, ma meno adatta per inferenze teoriche su costrutti latenti. Al contrario, i metodi che stimano la varianza comune (come i fattori principali o la massima verosimiglianza) assumono che ci siano cause sottostanti e non osservabili che generano le covarianze tra le variabili.
Ma oltre agli aspetti tecnici, è utile considerare alcune domande chiave che dovrebbero guidare la scelta del metodo:
- Qual è il mio obiettivo? Sintesi descrittiva, conferma di ipotesi teoriche, preparazione a un’analisi fattoriale confermativa?
- I dati rispettano le assunzioni richieste (normalità, dimensione del campione, struttura semplice)?
- Quanto voglio spingermi nell’interpretazione psicologica dei fattori?
- Quanto è affidabile la mia stima della varianza specifica o dell’errore di misura?
Inoltre, è importante non trascurare che l’analisi fattoriale, per quanto potente, è sensibile a molte scelte analitiche: dal numero di fattori estratti, al metodo di rotazione, fino alle decisioni su quali variabili includere o escludere. Ogni decisione ha impatto sull’interpretabilità, sulla stabilità delle soluzioni e sulla replicabilità dei risultati.
Un buon analista fattoriale non cerca solo di “ottenere carichi elevati”, ma si interroga su cosa quei carichi rappresentano, se sono coerenti con la teoria, e se possono essere replicati in un altro campione.
Infine, non dimentichiamo che l’analisi fattoriale non esaurisce l’indagine sulla struttura latente dei dati. È spesso il primo passo di un percorso più ampio che può includere:
- analisi fattoriale confermativa (CFA);
- modelli strutturali (SEM);
- analisi di validità di costrutto.
In sintesi, padroneggiare i diversi metodi di estrazione non significa solo saperli applicare, ma anche comprendere le implicazioni epistemologiche e psicometriche delle scelte fatte. Il vero valore dell’analisi fattoriale non sta solo nella sintesi dei dati, ma nella sua capacità di collegare numeri e teoria, variabili osservate e costrutti latenti, statistica e psicologia.
Informazioni sull’Ambiente di Sviluppo
sessionInfo()
#> R version 4.4.2 (2024-10-31)
#> Platform: aarch64-apple-darwin20
#> Running under: macOS Sequoia 15.4
#>
#> Matrix products: default
#> BLAS: /Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/lib/libRblas.0.dylib
#> LAPACK: /Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/lib/libRlapack.dylib; LAPACK version 3.12.0
#>
#> locale:
#> [1] C/UTF-8/C/C/C/C
#>
#> time zone: Europe/Rome
#> tzcode source: internal
#>
#> attached base packages:
#> [1] stats graphics grDevices utils datasets methods base
#>
#> other attached packages:
#> [1] GPArotation_2024.3-1 ggokabeito_0.1.0 see_0.11.0
#> [4] MASS_7.3-65 viridis_0.6.5 viridisLite_0.4.2
#> [7] ggpubr_0.6.0 ggExtra_0.10.1 gridExtra_2.3
#> [10] patchwork_1.3.0 bayesplot_1.11.1 semTools_0.5-7
#> [13] semPlot_1.1.6 lavaan_0.6-19 psych_2.5.3
#> [16] scales_1.3.0 markdown_2.0 knitr_1.50
#> [19] lubridate_1.9.4 forcats_1.0.0 stringr_1.5.1
#> [22] dplyr_1.1.4 purrr_1.0.4 readr_2.1.5
#> [25] tidyr_1.3.1 tibble_3.2.1 ggplot2_3.5.2
#> [28] tidyverse_2.0.0 here_1.0.1
#>
#> loaded via a namespace (and not attached):
#> [1] rstudioapi_0.17.1 jsonlite_2.0.0 magrittr_2.0.3
#> [4] TH.data_1.1-3 estimability_1.5.1 farver_2.1.2
#> [7] nloptr_2.2.1 rmarkdown_2.29 vctrs_0.6.5
#> [10] minqa_1.2.8 base64enc_0.1-3 rstatix_0.7.2
#> [13] htmltools_0.5.8.1 broom_1.0.8 Formula_1.2-5
#> [16] htmlwidgets_1.6.4 plyr_1.8.9 sandwich_3.1-1
#> [19] emmeans_1.11.0 zoo_1.8-13 igraph_2.1.4
#> [22] mime_0.13 lifecycle_1.0.4 pkgconfig_2.0.3
#> [25] Matrix_1.7-3 R6_2.6.1 fastmap_1.2.0
#> [28] rbibutils_2.3 shiny_1.10.0 numDeriv_2016.8-1.1
#> [31] digest_0.6.37 OpenMx_2.21.13 fdrtool_1.2.18
#> [34] colorspace_2.1-1 rprojroot_2.0.4 Hmisc_5.2-3
#> [37] timechange_0.3.0 abind_1.4-8 compiler_4.4.2
#> [40] withr_3.0.2 glasso_1.11 htmlTable_2.4.3
#> [43] backports_1.5.0 carData_3.0-5 ggsignif_0.6.4
#> [46] corpcor_1.6.10 gtools_3.9.5 tools_4.4.2
#> [49] pbivnorm_0.6.0 foreign_0.8-90 zip_2.3.2
#> [52] httpuv_1.6.15 nnet_7.3-20 glue_1.8.0
#> [55] quadprog_1.5-8 nlme_3.1-168 promises_1.3.2
#> [58] lisrelToR_0.3 grid_4.4.2 checkmate_2.3.2
#> [61] cluster_2.1.8.1 reshape2_1.4.4 generics_0.1.3
#> [64] gtable_0.3.6 tzdb_0.5.0 data.table_1.17.0
#> [67] hms_1.1.3 car_3.1-3 sem_3.1-16
#> [70] pillar_1.10.2 rockchalk_1.8.157 later_1.4.2
#> [73] splines_4.4.2 lattice_0.22-7 survival_3.8-3
#> [76] kutils_1.73 tidyselect_1.2.1 miniUI_0.1.1.1
#> [79] pbapply_1.7-2 reformulas_0.4.0 stats4_4.4.2
#> [82] xfun_0.52 qgraph_1.9.8 arm_1.14-4
#> [85] stringi_1.8.7 pacman_0.5.1 boot_1.3-31
#> [88] evaluate_1.0.3 codetools_0.2-20 mi_1.1
#> [91] cli_3.6.4 RcppParallel_5.1.10 rpart_4.1.24
#> [94] xtable_1.8-4 Rdpack_2.6.4 munsell_0.5.1
#> [97] Rcpp_1.0.14 coda_0.19-4.1 png_0.1-8
#> [100] XML_3.99-0.18 parallel_4.4.2 jpeg_0.1-11
#> [103] lme4_1.1-37 mvtnorm_1.3-3 openxlsx_4.2.8
#> [106] rlang_1.1.5 multcomp_1.4-28 mnormt_2.1.1