22  Il modello multifattoriale

In questo capitolo imparerai a
  • calcolare e interpretare la correlazione parziale;
  • capire la teoria dei due fattori;
  • applicare e comprendere il metodo dell’annullamento della tetrade.
Prerequisiti
  • Leggere il capitolo 6, Factor Analysis and Principal Component Analysis, del testo Principles of psychological assessment di Petersen (2024).
Preparazione del Notebook
here::here("code", "_common.R") |> 
  source()

if (!requireNamespace("pacman")) install.packages("pacman")
pacman::p_load(lavaan, semPlot, corrplot, tidyr, tidySEM, kableExtra)

22.1 Fattori ortogonali e teoria multifattoriale

La teoria dei due fattori di Spearman, secondo cui la prestazione in compiti cognitivi sarebbe spiegata da un fattore generale (g) comune a tutte le variabili e da un fattore specifico per ognuna di esse, ha influenzato gli studi sull’intelligenza per diversi anni. Tuttavia, con il passare del tempo, è emersa la necessità di spiegare in modo più articolato la covariazione tra più variabili osservabili. A questo scopo Thurstone (1945) propose la teoria multifattoriale, in base alla quale la covariazione tra le variabili manifeste (test, misure) non può essere riconducibile a un singolo fattore generale, ma deve essere spiegata dall’azione congiunta di diversi fattori comuni (ognuno relativo ad alcuni soltanto dei test).

22.1.1 Dal modello a due fattori al modello multifattoriale

Nel modello multifattoriale di Thurstone, si assume che ogni variabile manifesta \(Y_i\) dipenda da:

  1. Un insieme di \(m\) fattori comuni (\(\xi_1,\dots,\xi_m\)), che spiegano la correlazione tra variabili diverse. Questi fattori sono detti comuni perché intervengono in più variabili manifeste.
  2. Un fattore specifico (o fattore unico, indicato con \(\delta_i\)) proprio di ogni variabile manifesta. Questo fattore spiega la parte di varianza non condivisa con le altre variabili e viene spesso trattato come termine di errore o rumore statistico.

In presenza di \(p\) variabili manifeste \(Y_1,\dots,Y_p\), l’ipotesi fondamentale è che vi siano molti meno fattori comuni (\(m\)) rispetto al numero di variabili (\(p\)), così da avere un modello parsimonioso: poche variabili latenti riescono a spiegare un gran numero di variabili osservate.

22.1.2 Notazione

  • Le variabili manifeste \(Y\) sono indicizzate da \(i=1,\dots,p\).
  • Le variabili latenti a fattore comune (\(\xi\)) sono indicizzate da \(j=1,\dots,m\).
  • I fattori specifici (\(\delta\)) sono indicizzati da \(i=1,\dots,p\). Ciascun \(\delta_i\) agisce soltanto su \(Y_i\).
  • Le saturazioni fattoriali \(\lambda_{ij}\) sono i parametri che quantificano l’importanza del fattore \(\xi_j\) nella composizione della variabile osservabile \(Y_i\).

Inoltre, \(\mu_i\) è la media della \(i\)-esima variabile manifesta \(Y_i\). Per semplicità, si assume che i fattori latenti abbiano media zero, il che permette di separare nettamente la componente sistematica (\(\xi_j\)) dalla media \(\mu_i\).

22.1.3 Equazioni del modello multifattoriale

  1. Caso senza fattori comuni (solo fattori specifici):

    \[ \begin{cases} Y_{1k} = \mu_1 + \delta_{1k}, \\ \vdots \\ Y_{ik} = \mu_i + \delta_{ik}, \\ \vdots \\ Y_{pk} = \mu_p + \delta_{pk}. \end{cases} \]

    In questo scenario, ogni variabile \(Y_i\) dipende solo dalla propria media \(\mu_i\) e dal fattore specifico \(\delta_i\). Poiché \(\delta_i\) non è condiviso tra più variabili, le \(Y_i\) risulterebbero incorrelate.

  2. Caso con \(m\) fattori comuni (oltre ai fattori specifici):

    \[ \begin{cases} Y_1 - \mu_1 &= \lambda_{11}\,\xi_1 + \dots + \lambda_{1k}\,\xi_k + \dots + \lambda_{1m}\,\xi_m + \delta_1, \\ \vdots & \\ Y_i - \mu_i &= \lambda_{i1}\,\xi_1 + \dots + \lambda_{ik}\,\xi_k + \dots + \lambda_{im}\,\xi_m + \delta_i, \\ \vdots & \\ Y_p - \mu_p &= \lambda_{p1}\,\xi_1 + \dots + \lambda_{pk}\,\xi_k + \dots + \lambda_{pm}\,\xi_m + \delta_p. \end{cases} \]

    Ogni variabile manifesta \(Y_i\) viene dunque vista come combinazione lineare di tutti e soli i fattori comuni \(\xi_j\) e di un fattore specifico \(\delta_i\) che la riguarda esclusivamente.

Riassumendo, nel modello multifattoriale:

  • \(\xi_j\) (con \(j=1,\dots,m\)) è la \(j\)-esima variabile latente a fattore comune;
  • \(\lambda_{ij}\) è il peso fattoriale o saturazione che misura quanto il fattore \(\xi_j\) contribuisce a definire la variabile osservabile \(Y_i\);
  • \(\delta_i\) è il fattore specifico, esclusivo della variabile \(Y_i\).

22.1.4 Assunzioni del modello multifattoriale

Per semplificare l’identificazione e l’interpretazione del modello, vengono poste alcune assunzioni chiave:

  1. Media e varianza dei fattori comuni:

    • \(\mathbb{E}(\xi_j)=0\) per ogni \(j=1,\dots,m\).
      (Non avendo unità di misura proprie, si impone una media nulla per rendere il modello più semplice da stimare.)

    • \(\mathbb{V}(\xi_j)=1\).
      (Analogamente, si normalizza la varianza dei fattori comuni a 1.)

  2. Incorrelazione tra i fattori comuni:
    \[ \text{Cov}(\xi_j, \xi_h)=0 \quad \text{per} \ j \neq h. \]
    Se i fattori sono incorrelati, si parla di fattori ortogonali. Questa è un’ipotesi tipica nelle prime formulazioni, ma può essere rilassata nei modelli a fattori obliqui, dove si ammette la possibilità che i fattori comuni siano correlati tra loro.

  3. Incorrelazione tra i fattori specifici:
    \[ \text{Cov}(\delta_i,\delta_k)=0 \quad \text{per} \ i \neq k, \]
    con \(\mathbb{E}(\delta_i) = 0\) e \(\mathbb{V}(\delta_i) = \psi_{ii}\). La quantità \(\psi_{ii}\) è la varianza specifica (o unicità) di \(Y_i\).

  4. Incorrelazione tra fattori comuni e fattori specifici:
    \[ \text{Cov}(\xi_j, \delta_i)=0 \quad \text{per ogni} \ i=1,\dots,p \ \text{e} \ j=1,\dots,m. \]

In sintesi, il modello multifattoriale di Thurstone propone che la relazione tra le variabili osservate sia spiegabile da un numero relativamente piccolo di fattori latenti ortogonali (per via dell’ipotesi di incorrelazione), ognuno dei quali influenza solo alcune delle variabili. Ciascuna variabile riceve inoltre un contributo unico da un fattore specifico. Grazie a queste ipotesi, si ottiene una struttura lineare parsimoniosa, utile sia in ambito di ricerca (per evidenziare eventuali dimensioni latenti comuni) sia in contesti applicativi (ad esempio nella costruzione e validazione di test psicologici).


Nota: Nella pratica, i fattori estratti con metodi come l’Analisi dei Fattori (Factor Analysis) possono anche essere obliqui (cioè correlati tra loro) qualora l’ipotesi di ortogonalità non sia realistica o non sia empiricamente supportata dai dati. L’ortogonalità non è dunque un dogma, bensì un’opzione che semplifica l’interpretazione ma che potrebbe non essere sempre adeguata a rappresentare la realtà psicologica sottostante.

22.2 Interpretazione dei parametri del modello

22.2.1 Covarianza tra variabili e fattori

Supponiamo che le variabili manifeste \(Y_i\) abbiano media nulla \(\bigl(\mathbb{E}(Y_i)=0\bigr)\). In questo caso, la covarianza tra una variabile \(Y_i\) e un fattore comune \(\xi_j\) coincide esattamente con la corrispondente saturazione fattoriale \(\lambda_{ij}\). Mostriamo questo risultato nel dettaglio:

\[ \begin{aligned} \text{Cov}(Y_i, \xi_j) &= \mathbb{E}(Y_i \,\xi_j)\\ &= \mathbb{E}\Bigl[\bigl(\lambda_{i1} \,\xi_1 + \dots + \lambda_{im} \,\xi_m + \delta_i\bigr)\,\xi_j \Bigr]\\ &= \lambda_{i1}\,\underbrace{\mathbb{E}(\xi_1\,\xi_j)}_{=0} + \dots + \lambda_{ij}\,\underbrace{\mathbb{E}(\xi_j^2)}_{=1} + \dots + \lambda_{im}\,\underbrace{\mathbb{E}(\xi_m\,\xi_j)}_{=0} + \underbrace{\mathbb{E}(\delta_i\,\xi_j)}_{=0} \\ &= \lambda_{ij}. \end{aligned} \]

  • La prima e l’ultima eguaglianza seguono dall’ipotesi che i fattori comuni \(\xi_j\) abbiano media zero e siano incorrelati tra loro (\(\text{Cov}(\xi_j,\xi_h) = 0\) per \(j \neq h\)) e con i fattori specifici \(\delta_i\).
  • Inoltre, poiché \(\mathbb{V}(\xi_j)=1\), si ha \(\mathbb{E}(\xi_j^2)=1\).

In sintesi, le saturazioni fattoriali \(\lambda_{ij}\) misurano la covarianza tra la variabile manifesta \(Y_i\) e il fattore latente \(\xi_j\), a patto che \(\mathbb{E}(Y_i)=0\).

22.2.1.1 Saturazioni e correlazioni nel caso di variabili standardizzate

Se le variabili \(Y_i\) sono ulteriormente standardizzate, ossia \(\mathbb{V}(Y_i)=1\), allora la saturazione fattoriale \(\lambda_{ij}\) diventa la correlazione tra \(Y_i\) e \(\xi_j\). In tal caso, scriveremo

\[ r_{ij} \;=\; \lambda_{ij}. \]

Ciò fornisce un’interpretazione ancora più immediata delle saturazioni fattoriali: in presenza di fattori latenti standardizzati, ciascuna \(\lambda_{ij}\) riflette quanto il fattore \(\xi_j\) è correlato con la variabile osservabile \(Y_i\).

22.2.2 Espressione fattoriale della varianza

Nel modello multifattoriale, analogamente a quanto avviene nel modello monofattoriale, la varianza di ciascuna variabile manifesta \(Y_i\) può essere scomposta in due componenti:

  1. Una componente comune, detta comunalità, che riflette la porzione di varianza di \(Y_i\) spiegata dai fattori comuni.
  2. Una componente specifica, detta unicità, che rappresenta la porzione di varianza di \(Y_i\) non spiegata dai fattori comuni ed è attribuibile al fattore specifico \(\delta_i\).

Supponendo che \(\mathbb{E}(Y_i)=0\) per ogni \(i\), la varianza della variabile \(Y_i\) è:

\[ \mathbb{V}(Y_i) = \mathbb{E}\Bigl[\bigl(\lambda_{i1}\,\xi_1 + \dots + \lambda_{im}\,\xi_m + \delta_i\bigr)^2\Bigr]. \]

22.2.2.1 Sviluppo del polinomio

Sviluppando il quadrato del termine tra parentesi, ricordiamo che il quadrato di una somma include:

  1. La somma dei quadrati di tutti i termini.
  2. Il doppio prodotto di ogni termine con ciascuno degli altri termini successivi.

In formula:

\[ (a + b + c)^2 \;=\; a^2 + b^2 + c^2 \;+\; 2ab + 2ac + 2bc. \]

Applicando lo stesso principio al nostro caso:

\[ \Bigl(\lambda_{i1}\,\xi_1 + \dots + \lambda_{im}\,\xi_m + \delta_i\Bigr)^2 = \sum_{j=1}^m \lambda_{ij}^2\,\xi_j^2 \;+\; \delta_i^2 \;+\; \text{(termini di doppio prodotto)}. \]

22.2.2.2 Valore atteso: contributo dei singoli fattori e delle loro interazioni

Per calcolare \(\mathbb{V}(Y_i)\), prendiamo il valore atteso di questo polinomio:

  • Termini al quadrato dei fattori comuni:
    Poiché \(\mathbb{V}(\xi_j) = 1\) e \(\mathbb{E}(\xi_j^2) = 1\), il contributo di ciascun fattore comune \(\xi_j\) è \(\lambda_{ij}^2\).
  • Termine al quadrato del fattore specifico:
    \(\mathbb{E}(\delta_i^2) = \psi_{ii}\), dove \(\psi_{ii}\) è la varianza specifica della variabile \(Y_i\).
  • Termini di doppio prodotto:
    Grazie all’ipotesi di ortogonalità, la covarianza tra fattori comuni diversi è nulla (\(\mathbb{E}(\xi_j\,\xi_h) = 0\) per \(j \neq h\)), e la covarianza tra fattori comuni e specifici è anch’essa nulla (\(\mathbb{E}(\delta_i\,\xi_j) = 0\)). Di conseguenza, tutti i doppi prodotti si annullano e non contribuiscono alla varianza totale.

22.2.2.3 Risultato finale

In conclusione, la varianza di \(Y_i\) si ottiene sommando i contributi di tutti i fattori comuni e del fattore specifico:

\[ \mathbb{V}(Y_i) = \lambda_{i1}^2 + \lambda_{i2}^2 + \dots + \lambda_{im}^2 + \psi_{ii} = \sum_{j=1}^m \lambda_{ij}^2 + \psi_{ii}. \]

  • Comunalità \(\,h_i^2 = \sum_{j=1}^m \lambda_{ij}^2\): misura la quota di varianza di \(Y_i\) spiegata dai fattori comuni.
  • Unicità \(\,\psi_{ii}\): rappresenta la varianza non spiegata dai fattori comuni, associata esclusivamente al fattore specifico \(\delta_i\).

In sintesi, per ogni variabile \(\,Y_i\), la somma di comunalità e unicità deve coincidere con la sua varianza totale, a conferma che l’analisi fattoriale scompone ciascuna variabile in una parte “comune” e una parte “specifica”.

22.2.3 Espressione fattoriale della covarianza

A titolo di esempio, consideriamo il caso di \(p=5\) variabili osservate e \(m=2\) fattori ortogonali. Assumiamo inoltre che le variabili manifeste siano state centrate (ossia abbiano media nulla), così da poter omettere i termini costanti. In queste condizioni, il modello multifattoriale si scrive:

\[ \begin{cases} Y_1 = \lambda_{11}\,\xi_1 + \lambda_{12}\,\xi_2 + \delta_1, \\ Y_2 = \lambda_{21}\,\xi_1 + \lambda_{22}\,\xi_2 + \delta_2, \\ Y_3 = \lambda_{31}\,\xi_1 + \lambda_{32}\,\xi_2 + \delta_3, \\ Y_4 = \lambda_{41}\,\xi_1 + \lambda_{42}\,\xi_2 + \delta_4, \\ Y_5 = \lambda_{51}\,\xi_1 + \lambda_{52}\,\xi_2 + \delta_5. \end{cases} \]

Ricordiamo che:

  • \(\xi_1\) e \(\xi_2\) sono i due fattori comuni, con \(\mathbb{E}(\xi_j) = 0\), \(\mathbb{V}(\xi_j)=1\) e \(\mathrm{Cov}(\xi_1,\xi_2)=0\).
  • \(\delta_i\) è il fattore specifico associato a \(Y_i\), con \(\mathbb{E}(\delta_i)=0\) e \(\mathrm{Cov}(\delta_i,\delta_k)=0\) per \(i \neq k\).
  • I fattori comuni sono incorrelati con i fattori specifici (\(\mathrm{Cov}(\xi_j,\delta_i)=0\)).

22.2.3.1 Calcolo esplicito di una covarianza

Mostriamo, nello specifico, come si ottiene la covarianza \(\mathrm{Cov}(Y_1,Y_2)\). Supponendo \(\mathbb{E}(Y_1)=\mathbb{E}(Y_2)=0\),

\[ \begin{aligned} \mathrm{Cov}(Y_1, Y_2) &= \mathbb{E}\bigl(Y_1\,Y_2\bigr) \\ &= \mathbb{E}\Bigl[ (\lambda_{11} \,\xi_1 + \lambda_{12} \,\xi_2 + \delta_1) \,(\lambda_{21} \,\xi_1 + \lambda_{22} \,\xi_2 + \delta_2) \Bigr]. \end{aligned} \]

Sviluppando il prodotto e facendo uso delle ipotesi di ortogonalità, si ottiene:

  1. \(\lambda_{11}\,\lambda_{21}\,\mathbb{E}(\xi_1^2)\). Qui, siccome \(\mathrm{Var}(\xi_1)=1\), abbiamo \(\mathbb{E}(\xi_1^2)=1\).
  2. \(\lambda_{11}\,\lambda_{22}\,\mathbb{E}(\xi_1\,\xi_2)=0\) perché \(\mathrm{Cov}(\xi_1,\xi_2)=0\).
  3. \(\lambda_{11}\,\mathbb{E}(\xi_1\,\delta_2)=0\) perché i fattori comuni e i fattori specifici sono incorrelati.
  4. \(\lambda_{12}\,\lambda_{21}\,\mathbb{E}(\xi_2\,\xi_1)=0\) per la stessa ragione del punto 2.
  5. \(\lambda_{12}\,\lambda_{22}\,\mathbb{E}(\xi_2^2)\). Analogamente, \(\mathrm{Var}(\xi_2)=1\), quindi \(\mathbb{E}(\xi_2^2)=1\).
  6. \(\lambda_{12}\,\mathbb{E}(\xi_2\,\delta_2)=0\) (incorrelazione tra fattori).
  7. \(\lambda_{21}\,\mathbb{E}(\xi_1\,\delta_1)=0\) (stessa ragione).
  8. \(\lambda_{22}\,\mathbb{E}(\xi_2\,\delta_1)=0\) (stessa ragione).
  9. \(\mathbb{E}(\delta_1\,\delta_2)=0\) (i fattori specifici sono incorrelati tra loro).

Con tutti i termini di doppio prodotto che si annullano, rimane solo la somma dei termini che includono \(\xi_1^2\) e \(\xi_2^2\):

\[ \mathrm{Cov}(Y_1, Y_2) = \lambda_{11}\,\lambda_{21} \,+\, \lambda_{12}\,\lambda_{22}. \]

22.2.3.2 Interpretazione

In generale, la covarianza tra due variabili manifeste \(Y_\ell\) e \(Y_m\) in un modello multifattoriale con \(m\) fattori ortogonali si può interpretare come la somma dei prodotti tra le saturazioni nei fattori comuni condivisi:

\[ \mathrm{Cov}(Y_\ell, Y_m) = \sum_{j=1}^m \lambda_{\ell j}\,\lambda_{mj}. \]

Questo vuol dire che due variabili \(Y_\ell\) e \(Y_m\) risultano correlate soltanto nella misura in cui condividono (in senso letterale) gli stessi fattori comuni. Se in una determinata posizione \(j\) una variabile ha saturazione prossima a zero, il contributo di quel fattore alla covarianza tra le due variabili sarà molto basso (o nullo).


Questo esempio illustra in modo concreto come, nel modello multifattoriale, la covarianza osservata tra due variabili sia l’effetto cumulativo dei prodotti delle loro saturazioni nei fattori comuni. La struttura di queste saturazioni diventa quindi fondamentale per interpretare quali fattori latenti spiegano la correlazione tra le varie misure osservate.

Esempio 22.1 Consideriamo, a titolo di esempio, i dati presentati da Brown (2015) relativi a un campione di 250 pazienti che hanno completato un programma di psicoterapia. Su ciascun soggetto sono state raccolte otto misure di personalità, corrispondenti ad altrettante scale:

  • N1: anxiety
  • N2: hostility
  • N3: depression
  • N4: self-consciousness
  • E1: warmth
  • E2: gregariousness
  • E3: assertiveness
  • E4: positive emotions

Le prime quattro scale riflettono diverse sfaccettature del neuroticismo (N), mentre le ultime quattro sono riferite all’estroversione (E). Di seguito vengono mostrate le deviazioni standard di ciascuna scala, oltre alla matrice di correlazioni osservate (qui denominata psychot_cor_mat) e alla dimensione campionaria (\(n=250\)).

varnames <- c("N1", "N2", "N3", "N4", "E1", "E2", "E3", "E4")
sds <- '5.7  5.6  6.4  5.7  6.0  6.2  5.7  5.6'

cors <- '
    1.000
    0.767  1.000 
    0.731  0.709  1.000 
    0.778  0.738  0.762  1.000 
    -0.351  -0.302  -0.356  -0.318  1.000 
    -0.316  -0.280  -0.300  -0.267  0.675  1.000 
    -0.296  -0.289  -0.297  -0.296  0.634  0.651  1.000 
    -0.282  -0.254  -0.292  -0.245  0.534  0.593  0.566  1.000
'

psychot_cor_mat <- getCov(cors, names = varnames)
n_obs <- 250

22.2.4 Analisi fattoriale esplorativa

Applichiamo un’analisi fattoriale esplorativa (EFA) con metodo di stima a massima verosimiglianza e ipotizziamo la presenza di due fattori comuni incorrelati. In R, il comando utilizzato è:

fit_efa <- factanal(
  covmat = psychot_cor_mat,
  factors = 2,
  rotation = "varimax",
  n.obs = n_obs
)

Dalle saturazioni fattoriali (ottenute tramite fit_efa$loadings) emerge la presenza di due fattori:

  1. Il primo fattore satura principalmente sulle scale di neuroticismo (N1, N2, N3, N4).
  2. Il secondo fattore satura principalmente sulle scale di estroversione (E1, E2, E3, E4).

22.2.5 Covarianze (o correlazioni) riprodotte dal modello

Una volta stimati i fattori e le relative saturazioni \(\boldsymbol{\Lambda}\), possiamo confrontare la matrice di correlazioni osservate con quella riprodotta dal modello fattoriale.

22.2.5.1 Esempio di correlazione riprodotta

Per illustrare il concetto, consideriamo la correlazione riprodotta tra N1 (prima variabile) e N2 (seconda variabile), che secondo il modello a due fattori incorrelati si ottiene sommando i prodotti delle saturazioni sui singoli fattori:

\[ r_{12}^{(\text{modello})} = \lambda_{11}\,\lambda_{21} + \lambda_{12}\,\lambda_{22}, \]

dove:

  • \(\lambda_{1j}\) è la saturazione della variabile \(Y_1\) sul fattore \(j\).
  • \(\lambda_{2j}\) è la saturazione della variabile \(Y_2\) sul fattore \(j\).

Nell’esempio in R, otteniamo le saturazioni fattoriali:

lambda <- fit_efa$loadings 
lambda
#> 
#> Loadings:
#>    Factor1 Factor2
#> N1  0.854  -0.228 
#> N2  0.826  -0.194 
#> N3  0.811  -0.233 
#> N4  0.865  -0.186 
#> E1 -0.202   0.773 
#> E2 -0.139   0.829 
#> E3 -0.158   0.771 
#> E4 -0.147   0.684 
#> 
#>                Factor1 Factor2
#> SS loadings      2.923   2.526
#> Proportion Var   0.365   0.316
#> Cumulative Var   0.365   0.681

L’espressione

lambda[1, 1] * lambda[2, 1] + lambda[1, 2] * lambda[2, 2]
#> [1] 0.7493

restituisce un valore molto simile alla correlazione empirica 0.767, confermando la bontà dell’adattamento del modello per questa coppia di variabili.

22.2.5.2 Intera matrice di correlazioni riprodotte

L’intera matrice di correlazioni riprodotte dal modello è data da:

\[ \mathbf{R}_{\text{riprodotta}} = \boldsymbol{\Lambda}\,\boldsymbol{\Lambda}^{\mathsf{T}} + \boldsymbol{\Psi}, \]

dove \(\boldsymbol{\Lambda}\) è la matrice delle saturazioni fattoriali (e righe corrispondono alle variabili, colonne ai fattori) e \(\boldsymbol{\Psi}\) è la matrice diagonale contenente le varianze specifiche (unicità) stimate. In R, possiamo calcolare questa matrice con:

Rr <- lambda %*% t(lambda) + diag(fit_efa$uniq)
Rr |> round(2)
#>       N1    N2    N3    N4    E1    E2    E3    E4
#> N1  1.00  0.75  0.75  0.78 -0.35 -0.31 -0.31 -0.28
#> N2  0.75  1.00  0.71  0.75 -0.32 -0.28 -0.28 -0.25
#> N3  0.75  0.71  1.00  0.74 -0.34 -0.31 -0.31 -0.28
#> N4  0.78  0.75  0.74  1.00 -0.32 -0.27 -0.28 -0.25
#> E1 -0.35 -0.32 -0.34 -0.32  1.00  0.67  0.63  0.56
#> E2 -0.31 -0.28 -0.31 -0.27  0.67  1.00  0.66  0.59
#> E3 -0.31 -0.28 -0.31 -0.28  0.63  0.66  1.00  0.55
#> E4 -0.28 -0.25 -0.28 -0.25  0.56  0.59  0.55  1.00

Confrontando Rr con la matrice di correlazioni osservate (psychot_cor_mat), otteniamo l’errore di riproduzione, ovvero la differenza tra i valori osservati e quelli teorici previsti dal modello:

psychot_cor_mat - Rr |> round(3)
#>        N1     N2     N3     N4     E1     E2     E3     E4
#> N1  0.000  0.018 -0.014 -0.003 -0.003 -0.009  0.015 -0.001
#> N2  0.018  0.000 -0.006 -0.013  0.015 -0.004 -0.008  0.000
#> N3 -0.014 -0.006  0.000  0.017 -0.012  0.006  0.011 -0.013
#> N4 -0.003 -0.013  0.017  0.000  0.000  0.007 -0.016  0.009
#> E1 -0.003  0.015 -0.012  0.000  0.000  0.006  0.006 -0.024
#> E2 -0.009 -0.004  0.006  0.007  0.006  0.000 -0.010  0.006
#> E3  0.015 -0.008  0.011 -0.016  0.006 -0.010  0.000  0.016
#> E4 -0.001  0.000 -0.013  0.009 -0.024  0.006  0.016  0.000

Idealmente, se il modello fattoriale si adatta bene ai dati, tale differenza risulterà piccola per tutte le coppie di variabili (osservate).

In sintesi, questo esempio dimostra come un modello con due fattori incorrelati sia in grado di spiegare le correlazioni tra le otto scale di personalità. Il primo fattore, caricato dalle scale di neuroticismo, e il secondo, caricato da quelle di estroversione, confermano così la struttura a due dimensioni attesa.

22.3 Fattori obliqui

Nel modello fattoriale, può accadere che i fattori comuni non siano ortogonali, ma correlati tra loro. In tal caso si parla di fattori obliqui. Anche in questa situazione, è possibile esprimere:

  • la covarianza teorica tra una variabile manifesta \(Y_i\) e un fattore comune \(\xi_j\),
  • la covarianza teorica tra due variabili manifeste,
  • la comunalità di ciascuna variabile manifesta,

ma le formule diventano più complesse rispetto al caso ortogonale, perché occorre tener conto anche delle covarianze tra i fattori comuni.

22.3.1 Covarianza teorica tra variabili manifeste e fattori comuni

Nel modello multifattoriale con \(m\) fattori comuni, ciascuna variabile manifesta è modellata come:

\[ Y_i = \lambda_{i1} \xi_1 + \dots + \lambda_{im} \xi_m + \delta_i . \tag{22.1}\]

Vogliamo calcolare la covarianza teorica tra la variabile \(Y_i\) e un fattore comune \(\xi_j\). Sfruttando la linearità del valore atteso, abbiamo:

\[ \begin{aligned} \mathrm{Cov}(Y_i, \xi_j) &= \mathbb{E}(Y_i \cdot \xi_j) \\ &= \mathbb{E}\left[ \left(\sum_{h=1}^{m} \lambda_{ih} \xi_h + \delta_i \right) \xi_j \right] \\ &= \sum_{h=1}^{m} \lambda_{ih} \cdot \mathrm{Cov}(\xi_h, \xi_j) + \underbrace{\mathrm{Cov}(\delta_i, \xi_j)}_{=0} \\ &= \sum_{h=1}^{m} \lambda_{ih} \cdot \phi_{hj}, \end{aligned} \]

dove \(\phi_{hj} = \mathrm{Cov}(\xi_h, \xi_j)\) è l’elemento \((h,j)\) della matrice di covarianze tra i fattori comuni, denotata con \(\boldsymbol{\Phi}\).

Esempio con 3 fattori comuni.

La covarianza tra \(Y_1\) e il primo fattore \(\xi_1\) è:

\[ \mathrm{Cov}(Y_1, \xi_1) = \lambda_{11} + \lambda_{12} \cdot \phi_{21} + \lambda_{13} \cdot \phi_{31}. \]

22.3.2 Varianza teorica di una variabile manifesta

Partendo dall’Equazione 22.1, vogliamo calcolare la varianza teorica di \(Y_i\). Sviluppiamo il quadrato:

\[ \mathrm{Var}(Y_i) = \mathbb{E}\left[Y_i^2\right] = \mathbb{E}\left[ \left(\sum_{j=1}^m \lambda_{ij} \xi_j + \delta_i \right)^2 \right]. \]

Sviluppando il quadrato e distribuendo il valore atteso:

\[ \mathrm{Var}(Y_i) = \sum_{j=1}^m \lambda_{ij}^2 + 2 \sum_{j<k} \lambda_{ij} \lambda_{ik} \cdot \phi_{jk} + \psi_{ii}, \]

dove \(\psi_{ii} = \mathrm{Var}(\delta_i)\) è l’unicità.

Esempio con tre fattori. La varianza teorica di \(Y_1\) sarà:

\[ \begin{aligned} \mathrm{Var}(Y_1) =\; & \lambda_{11}^2 + \lambda_{12}^2 + \lambda_{13}^2 + \\ & 2 \lambda_{11} \lambda_{12} \phi_{12} + 2 \lambda_{11} \lambda_{13} \phi_{13} + 2 \lambda_{12} \lambda_{13} \phi_{23} + \\ & \psi_{11}. \end{aligned} \]

22.3.3 Covarianza teorica tra due variabili manifeste

Nel caso di due variabili \(Y_1\) e \(Y_2\) spiegate da due fattori obliqui \(\xi_1\) e \(\xi_2\), abbiamo:

\[ \begin{aligned} \mathrm{Cov}(Y_1, Y_2) =\; & \lambda_{11} \lambda_{21} + \lambda_{12} \lambda_{22} + \\ & \lambda_{11} \lambda_{22} \cdot \phi_{12} + \lambda_{12} \lambda_{21} \cdot \phi_{12}. \end{aligned} \]

Raccogliendo \(\phi_{12}\):

\[ \mathrm{Cov}(Y_1, Y_2) = \lambda_{11} \lambda_{21} + \lambda_{12} \lambda_{22} + \phi_{12} (\lambda_{11} \lambda_{22} + \lambda_{12} \lambda_{21}). \]

22.3.4 Forma matriciale del modello

Nel caso generale, con \(p\) variabili e \(m\) fattori obliqui, la matrice di covarianze teoriche è:

\[ \boldsymbol{\Sigma} = \boldsymbol{\Lambda} \boldsymbol{\Phi} \boldsymbol{\Lambda}^\mathsf{T} + \boldsymbol{\Psi}, \]

dove:

  • \(\boldsymbol{\Lambda}\): matrice \(p \times m\) delle saturazioni fattoriali;
  • \(\boldsymbol{\Phi}\): matrice \(m \times m\) di covarianze tra i fattori comuni (non più diagonale);
  • \(\boldsymbol{\Psi}\): matrice diagonale \(p \times p\) delle unicità.

22.4 Applicazione con R: modello con fattori obliqui

Torniamo ai dati di personalità esaminati in precedenza. Applichiamo ora un’analisi fattoriale con rotazione obliqua (oblimin), che consente ai due fattori di essere correlati:

n_obs <- 250

efa_result <- fa(
  psychot_cor_mat,
  nfactors = 2,
  n.obs = n_obs,
  rotate = "oblimin"
)

Visualizziamo la struttura del modello:

fa.diagram(efa_result)

22.4.1 Saturazioni fattoriali e parametri del modello

lambda <- matrix(efa_result$loadings[, 1:2], nrow = 8, ncol = 2)

rownames(lambda) <- c("N1", "N2", "N3", "N4", "E1", "E2", "E3", "E4")
colnames(lambda) <- c("Factor1", "Factor2")
lambda
#>      Factor1  Factor2
#> N1  0.877076 -0.01578
#> N2  0.852281  0.01128
#> N3  0.826584 -0.03685
#> N4  0.898763  0.03121
#> E1 -0.048589  0.77187
#> E2  0.034700  0.85566
#> E3  0.002815  0.79292
#> E4 -0.007885  0.69545

Matrice di intercorrelazioni tra i fattori:

Phi <- efa_result$Phi
Phi
#>         MR1     MR2
#> MR1  1.0000 -0.4314
#> MR2 -0.4314  1.0000

Unicità:

Psi <- diag(efa_result$uniquenesses)
round(Psi, 2)
#>      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
#> [1,] 0.22 0.00 0.00 0.00 0.00 0.00 0.00 0.00
#> [2,] 0.00 0.28 0.00 0.00 0.00 0.00 0.00 0.00
#> [3,] 0.00 0.00 0.29 0.00 0.00 0.00 0.00 0.00
#> [4,] 0.00 0.00 0.00 0.22 0.00 0.00 0.00 0.00
#> [5,] 0.00 0.00 0.00 0.00 0.37 0.00 0.00 0.00
#> [6,] 0.00 0.00 0.00 0.00 0.00 0.29 0.00 0.00
#> [7,] 0.00 0.00 0.00 0.00 0.00 0.00 0.37 0.00
#> [8,] 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.51

22.4.2 Matrice delle correlazioni riprodotte

Costruiamo la matrice di correlazioni riprodotte dal modello obliquo:

R_hat <- lambda %*% Phi %*% t(lambda) + Psi
round(R_hat, 2)
#>       N1    N2    N3    N4    E1    E2    E3    E4
#> N1  1.00  0.75  0.75  0.78 -0.35 -0.31 -0.31 -0.28
#> N2  0.75  1.00  0.71  0.75 -0.32 -0.28 -0.28 -0.25
#> N3  0.75  0.71  1.00  0.74 -0.34 -0.31 -0.31 -0.28
#> N4  0.78  0.75  0.74  1.00 -0.32 -0.27 -0.28 -0.25
#> E1 -0.35 -0.32 -0.34 -0.32  1.00  0.67  0.63  0.55
#> E2 -0.31 -0.28 -0.31 -0.27  0.67  1.00  0.67  0.59
#> E3 -0.31 -0.28 -0.31 -0.28  0.63  0.67  1.00  0.55
#> E4 -0.28 -0.25 -0.28 -0.25  0.55  0.59  0.55  1.00

Differenza con la matrice osservata:

round(psychot_cor_mat - R_hat, 2)
#>       N1    N2    N3    N4    E1    E2    E3    E4
#> N1  0.00  0.02 -0.01  0.00  0.00 -0.01  0.01  0.00
#> N2  0.02  0.00  0.00 -0.01  0.01  0.00 -0.01  0.00
#> N3 -0.01  0.00  0.00  0.02 -0.01  0.01  0.01 -0.01
#> N4  0.00 -0.01  0.02  0.00  0.00  0.01 -0.02  0.01
#> E1  0.00  0.01 -0.01  0.00  0.00  0.01  0.01 -0.02
#> E2 -0.01  0.00  0.01  0.01  0.01  0.00 -0.01  0.01
#> E3  0.01 -0.01  0.01 -0.02  0.01 -0.01  0.00  0.01
#> E4  0.00  0.00 -0.01  0.01 -0.02  0.01  0.01  0.00

22.4.3 Correlazione riprodotta tra due variabili

Per esempio, la correlazione tra N1 e N2 predetta dal modello è:

lambda[1,1] * lambda[2,1] +
lambda[1,2] * lambda[2,2] +
lambda[1,1] * lambda[2,2] * Phi[1,2] +
lambda[1,2] * lambda[2,1] * Phi[1,2]
#> [1] 0.7489

Questo valore dovrebbe essere molto vicino al valore osservato:

psychot_cor_mat[1, 2]
#> [1] 0.767

In sintesi, nel modello a fattori obliqui, la struttura delle correlazioni tra variabili manifeste dipende non solo dalle saturazioni, ma anche dalla correlazione tra i fattori comuni. Questo tipo di modello è più flessibile e spesso più realistico in psicologia, dove i costrutti latenti tendono a essere interdipendenti.

22.5 Riflessioni Conclusive

In questo capitolo abbiamo esaminato il modello di analisi fattoriale comune, distinguendo tra l’ipotesi di fattori ortogonali e quella più generale di fattori obliqui. Abbiamo visto che, mentre i modelli ortogonali permettono una formulazione più semplice e interpretazioni più immediate, i modelli obliqui risultano più flessibili e realistici, poiché ammettono correlazioni tra i fattori latenti. Abbiamo inoltre analizzato come le covarianze tra le variabili osservate possano essere espresse in funzione delle saturazioni fattoriali, delle intercorrelazioni tra i fattori e delle unicità specifiche. Infine, abbiamo illustrato come queste relazioni teoriche si traducono concretamente nell’applicazione empirica dell’analisi fattoriale esplorativa, mediante l’uso del software R. Comprendere la struttura fattoriale sottostante a un insieme di variabili psicologiche osservate consente di sintetizzare l’informazione in modo più parsimonioso, rivelando le dimensioni latenti che organizzano il comportamento osservato.

22.6 Session Info

sessionInfo()
#> R version 4.4.2 (2024-10-31)
#> Platform: aarch64-apple-darwin20
#> Running under: macOS Sequoia 15.3.2
#> 
#> 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] kableExtra_1.4.0  tidySEM_0.2.7     OpenMx_2.21.13    corrplot_0.95    
#>  [5] ggokabeito_0.1.0  see_0.11.0        MASS_7.3-65       viridis_0.6.5    
#>  [9] viridisLite_0.4.2 ggpubr_0.6.0      ggExtra_0.10.1    gridExtra_2.3    
#> [13] patchwork_1.3.0   bayesplot_1.11.1  semTools_0.5-6    semPlot_1.1.6    
#> [17] lavaan_0.6-19     psych_2.4.12      scales_1.3.0      markdown_1.13    
#> [21] knitr_1.50        lubridate_1.9.4   forcats_1.0.0     stringr_1.5.1    
#> [25] dplyr_1.1.4       purrr_1.0.4       readr_2.1.5       tidyr_1.3.1      
#> [29] tibble_3.2.1      ggplot2_3.5.1     tidyverse_2.0.0   here_1.0.1       
#> 
#> loaded via a namespace (and not attached):
#>   [1] splines_4.4.2         later_1.4.1           XML_3.99-0.18        
#>   [4] rpart_4.1.24          fastDummies_1.7.5     lifecycle_1.0.4      
#>   [7] Rdpack_2.6.3          rstatix_0.7.2         rprojroot_2.0.4      
#>  [10] StanHeaders_2.32.10   globals_0.16.3        lattice_0.22-6       
#>  [13] rockchalk_1.8.157     backports_1.5.0       magrittr_2.0.3       
#>  [16] openxlsx_4.2.8        Hmisc_5.2-3           rmarkdown_2.29       
#>  [19] httpuv_1.6.15         tmvnsim_1.0-2         qgraph_1.9.8         
#>  [22] zip_2.3.2             pkgbuild_1.4.6        pbapply_1.7-2        
#>  [25] minqa_1.2.8           multcomp_1.4-28       abind_1.4-8          
#>  [28] quadprog_1.5-8        nnet_7.3-20           TH.data_1.1-3        
#>  [31] sandwich_3.1-1        inline_0.3.21         listenv_0.9.1        
#>  [34] arm_1.14-4            proto_1.0.0           parallelly_1.42.0    
#>  [37] texreg_1.39.4         svglite_2.1.3         codetools_0.2-20     
#>  [40] xml2_1.3.8            tidyselect_1.2.1      farver_2.1.2         
#>  [43] lme4_1.1-36           matrixStats_1.5.0     stats4_4.4.2         
#>  [46] base64enc_0.1-3       jsonlite_1.9.1        progressr_0.15.1     
#>  [49] Formula_1.2-5         survival_3.8-3        emmeans_1.10.7       
#>  [52] systemfonts_1.2.1     dbscan_1.2.2          tools_4.4.2          
#>  [55] Rcpp_1.0.14           glue_1.8.0            mnormt_2.1.1         
#>  [58] xfun_0.51             MplusAutomation_1.1.1 loo_2.8.0            
#>  [61] withr_3.0.2           fastmap_1.2.0         boot_1.3-31          
#>  [64] digest_0.6.37         mi_1.1                timechange_0.3.0     
#>  [67] R6_2.6.1              mime_0.13             estimability_1.5.1   
#>  [70] colorspace_2.1-1      gtools_3.9.5          jpeg_0.1-10          
#>  [73] generics_0.1.3        data.table_1.17.0     corpcor_1.6.10       
#>  [76] httr_1.4.7            htmlwidgets_1.6.4     pkgconfig_2.0.3      
#>  [79] sem_3.1-16            gtable_0.3.6          bain_0.2.11          
#>  [82] htmltools_0.5.8.1     carData_3.0-5         blavaan_0.5-8        
#>  [85] png_0.1-8             reformulas_0.4.0      rstudioapi_0.17.1    
#>  [88] tzdb_0.5.0            reshape2_1.4.4        curl_6.2.1           
#>  [91] coda_0.19-4.1         checkmate_2.3.2       nlme_3.1-167         
#>  [94] nloptr_2.2.1          zoo_1.8-13            parallel_4.4.2       
#>  [97] miniUI_0.1.1.1        nonnest2_0.5-8        foreign_0.8-88       
#> [100] pillar_1.10.1         grid_4.4.2            vctrs_0.6.5          
#> [103] RANN_2.6.2            promises_1.3.2        car_3.1-3            
#> [106] xtable_1.8-4          cluster_2.1.8.1       GPArotation_2024.3-1 
#> [109] htmlTable_2.4.3       evaluate_1.0.3        pbivnorm_0.6.0       
#> [112] gsubfn_0.7            mvtnorm_1.3-3         cli_3.6.4            
#> [115] kutils_1.73           compiler_4.4.2        rlang_1.1.5          
#> [118] rstantools_2.4.0      future.apply_1.11.3   ggsignif_0.6.4       
#> [121] fdrtool_1.2.18        plyr_1.8.9            stringi_1.8.4        
#> [124] rstan_2.32.7          pander_0.6.6          QuickJSR_1.6.0       
#> [127] munsell_0.5.1         lisrelToR_0.3         CompQuadForm_1.4.3   
#> [130] V8_6.0.2              pacman_0.5.1          Matrix_1.7-3         
#> [133] hms_1.1.3             glasso_1.11           future_1.34.0        
#> [136] shiny_1.10.0          rbibutils_2.3         igraph_2.1.4         
#> [139] broom_1.0.7           RcppParallel_5.1.10