19. La rotazione fattoriale#

Nel capitolo L’estrazione dei fattori abbiamo visto come sia possibile ottenere la soluzione fattoriale non ruotata per il numero di fattori comuni che meglio riassume l’informazione contenuta nella matrice di correlazioni (o covarianze). Tuttavia, questa soluzione non garantisce l’identificazione di gruppi omogenei e interpretabili di variabili osservate. Pertanto, si ricorre alla rotazione degli assi fattoriali per ottenere una soluzione più facilmente interpretabile rispetto a quella iniziale.

19.1. Indeterminatezza della soluzione fattoriale#

La necessità di effettuare la rotazione deriva dal fatto che la matrice delle saturazioni non ha un’unica soluzione. Attraverso trasformazioni matematiche, è possibile ottenere infinite matrici dello stesso ordine. Questo fenomeno è noto come indeterminatezza della soluzione fattoriale.

La matrice delle saturazioni fattoriali \(\boldsymbol{\Lambda}\) non è univocamente definita poiché non esiste una soluzione unica per determinare le saturazioni fattoriali. Una matrice di correlazioni \(\boldsymbol{R}\) può produrre diverse soluzioni fattoriali, ovvero matrici con lo stesso numero di fattori comuni ma con diverse configurazioni di saturazioni fattoriali, o matrici di saturazioni fattoriali corrispondenti a un diverso numero di fattori comuni.

Esempio. Siano \(\boldsymbol{\Lambda}_1\) e \(\boldsymbol{\Lambda}_2\) due matrici aventi lo stesso numero di righe e colonne, ma contenenti saturazioni fattoriali diverse. \(\boldsymbol{\Lambda}_1\) è definita dai valori seguenti

l1 <- matrix(
  c(
    0.766,  -0.232,
    0.670,  -0.203,
    0.574,  -0.174,
    0.454,   0.533,
    0.389,   0.457,
    0.324,   0.381
  ),
  byrow = TRUE, ncol = 2
)

mentre per \(\boldsymbol{\Lambda}_2\) abbiamo

l2 <- matrix(
  c(
    0.783,  0.163,
    0.685,  0.143,
    0.587,  0.123,
    0.143,  0.685,
    0.123,  0.587,
    0.102,  0.489
  ),
  byrow = TRUE, ncol = 2
)

Esaminiamo la matrice delle correlazioni riprodotte dalle due matrici di pesi fattoriali (con le comunalità sulla diagonale di \(\boldsymbol{R}\)):

l1 %*% t(l1)
A matrix: 6 × 6 of type dbl
0.6405800.5603160.4800520.2241080.1919500.159792
0.5603160.4901090.4199020.1959810.1678590.139737
0.4800520.4199020.3597520.1678540.1437680.119682
0.2241080.1959810.1678540.4902050.4201870.350169
0.1919500.1678590.1437680.4201870.3601700.300153
0.1597920.1397370.1196820.3501690.3001530.250137
l2 %*% t(l2)
A matrix: 6 × 6 of type dbl
0.6396580.5596640.4796700.2236240.1919900.159573
0.5596640.4896740.4196840.1959100.1681960.139797
0.4796700.4196840.3596980.1681960.1444020.120021
0.2236240.1959100.1681960.4896740.4196840.349551
0.1919900.1681960.1444020.4196840.3596980.299589
0.1595730.1397970.1200210.3495510.2995890.249525

Come si vede, viene ottenuto lo stesso risultato utilizzando matrici \(\boldsymbol{\Lambda}\) con lo stesso numero \(m\) di colonne ma saturazioni fattoriali diverse.

Si consideri ora il caso di matrici \(\boldsymbol{\Lambda}\) corrispondenti a soluzioni fattoriali con un diverso numero di fattori comuni. Siano \(\boldsymbol{\Lambda}_1\) e \(\boldsymbol{\Lambda}_2\) due matrici aventi lo stesso numero di righe ma un numero diverso di colonne:

l1 <- matrix(
  c(
    0.9,
    0.7,
    0.5,
    0.3
  ),
  byrow = TRUE, ncol = 1
)

l2 <- matrix(
  c(
    0.78, 0.45,
    0.61, 0.35,
    0.43, 0.25,
    0.25, 0.15
  ),
  byrow = TRUE, ncol = 2
)

Si noti che la stessa matrice di correlazioni riprodotte (con le comunalità sulla diagonale principale) viene generata dalle saturazioni fattoriali corrispondenti ad un numero diverso di fattori comuni:

l1 %*% t(l1)
A matrix: 4 × 4 of type dbl
0.810.630.450.27
0.630.490.350.21
0.450.350.250.15
0.270.210.150.09
l2 %*% t(l2)
A matrix: 4 × 4 of type dbl
0.81090.63330.44790.2625
0.63330.49460.34980.2050
0.44790.34980.24740.1450
0.26250.20500.14500.0850

19.2. Parsimonia e semplicità#

Per ottenere risultati affidabili dall’analisi fattoriale, si affronta il problema dell’indeterminazione fattoriale scegliendo la soluzione che soddisfa due criteri fondamentali: il criterio della parsimonia e il criterio della semplicità.

Il criterio della parsimonia richiede di scegliere il modello con il minor numero di fattori comuni che può spiegare la covarianza tra le variabili. In pratica, se ci sono due soluzioni fattoriali con un diverso numero di fattori che riproducono allo stesso modo la matrice di covarianza o di correlazione, si sceglie quella con il minor numero di fattori.

In caso invece ci siano diverse soluzioni fattoriali con lo stesso numero m di fattori, il criterio della semplicità guida nella scelta della trasformazione più appropriata della matrice di saturazioni fattoriali \(\boldsymbol{\Lambda}\). Questa trasformazione, nota come rotazione, cerca di rendere i fattori più interpretabili. Ci sono due tipi di rotazione: ortogonale e obliqua.

La rotazione ortogonale assume che i fattori siano incorrelati, mentre la rotazione obliqua consente correlazioni tra i fattori. L’obiettivo della rotazione è di trovare una soluzione che renda i fattori più facilmente interpretabili e, quindi, in grado di spiegare meglio i dati.

19.2.1. Il criterio della struttura semplice#

La rotazione degli assi fattoriali è un metodo utilizzato nell’analisi fattoriale per ottenere una struttura semplice della matrice delle saturazioni fattoriali. Questa struttura si caratterizza per poche ma forti saturazioni diverse da zero e dall’assenza di variabili saturate da più di un fattore. Thurstone (1947) propose un criterio di struttura semplice che si raggiunge quando si soddisfano alcune condizioni nella matrice fattoriale ruotata, come la presenza di saturazioni nulle per ogni variabile e per ogni fattore almeno \(m\) saturazioni nulle, dove \(m\) è il numero di fattori comuni.

In pratica, si cerca di massimizzare il numero di saturazioni nulle o quasi nulle nella matrice fattoriale ruotata per ottenere la struttura semplice e facilitare l’interpretazione dei fattori. L’esame delle saturazioni fattoriali nella matrice ruotata consente di fornire un’interpretazione ai fattori, osservando quali variabili sono maggiormente associate con essi e quanto forti sono questi legami. Se i coefficienti di impatto di un fattore sono positivi e elevati su un sottoinsieme di variabili osservate, deduciamo che il fattore rappresenta ciò che hanno in comune le variabili che saturano sul fattore. Tuttavia, l’interpretazione può diventare più complessa nel caso di variabili che saturano su più fattori.

19.3. Rotazione nello spazio geometrico#

19.3.1. Rotazione ortogonale#

Come abbiamo visto in precedenza, la matrice delle saturazioni fattoriali non è identificabile, il che significa che esistono molteplici soluzioni equivalenti per la determinazione dei pesi fattoriali. La rotazione ortogonale consiste nell’applicare una trasformazione lineare ai pesi fattoriali, in modo tale che venga prodotta una nuova matrice di saturazioni fattoriali che soddisfa alcuni criteri di struttura semplice, come descritto in precedenza. In altre parole, l’obiettivo della rotazione ortogonale è quello di ottenere una rappresentazione più interpretabile dei dati.

Geometricamente, la rotazione ortogonale corrisponde a una rotazione rigida degli assi cartesiani del sistema di coordinate che rappresenta i pesi fattoriali. Questa rotazione mantiene invariata la distanza tra i punti che rappresentano le saturazioni fattoriali, ma cambia la posizione relativa delle variabili rispetto ai fattori. In questo modo, è possibile ottenere una struttura dei pesi fattoriali più semplice e interpretabile. La rotazione ortogonale viene solitamente effettuata utilizzando la tecnica della massima verosimiglianza o del metodo dei componenti principali, al fine di massimizzare il numero di saturazioni nulle o quasi nulle nella nuova matrice delle saturazioni fattoriali.

19.3.2. Vincoli alla rotazione#

Il problema della non identificabilità di \(\hat{\boldsymbol{\Lambda}}\) significa che ci sono molte possibili matrici di pesi fattoriali che possono produrre gli stessi valori di correlazione tra le variabili del nostro modello. Per risolvere questo problema, è necessario impostare dei vincoli sulla rotazione dei fattori. Il criterio principale nella scelta della rotazione è quello della semplicità della matrice \(\hat{\boldsymbol{\Lambda}}\), ovvero la vicinanza dei suoi elementi ai valori 0 e 1. Questo rende più facile interpretare i fattori come combinazioni lineari delle variabili.

Le rotazioni ortogonali non cambiano le comunalità nel caso di fattori incorrelati, perché preservano le distanze tra i punti identificati dai pesi fattoriali. Questo significa che la comunalità può essere calcolata come la somma dei quadrati dei pesi fattoriali. Tuttavia, le rotazioni non ortogonali cambiano la quota di varianza spiegata da ciascun fattore, perché la varianza spiegata è data dalla somma dei quadrati dei pesi fattoriali divisa per la traccia della matrice delle correlazioni.

Ci sono diversi algoritmi per la rotazione ortogonale dei fattori. Alcuni di essi sono il metodo grafico, il metodo Quartimax e il metodo Varimax.

19.3.3. Metodo grafico#

Per ruotare il sistema degli assi, se ci sono solo \(m=2\) fattori, utilizziamo un sistema di coordinate bidimensionale per ottenere la loro rappresentazione geometrica. L’ispezione visiva del diagramma delle saturazioni fattoriali può guidare nella scelta della rotazione più appropriata. Le righe di \(\hat{\boldsymbol{\Lambda}}\) corrispondono a coppie di pesi fattoriali, \(\hat{\lambda}_{i1}, \hat{\lambda}_{i2}\), con \(i=1, \dots, p\), che possono essere interpretate come le coordinate di \(p\) punti (tanti quanti le variabili manifeste). Gli assi del diagramma vengono ruotati di un angolo \(\phi\) per avvicinarli il più possibile ai punti presenti nel grafico. Le nuove coordinate (\(\hat{\lambda}_{i1}^*, \hat{\lambda}_{i2}^*\)) vengono calcolate come \(\hat{\boldsymbol{\Lambda}}^* = \hat{\boldsymbol{\Lambda}} \textbf{T}\), dove

\[\begin{split} \textbf{T} = \left[ \begin{array}{ c c } \cos{\phi} & - \sin{\phi}\\ \sin{\phi} & \cos{\phi} \end{array} \right] \end{split}\]

è una matrice ortogonale \(2 \times 2\).

Esempio. Si considerino i dati di Brown, Williams e Barlow (1984) discussi da Rencher [Ren02]. Ad una bambina di dodici anni è stato chiesto di valutare sette dei suoi conoscenti su cinque variabili: kind, intelligent, happy, likeable e just. Per queste cinque variabili, la matrice di correlazioni è

R <- matrix(
  c(
    1.00, .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.00
  ),
  ncol = 5, byrow = TRUE, dimnames = list(
    c("K", "I", "H", "L", "J"), c("K", "I", "H", "L", "J")
  )
)

print(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

Dalla matrice R estraiamo due fattori con il metodo delle componenti principali:

f.pc <- principal(R, 2, rotate = FALSE) 
f.pc
Specified rotation not found, rotate='none' used
Principal Components Analysis
Call: principal(r = R, nfactors = 2, rotate = FALSE)
Standardized loadings (pattern matrix) based upon correlation matrix
   PC1   PC2   h2     u2 com
K 0.97 -0.23 0.99 0.0067 1.1
I 0.52  0.81 0.92 0.0792 1.7
H 0.78 -0.59 0.96 0.0391 1.9
L 0.97 -0.21 0.99 0.0135 1.1
J 0.70  0.67 0.94 0.0597 2.0

                       PC1  PC2
SS loadings           3.26 1.54
Proportion Var        0.65 0.31
Cumulative Var        0.65 0.96
Proportion Explained  0.68 0.32
Cumulative Proportion 0.68 1.00

Mean item complexity =  1.6
Test of the hypothesis that 2 components are sufficient.

The root mean square of the residuals (RMSR) is  0.03 

Fit based upon off diagonal values = 1

Si noti che i fattori sono difficili da interpretare: il primo fattore è caratterizzato da saturazioni fattoriali alte e positive su tutte le variabili manifeste; il secondo fattore è identificato dalle cinque variabili mediante una saturazione fattoriale alta e positiva, mentre le altre saturazioni fattoriali sono negative.

Nella seguente figura, i punti rappresentano le cinque coppie di saturazioni fattoriali non ruotate (una per ciascun fattore):

plot(
  f.pc$load[, 1], f.pc$load[, 2],
  bty = "n", xaxt = "n",
  xlab = "Primo Fattore", ylab = "Secondo Fattore",
  ylim = c(-.6, 1), xlim = c(0, 1), pch = 19, asp = 1
)
axis(1, pos = c(0, 0))
abline(0, 0)
_images/3ecd9e938c0bbd6bfc0673082ed592c2654383baa53ff4108df4b9c4df486498.png

Rencher [Ren02] nota che, per questi dati, una rotazione ortogonale di \(-35^{\circ}\) porterebbe gli assi ad avvicinarsi ai punti del diagramma a dispersione. Per verificare questo, disegnamo sul diagramma i nuovi assi dopo una rotazione di \(-35^{\circ}\). Le istruzioni R sono le seguenti:

plot(
  f.pc$load[, 1], f.pc$load[, 2],
  bty = "n", xaxt = "n",
  xlab = "Primo Fattore", ylab = "Secondo Fattore",
  ylim = c(-.6, 1), xlim = c(0, 1), pch = 19, asp = 1
)
axis(1, pos = c(0, 0))
abline(0, 0)

ar <- matrix(c(
  0, 0,
  0, 1,
  0, 0,
  1, 0
), ncol = 2, byrow = TRUE)

angle <- 35
rad <- angle * pi / 180
T <- matrix(c(
  cos(rad), -sin(rad),
  sin(rad),  cos(rad)
), ncol = 2, byrow = TRUE)

round(ar %*% T, 3)

arrows(0, 0, 0.574, 0.819, lwd = 2)
arrows(0, 0, 0.819, -0.574, lwd = 2)
A matrix: 4 × 2 of type dbl
0.000 0.000
0.574 0.819
0.000 0.000
0.819-0.574
_images/9693c8d693c1d9973cf884beb616700f73e538442c32aaddda0d7f1fd333e724.png

Nella figura, le due frecce rappresentano gli assi ruotati. La rotazione di \(-35^{\circ}\) ha effettivamente avvicinato gli assi ai punti del diagramma. Se usiamo dunque il valore \(\phi = -35^{\circ}\) nella matrice di rotazione, possiamo calcolare le saturazioni fattoriali della soluzione ruotata \(\hat{\boldsymbol{\Lambda}}^* = \hat{\boldsymbol{\Lambda}} \textbf{T}\).

Le saturazioni fattoriali ruotate corrispondono alla proiezione ortogonale dei punti sugli assi ruotati:

angle <- -35
rad <- angle * pi / 180
T <- matrix(c(
  cos(rad), -sin(rad),
  sin(rad),  cos(rad)
), ncol = 2, byrow = TRUE)
round(f.pc$load %*% T, 3)
A matrix: 5 × 2 of type dbl
K 0.927 0.367
I-0.037 0.959
H 0.980-0.031
L 0.916 0.385
J 0.194 0.950

La soluzione ottenuta in questo modo riproduce quanto riportato da Rencher [Ren02].

19.3.4. Medodi di rotazione ortogonale#

Un tipo di rotazione ortogonale spesso utilizzata è la rotazione Varimax (Kaiser, 1958). La matrice \(\hat{\boldsymbol{\Lambda}}\) è semplificata in modo tale che le varianze dei quadrati degli elementi \(\lambda_{ij}\) appartenenti a colonne diverse di \(\hat{\boldsymbol{\Lambda}}\) siano massime. Se le saturazioni fattoriali in una colonna di \(\hat{\boldsymbol{\Lambda}}\) sono simili tra loro, la varianza sarà prossima a zero. Tale varianza è tanto più grande quanto più i quadrati degli elementi \(\lambda_{ij}\) assumono valori prossimi a \(0\) e \(1\). Amplificando le correlazioni più alte e riducendo quelle più basse, la rotazione Varimax agevola l’interpretazione di ciascun fattore.

Usando la funzione factanal() del modulo R base, la rotazione Varimax può essere applicata alla soluzione ottenuta mediante il metodo di massima verosimiglianza. Usando le funzioni principal() e factor.pa() disponibili nel pacchetto psych, la rotazione Varimax può essere applicata alle soluzioni ottenute mediante il metodo delle componenti principali e il metodo del fattore principale.

Ad esempio, usando il metodo delle componenti principali otteniamo:

f_pc <- principal(R, 2, n.obs = 7, rotate = "varimax")
f_pc
Principal Components Analysis
Call: principal(r = R, nfactors = 2, rotate = "varimax", n.obs = 7)
Standardized loadings (pattern matrix) based upon correlation matrix
   RC1   RC2   h2     u2 com
K 0.95  0.30 0.99 0.0067 1.2
I 0.03  0.96 0.92 0.0792 1.0
H 0.97 -0.10 0.96 0.0391 1.0
L 0.94  0.32 0.99 0.0135 1.2
J 0.26  0.93 0.94 0.0597 1.2

                       RC1  RC2
SS loadings           2.81 1.99
Proportion Var        0.56 0.40
Cumulative Var        0.56 0.96
Proportion Explained  0.58 0.42
Cumulative Proportion 0.58 1.00

Mean item complexity =  1.1
Test of the hypothesis that 2 components are sufficient.

The root mean square of the residuals (RMSR) is  0.03 
 with the empirical chi square  0.12  with prob <  0.73 

Fit based upon off diagonal values = 1

Un altro metodo di rotazione ortogonale è il metodo Quartimax (Neuhaus e Wringley, 1954), il quale opera una semplificazione della matrice \(\hat{\boldsymbol{\Lambda}}\) massimizzando le covarianze tra i quadrati degli elementi \(\lambda_{ij}\) appartenenti a righe diverse, subordinatamente alla condizione che la varianza delle righe rimanga inalterata.

19.3.5. Metodi di rotazione obliqua#

Il termine “rotazione obliqua” è improprio poiché una rotazione implica una trasformazione ortogonale che preserva le distanze. Secondo Rencher [Ren02], un termine più appropriato sarebbe “trasformazione obliqua”. Tuttavia, il termine “rotazione obliqua” è di uso comune.

Nella rotazione obliqua, gli assi della soluzione ruotata non devono rimanere ortogonali e quindi possono avvicinarsi più facilmente ai raggruppamenti di punti nello spazio delle saturazioni fattoriali (se esistono). Esistono vari metodi analitici per ottenere una rotazione obliqua. Per esempio, nel metodo Direct Oblimin (Jennrich e Sampson, 1966), il criterio usato è il seguente:

\[ \sum_{ij} \left(\sum_v \lambda_i^2 \lambda_j^2 - w \frac{1}{p} \sum_v \lambda_i^2 \sum_v \lambda_j^2\right) \]

dove \(\sum_{ij}\) si riferisce alla somma su tutte le coppie di fattori \(ij\). In questo caso si procede ad una minimizzazione piuttosto che a una masssimizzazione.

19.4. Matrice dei pesi fattoriali e matrice di struttura#

Nella rotazione ortogonale i fattori sono incorrelati. Si consideri la situazione presentata nella figura successiva, con due variabili latenti incorrelate (\(\xi_1\) e \(\xi_2\)) e quattro variabili manifeste (\(y_1\), \(y_2\), \(y_3\), \(y_4\)). Siano \(\lambda_{11}\), \(\lambda_{12}\), \(\lambda_{13}\) e \(\lambda_{14}\) le saturazioni fattoriali delle variabili nel primo fattore; siano \(\lambda_{21}\), \(\lambda_{22}\), \(\lambda_{23}\) e \(\lambda_{24}\) le saturazioni fattoriali delle variabili nel secondo fattore.

_images/rot_4.png

Fig. 19.1 Rotazione ortogonale.#

In un diagramma di percorso, la correlazione tra due variabili è uguale alla somma dei valori numerici di tutti i percorsi legittimi che le collegano. Se i fattori comuni sono incorrelati, c’è un unico percorso legittimo che collega ciascuna variabile manifesta a ciascun fattore comune in base alle regole di Wright. Le correlazioni tra variabili manifeste e fattori comuni sono quindi uguali alle saturazioni fattoriali. Nel caso di fattori comuni incorrelati, dunque, la matrice delle saturazioni fattoriali descrive le correlazioni tra variabili e fattori. Le saturazioni fattoriali possono essere interpretate come i pesi beta del modello di regressione multipla, ovvero come la stima del contributo specifico di ciascun fattore comune nella determinazione della varianza spiegata degli item (Tabachnick & Fidell, 2001).

Nel caso della rotazione obliqua, la soluzione fattoriale ruotata produce un insieme di fattori comuni correlati tra loro. Di conseguenza, la matrice delle saturazioni fattoriali non descrive le correlazioni tra variabili e fattori. In un diagramma di percorso ci sono almeno due percorsi legittimi che collegano ciascuna variabile manifesta a ciascun fattore comune in base alle regole di Wright. Nel caso di una rotazione obliqua è quindi necessario specificare tre diverse matrici:

  • la matrice delle saturazioni fattoriali, \(\hat{\boldsymbol{\Lambda}}\), detta matrice pattern (factor pattern matrix, o “configurazione,” o “matrice dei modelli”);

  • la matrice delle correlazioni tra variabili manifeste e fattori, detta matrice di struttura (factor structure matrix);

  • la matrice che esprime le correlazioni tra i fattori, \(\hat{\boldsymbol{\Phi}}\), detta matrice di intercorrelazione fattoriale.

In questo caso, la matrice pattern rappresenta l’analogo dei coefficienti parziali di regressione della variabile sul fattore, al netto degli altri fattori. Nel caso della rotazione obliqua, è la matrice che viene usata per determinare in che grado è stata raggiunta la “struttura semplice”.

Esaminiamo in dettaglio la soluzione fattoriale prodotta da una rotazione obliqua. In questo caso, gli assi che rappresentano i fattori non sono ortogonali (ovvero, i fattori sono correlati) e, in un diagramma di percorso, le variabili manifeste sono collegate ai fattori attraverso due tipi distinti di percorsi che rappresentano l’effetto “diretto” e “indiretto” dei fattori sulle variabili. Nel caso di una rotazione obliqua, le saturazioni fattoriali non coincidono con le correlazioni tra variabili e fattori. Si consideri la figura @ref(fig:fact-rot5). Nel caso di una rotazione obliqua, la correlazione tra i due fattori comuni viene rappresentata mediante la freccia non direzionata \(\phi_{12}\) che collega \(\xi_1\) e \(\xi_2\). Nel diagramma di percorso della figura successiva ci sono due percorsi legittimi che, in base alle regole di Wright, consentono di collegare ciascuna variabile manifesta a un fattore comune.

Ad esempio, per la variabile \(y_1\) e il fattore \(\xi_1\), i percorsi sono: la freccia causale \(\lambda_{11}\) che rappresenta l’effetto diretto di \(\xi_1\) su \(y_1\) e il percorso composto che rappresenta l’effetto indiretto di \(\xi_1\) su \(y_1\), il cui valore numerico è uguale al prodotto \(\lambda_{21}\phi_{12}\). Nell’analisi dei percorsi, la correlazione tra \(\xi_1\) e \(y_1\) è uguale alla somma dei valori numerici dei percorsi legittimi che collegano \(y_1\) a \(\xi_1\), ovvero \(\lambda_{11} + \lambda_{21} \phi_{12}\).

_images/rot_5.png

Fig. 19.2 Rotazione obliqua.#

Per illustrare la rotazione obliqua, utilizziamo i dati discussi da Rencher [Ren02]. Si consideri la matrice di correlazione presentata qui sotto.

R <- matrix(
  c(
    1.00,  0.735, 0.711, 0.704,
    0.735, 1.00,  0.693, 0.709,
    0.711, 0.693, 1.00,  0.839,
    0.704, 0.709, 0.839, 1.00
  ),
  ncol = 4,
  byrow = TRUE
)
R
A matrix: 4 × 4 of type dbl
1.0000.7350.7110.704
0.7351.0000.6930.709
0.7110.6931.0000.839
0.7040.7090.8391.000

Iniziamo calcolando la soluzione a due fattori mediante il metodo delle componenti principali e una rotazione Varimax (ovvero, ortogonale). Otteniamo le seguenti saturazioni fattoriali.

f1_pc <- principal(R, 2, rotate = "varimax") 
f1_pc
Principal Components Analysis
Call: principal(r = R, nfactors = 2, rotate = "varimax")
Standardized loadings (pattern matrix) based upon correlation matrix
   RC1  RC2   h2    u2 com
1 0.50 0.78 0.86 0.140 1.7
2 0.47 0.81 0.88 0.124 1.6
3 0.90 0.33 0.92 0.078 1.3
4 0.89 0.35 0.92 0.083 1.3

                       RC1  RC2
SS loadings           2.08 1.50
Proportion Var        0.52 0.37
Cumulative Var        0.52 0.89
Proportion Explained  0.58 0.42
Cumulative Proportion 0.58 1.00

Mean item complexity =  1.5
Test of the hypothesis that 2 components are sufficient.

The root mean square of the residuals (RMSR) is  0.06 

Fit based upon off diagonal values = 0.99

Si noti che i due fattori non sono molto distinti. Consideriamo dunque la soluzione prodotta da una rotazione obliqua. Usiamo qui l’algoritmo Oblimin.

pr_oblimin <- principal(R, 2, rotate = "oblimin")
Loading required namespace: GPArotation

La matrice \(\hat{\boldsymbol{\Lambda}}\) delle saturazioni fattoriali si ricava come indicato di seguito.

cbind(pr_oblimin$load[, 1], pr_oblimin$load[, 2])
A matrix: 4 × 2 of type dbl
0.03206780 0.90186261
-0.02543116 0.95556536
0.96858605-0.01096737
0.94726778 0.01327683

La matrice \(\hat{\boldsymbol{\Phi}}\) di inter-correlazione fattoriale è la seguente.

pr_oblimin$Phi
A matrix: 2 × 2 of type dbl
TC1TC2
TC11.00000000.7869776
TC20.78697761.0000000

La matrice di struttura, che riporta le correlazioni tra indicatori e fattori comuni, si ottiene pre-moltiplicando la matrice \(\boldsymbol{\Lambda}\) delle saturazioni fattoriali alla matrice \(\boldsymbol{\Phi}\) di inter-correlazione fattoriale.

\[ \text{matrice di struttura} = \boldsymbol{\Lambda}\boldsymbol{\Phi}. \]

Per esempio, la correlazione tra la prima variabile manifesta e il primo fattore si ottiene nel modo seguente.

pr_oblimin$load[1, 1] + pr_oblimin$load[1, 2] * pr_oblimin$Phi[2, 1]
TC1: 0.741813471502873

L’intera matrice di struttura si può trovare eseguendo la moltiplicazione \(\boldsymbol{\Lambda}\boldsymbol{\Phi}\).

pr_oblimin$load %*% pr_oblimin$Phi %>% 
  round(3)
A matrix: 4 × 2 of type dbl
TC1TC2
0.7420.927
0.7270.936
0.9600.751
0.9580.759

19.5. Esempio con semTools#

Presento qui un esempio di uso di vari metodi di estrazione fattoriale. Tra tali metodi, la rotazione obliqua Geomin è molto popolare ed è il default di M-Plus.

Iniziamo a caricare il pacchetto semTools.

suppressPackageStartupMessages(library("semTools")) 

Eseguiamo l’analisi fattoriale esplorativa del classico set di dati di Holzinger e Swineford (1939) il quale è costituito dai punteggi dei test di abilità mentale di bambini di seconda e terza media di due scuole diverse (Pasteur e Grant-White). Nel set di dati originale (disponibile nel pacchetto MBESS), sono forniti i punteggi di 26 test. Tuttavia, un sottoinsieme più piccolo con 9 variabili è più ampiamente utilizzato in letteratura. Questi sono i dati qui usati.

Nel presente esempio, verrà eseguita l’analisi fattoriale esplorativa con l’estrazione di tre fattori. Il metodo di estrazione è mlr:

maximum likelihood estimation with robust (Huber-White) standard errors and a scaled test statistic that is (asymptotically) equal to the Yuan-Bentler test statistic. For both complete and incomplete data.

La soluzione iniziale non è ruotata.

unrotated <- efaUnrotate(HolzingerSwineford1939, nf = 3, varList = paste0("x", 1:9), estimator = "mlr")
out <- summary(unrotated)
print(out)
lavaan 0.6.15 ended normally after 206 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

  Number of observations                           301

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                                22.897      23.864
  Degrees of freedom                                12          12
  P-value (Chi-square)                           0.029       0.021
  Scaling correction factor                                  0.959
    Yuan-Bentler correction (Mplus variant)                       

Parameter Estimates:

  Standard errors                             Sandwich
  Information bread                           Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  factor1 =~                                          
    x1      (l1_1)    0.653    0.083    7.909    0.000
    x2      (l2_1)    0.353    0.079    4.481    0.000
    x3      (l3_1)    0.415    0.086    4.832    0.000
    x4      (l4_1)    0.926    0.067   13.762    0.000
    x5      (l5_1)    1.014    0.067   15.176    0.000
    x6      (l6_1)    0.868    0.062   13.887    0.000
    x7      (l7_1)    0.283    0.091    3.113    0.002
    x8      (l8_1)    0.340    0.083    4.096    0.000
    x9      (l9_1)    0.460    0.078    5.881    0.000
  factor2 =~                                          
    x1      (l1_2)    0.349    0.124    2.814    0.005
    x2      (l2_2)    0.242    0.159    1.523    0.128
    x3      (l3_2)    0.497    0.132    3.766    0.000
    x4      (l4_2)   -0.337    0.067   -5.058    0.000
    x5      (l5_2)   -0.461    0.077   -6.008    0.000
    x6      (l6_2)   -0.280    0.057   -4.908    0.000
    x7      (l7_2)    0.372    0.188    1.977    0.048
    x8      (l8_2)    0.510    0.133    3.831    0.000
    x9      (l9_2)    0.489    0.066    7.416    0.000
  factor3 =~                                          
    x1      (l1_3)   -0.338    0.103   -3.276    0.001
    x2      (l2_3)   -0.405    0.092   -4.401    0.000
    x3      (l3_3)   -0.404    0.120   -3.355    0.001
    x4      (l4_3)    0.049    0.098    0.503    0.615
    x5      (l5_3)    0.122    0.105    1.154    0.248
    x6      (l6_3)   -0.000    0.076   -0.002    0.998
    x7      (l7_3)    0.609    0.125    4.863    0.000
    x8      (l8_3)    0.409    0.143    2.853    0.004
    x9      (l9_3)    0.112    0.123    0.915    0.360

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)
  factor1 ~~                                          
    factor2           0.000                           
    factor3           0.000                           
  factor2 ~~                                          
    factor3           0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
    factor1           1.000                           
    factor2           1.000                           
    factor3           1.000                           
   .x1                0.696    0.113    6.184    0.000
   .x2                1.035    0.106    9.803    0.000
   .x3                0.692    0.097    7.132    0.000
   .x4                0.377    0.053    7.170    0.000
   .x5                0.403    0.064    6.303    0.000
   .x6                0.365    0.046    7.984    0.000
   .x7                0.594    0.148    4.014    0.000
   .x8                0.479    0.099    4.842    0.000
   .x9                0.551    0.065    8.518    0.000

Constraints:
                                               |Slack|
    0-(1_2*1_1+2_2*2_1+3_2*3_1+4_2*4_1+5_2*5_    0.000
    0-(1_3*1_1+2_3*2_1+3_3*3_1+4_3*4_1+5_3*5_    0.000
    0-(1_3*1_2+2_3*2_2+3_3*3_2+4_3*4_2+5_3*5_    0.000

Si noti che, in assenza di rotazione, è impossibile assegnare un significato ai fattori comuni.

19.5.1. Orthogonal varimax#

Utilizziamo ora la rotazione ortogonale Varimax.

out_varimax <- orthRotate(unrotated, method = "varimax")
out <- summary(out_varimax, sort = FALSE, suppress = 0.3)
print(out)
Standardized Rotated Factor Loadings
Warning message in testLoadings(object):
“The standard error is currently invalid because it does not account for the variance of the rotation function. It is simply based on the delta method.”
   factor1 factor2 factor3
x1  0.320*  0.607*        
x2          0.481*        
x3          0.662*        
x4  0.838*                
x5  0.867*                
x6  0.815*                
x7                  0.695*
x8                  0.704*
x9          0.409*  0.511*

Factor Correlation
        factor1 factor2 factor3
factor1       1       0       0
factor2       0       1       0
factor3       0       0       1

Method of rotation:	varimax 

Test Statistics for Standardized Rotated Factor Loadings
Warning message in testLoadings(object):
“The standard error is currently invalid because it does not account for the variance of the rotation function. It is simply based on the delta method.”
       lhs op rhs std.loading    se      z     p ci.lower ci.upper
1  factor1 =~  x1       0.320 0.055  5.799 0.000    0.212    0.428
2  factor1 =~  x2       0.135 0.063  2.151 0.031    0.012    0.259
3  factor1 =~  x3       0.080 0.049  1.622 0.105   -0.017    0.176
4  factor1 =~  x4       0.838 0.028 30.193 0.000    0.784    0.892
5  factor1 =~  x5       0.867 0.024 36.189 0.000    0.820    0.914
6  factor1 =~  x6       0.815 0.024 33.939 0.000    0.768    0.862
7  factor1 =~  x7       0.102 0.049  2.058 0.040    0.005    0.199
8  factor1 =~  x8       0.078 0.048  1.617 0.106   -0.016    0.172
9  factor1 =~  x9       0.170 0.053  3.222 0.001    0.067    0.273
10 factor2 =~  x1       0.607 0.075  8.138 0.000    0.461    0.753
11 factor2 =~  x2       0.481 0.067  7.184 0.000    0.350    0.612
12 factor2 =~  x3       0.662 0.058 11.499 0.000    0.549    0.775
13 factor2 =~  x4       0.113 0.043  2.615 0.009    0.028    0.198
14 factor2 =~  x5       0.032 0.040  0.802 0.422   -0.047    0.111
15 factor2 =~  x6       0.162 0.042  3.855 0.000    0.079    0.244
16 factor2 =~  x7      -0.062 0.047 -1.341 0.180   -0.154    0.029
17 factor2 =~  x8       0.174 0.082  2.117 0.034    0.013    0.336
18 factor2 =~  x9       0.409 0.079  5.173 0.000    0.254    0.564
19 factor3 =~  x1       0.130 0.066  1.978 0.048    0.001    0.259
20 factor3 =~  x2      -0.041 0.071 -0.578 0.563   -0.179    0.098
21 factor3 =~  x3       0.113 0.049  2.324 0.020    0.018    0.209
22 factor3 =~  x4       0.077 0.040  1.916 0.055   -0.002    0.155
23 factor3 =~  x5       0.070 0.042  1.669 0.095   -0.012    0.153
24 factor3 =~  x6       0.066 0.038  1.715 0.086   -0.009    0.141
25 factor3 =~  x7       0.695 0.092  7.591 0.000    0.516    0.875
26 factor3 =~  x8       0.704 0.083  8.520 0.000    0.542    0.865
27 factor3 =~  x9       0.511 0.065  7.885 0.000    0.384    0.638
       lhs op rhs std.loading    se      z     p ci.lower ci.upper
1  factor1 =~  x1       0.320 0.055  5.799 0.000    0.212    0.428
2  factor1 =~  x2       0.135 0.063  2.151 0.031    0.012    0.259
3  factor1 =~  x3       0.080 0.049  1.622 0.105   -0.017    0.176
4  factor1 =~  x4       0.838 0.028 30.193 0.000    0.784    0.892
5  factor1 =~  x5       0.867 0.024 36.189 0.000    0.820    0.914
6  factor1 =~  x6       0.815 0.024 33.939 0.000    0.768    0.862
7  factor1 =~  x7       0.102 0.049  2.058 0.040    0.005    0.199
8  factor1 =~  x8       0.078 0.048  1.617 0.106   -0.016    0.172
9  factor1 =~  x9       0.170 0.053  3.222 0.001    0.067    0.273
10 factor2 =~  x1       0.607 0.075  8.138 0.000    0.461    0.753
11 factor2 =~  x2       0.481 0.067  7.184 0.000    0.350    0.612
12 factor2 =~  x3       0.662 0.058 11.499 0.000    0.549    0.775
13 factor2 =~  x4       0.113 0.043  2.615 0.009    0.028    0.198
14 factor2 =~  x5       0.032 0.040  0.802 0.422   -0.047    0.111
15 factor2 =~  x6       0.162 0.042  3.855 0.000    0.079    0.244
16 factor2 =~  x7      -0.062 0.047 -1.341 0.180   -0.154    0.029
17 factor2 =~  x8       0.174 0.082  2.117 0.034    0.013    0.336
18 factor2 =~  x9       0.409 0.079  5.173 0.000    0.254    0.564
19 factor3 =~  x1       0.130 0.066  1.978 0.048    0.001    0.259
20 factor3 =~  x2      -0.041 0.071 -0.578 0.563   -0.179    0.098
21 factor3 =~  x3       0.113 0.049  2.324 0.020    0.018    0.209
22 factor3 =~  x4       0.077 0.040  1.916 0.055   -0.002    0.155
23 factor3 =~  x5       0.070 0.042  1.669 0.095   -0.012    0.153
24 factor3 =~  x6       0.066 0.038  1.715 0.086   -0.009    0.141
25 factor3 =~  x7       0.695 0.092  7.591 0.000    0.516    0.875
26 factor3 =~  x8       0.704 0.083  8.520 0.000    0.542    0.865
27 factor3 =~  x9       0.511 0.065  7.885 0.000    0.384    0.638

19.5.2. Orthogonal Quartimin#

Un metodo alternativo per la rotazione ortogonale è Quartimin.

out_quartimin <- orthRotate(unrotated, method = "quartimin")
out <- summary(out_quartimin, sort = FALSE, suppress = 0.3)
print(out)
Standardized Rotated Factor Loadings
Warning message in testLoadings(object):
“The standard error is currently invalid because it does not account for the variance of the rotation function. It is simply based on the delta method.”
   factor1 factor2 factor3
x1  0.353*  0.590*        
x2          0.474*        
x3          0.657*        
x4  0.844*                
x5  0.869*                
x6  0.823*                
x7                  0.692*
x8                  0.702*
x9          0.397*  0.508*

Factor Correlation
        factor1 factor2 factor3
factor1       1       0       0
factor2       0       1       0
factor3       0       0       1

Method of rotation:	Quartimin 

Test Statistics for Standardized Rotated Factor Loadings
Warning message in testLoadings(object):
“The standard error is currently invalid because it does not account for the variance of the rotation function. It is simply based on the delta method.”
       lhs op rhs std.loading    se      z     p ci.lower ci.upper
1  factor1 =~  x1       0.353 0.062  5.720 0.000    0.232    0.473
2  factor1 =~  x2       0.158 0.066  2.375 0.018    0.028    0.288
3  factor1 =~  x3       0.115 0.057  2.015 0.044    0.003    0.226
4  factor1 =~  x4       0.844 0.027 30.814 0.000    0.790    0.898
5  factor1 =~  x5       0.869 0.023 37.224 0.000    0.823    0.914
6  factor1 =~  x6       0.823 0.024 35.026 0.000    0.777    0.869
7  factor1 =~  x7       0.116 0.054  2.161 0.031    0.011    0.222
8  factor1 =~  x8       0.104 0.054  1.914 0.056   -0.003    0.210
9  factor1 =~  x9       0.202 0.059  3.403 0.001    0.086    0.319
10 factor2 =~  x1       0.590 0.078  7.523 0.000    0.436    0.743
11 factor2 =~  x2       0.474 0.068  6.935 0.000    0.340    0.608
12 factor2 =~  x3       0.657 0.059 11.203 0.000    0.542    0.771
13 factor2 =~  x4       0.072 0.041  1.748 0.080   -0.009    0.152
14 factor2 =~  x5      -0.010 0.039 -0.263 0.793   -0.087    0.066
15 factor2 =~  x6       0.122 0.040  3.008 0.003    0.042    0.201
16 factor2 =~  x7      -0.071 0.048 -1.465 0.143   -0.166    0.024
17 factor2 =~  x8       0.167 0.090  1.849 0.064   -0.010    0.343
18 factor2 =~  x9       0.397 0.087  4.581 0.000    0.227    0.567
19 factor3 =~  x1       0.124 0.071  1.740 0.082   -0.016    0.264
20 factor3 =~  x2      -0.042 0.074 -0.574 0.566   -0.187    0.102
21 factor3 =~  x3       0.114 0.054  2.093 0.036    0.007    0.221
22 factor3 =~  x4       0.056 0.037  1.503 0.133   -0.017    0.128
23 factor3 =~  x5       0.048 0.038  1.263 0.207   -0.027    0.123
24 factor3 =~  x6       0.046 0.034  1.347 0.178   -0.021    0.112
25 factor3 =~  x7       0.692 0.093  7.477 0.000    0.511    0.874
26 factor3 =~  x8       0.702 0.084  8.331 0.000    0.537    0.867
27 factor3 =~  x9       0.508 0.070  7.298 0.000    0.371    0.644
       lhs op rhs std.loading    se      z     p ci.lower ci.upper
1  factor1 =~  x1       0.353 0.062  5.720 0.000    0.232    0.473
2  factor1 =~  x2       0.158 0.066  2.375 0.018    0.028    0.288
3  factor1 =~  x3       0.115 0.057  2.015 0.044    0.003    0.226
4  factor1 =~  x4       0.844 0.027 30.814 0.000    0.790    0.898
5  factor1 =~  x5       0.869 0.023 37.224 0.000    0.823    0.914
6  factor1 =~  x6       0.823 0.024 35.026 0.000    0.777    0.869
7  factor1 =~  x7       0.116 0.054  2.161 0.031    0.011    0.222
8  factor1 =~  x8       0.104 0.054  1.914 0.056   -0.003    0.210
9  factor1 =~  x9       0.202 0.059  3.403 0.001    0.086    0.319
10 factor2 =~  x1       0.590 0.078  7.523 0.000    0.436    0.743
11 factor2 =~  x2       0.474 0.068  6.935 0.000    0.340    0.608
12 factor2 =~  x3       0.657 0.059 11.203 0.000    0.542    0.771
13 factor2 =~  x4       0.072 0.041  1.748 0.080   -0.009    0.152
14 factor2 =~  x5      -0.010 0.039 -0.263 0.793   -0.087    0.066
15 factor2 =~  x6       0.122 0.040  3.008 0.003    0.042    0.201
16 factor2 =~  x7      -0.071 0.048 -1.465 0.143   -0.166    0.024
17 factor2 =~  x8       0.167 0.090  1.849 0.064   -0.010    0.343
18 factor2 =~  x9       0.397 0.087  4.581 0.000    0.227    0.567
19 factor3 =~  x1       0.124 0.071  1.740 0.082   -0.016    0.264
20 factor3 =~  x2      -0.042 0.074 -0.574 0.566   -0.187    0.102
21 factor3 =~  x3       0.114 0.054  2.093 0.036    0.007    0.221
22 factor3 =~  x4       0.056 0.037  1.503 0.133   -0.017    0.128
23 factor3 =~  x5       0.048 0.038  1.263 0.207   -0.027    0.123
24 factor3 =~  x6       0.046 0.034  1.347 0.178   -0.021    0.112
25 factor3 =~  x7       0.692 0.093  7.477 0.000    0.511    0.874
26 factor3 =~  x8       0.702 0.084  8.331 0.000    0.537    0.867
27 factor3 =~  x9       0.508 0.070  7.298 0.000    0.371    0.644

19.5.3. Oblique Quartimin#

L’algoritmo Quartimin può anche essere usato per una soluzione obliqua.

out_oblq <- oblqRotate(unrotated, method = "quartimin")
out <- summary(out_oblq, sort = FALSE, suppress = 0.3)
print(out)
Standardized Rotated Factor Loadings
Warning message in testLoadings(object):
“The standard error is currently invalid because it does not account for the variance of the rotation function. It is simply based on the delta method.”
   factor1 factor2 factor3
x1          0.602*        
x2          0.505*        
x3          0.689*        
x4  0.840*                
x5  0.888*                
x6  0.808*                
x7                  0.723*
x8                  0.701*
x9          0.366*  0.463*

Factor Correlation
          factor1   factor2   factor3
factor1 1.0000000 0.3257794 0.2164262
factor2 0.3257794 1.0000000 0.2704800
factor3 0.2164262 0.2704800 1.0000000

Method of rotation:	Quartimin 

Test Statistics for Standardized Rotated Factor Loadings
Warning message in testLoadings(object):
“The standard error is currently invalid because it does not account for the variance of the rotation function. It is simply based on the delta method.”
       lhs op rhs std.loading    se      z     p ci.lower ci.upper
1  factor1 =~  x1       0.191 0.064  2.965 0.003    0.065    0.317
2  factor1 =~  x2       0.044 0.066  0.665 0.506   -0.085    0.172
3  factor1 =~  x3      -0.069 0.034 -2.031 0.042   -0.137   -0.002
4  factor1 =~  x4       0.840 0.033 25.622 0.000    0.776    0.905
5  factor1 =~  x5       0.888 0.027 32.583 0.000    0.835    0.942
6  factor1 =~  x6       0.808 0.028 28.441 0.000    0.752    0.863
7  factor1 =~  x7       0.044 0.037  1.179 0.238   -0.029    0.116
8  factor1 =~  x8      -0.033 0.036 -0.916 0.360   -0.103    0.037
9  factor1 =~  x9       0.035 0.048  0.728 0.467   -0.059    0.129
10 factor2 =~  x1       0.602 0.086  7.003 0.000    0.434    0.771
11 factor2 =~  x2       0.505 0.071  7.163 0.000    0.367    0.644
12 factor2 =~  x3       0.689 0.056 12.344 0.000    0.580    0.799
13 factor2 =~  x4       0.022 0.045  0.483 0.629   -0.067    0.110
14 factor2 =~  x5      -0.067 0.036 -1.890 0.059   -0.137    0.002
15 factor2 =~  x6       0.078 0.041  1.887 0.059   -0.003    0.158
16 factor2 =~  x7      -0.152 0.037 -4.058 0.000   -0.225   -0.078
17 factor2 =~  x8       0.104 0.109  0.960 0.337   -0.109    0.317
18 factor2 =~  x9       0.366 0.097  3.780 0.000    0.176    0.556
19 factor3 =~  x1       0.031 0.062  0.500 0.617   -0.090    0.152
20 factor3 =~  x2      -0.117 0.066 -1.776 0.076   -0.245    0.012
21 factor3 =~  x3       0.023 0.039  0.587 0.557   -0.054    0.100
22 factor3 =~  x4       0.005 0.042  0.128 0.898   -0.076    0.087
23 factor3 =~  x5       0.008 0.035  0.216 0.829   -0.061    0.076
24 factor3 =~  x6      -0.011 0.030 -0.362 0.717   -0.070    0.048
25 factor3 =~  x7       0.723 0.087  8.328 0.000    0.553    0.893
26 factor3 =~  x8       0.701 0.098  7.137 0.000    0.509    0.894
27 factor3 =~  x9       0.463 0.075  6.211 0.000    0.317    0.609
       lhs op rhs std.loading    se      z     p ci.lower ci.upper
1  factor1 =~  x1       0.191 0.064  2.965 0.003    0.065    0.317
2  factor1 =~  x2       0.044 0.066  0.665 0.506   -0.085    0.172
3  factor1 =~  x3      -0.069 0.034 -2.031 0.042   -0.137   -0.002
4  factor1 =~  x4       0.840 0.033 25.622 0.000    0.776    0.905
5  factor1 =~  x5       0.888 0.027 32.583 0.000    0.835    0.942
6  factor1 =~  x6       0.808 0.028 28.441 0.000    0.752    0.863
7  factor1 =~  x7       0.044 0.037  1.179 0.238   -0.029    0.116
8  factor1 =~  x8      -0.033 0.036 -0.916 0.360   -0.103    0.037
9  factor1 =~  x9       0.035 0.048  0.728 0.467   -0.059    0.129
10 factor2 =~  x1       0.602 0.086  7.003 0.000    0.434    0.771
11 factor2 =~  x2       0.505 0.071  7.163 0.000    0.367    0.644
12 factor2 =~  x3       0.689 0.056 12.344 0.000    0.580    0.799
13 factor2 =~  x4       0.022 0.045  0.483 0.629   -0.067    0.110
14 factor2 =~  x5      -0.067 0.036 -1.890 0.059   -0.137    0.002
15 factor2 =~  x6       0.078 0.041  1.887 0.059   -0.003    0.158
16 factor2 =~  x7      -0.152 0.037 -4.058 0.000   -0.225   -0.078
17 factor2 =~  x8       0.104 0.109  0.960 0.337   -0.109    0.317
18 factor2 =~  x9       0.366 0.097  3.780 0.000    0.176    0.556
19 factor3 =~  x1       0.031 0.062  0.500 0.617   -0.090    0.152
20 factor3 =~  x2      -0.117 0.066 -1.776 0.076   -0.245    0.012
21 factor3 =~  x3       0.023 0.039  0.587 0.557   -0.054    0.100
22 factor3 =~  x4       0.005 0.042  0.128 0.898   -0.076    0.087
23 factor3 =~  x5       0.008 0.035  0.216 0.829   -0.061    0.076
24 factor3 =~  x6      -0.011 0.030 -0.362 0.717   -0.070    0.048
25 factor3 =~  x7       0.723 0.087  8.328 0.000    0.553    0.893
26 factor3 =~  x8       0.701 0.098  7.137 0.000    0.509    0.894
27 factor3 =~  x9       0.463 0.075  6.211 0.000    0.317    0.609

19.5.4. Orthogonal Geomin#

Consideriamo ora la rotazione Geomin. L’algoritmo Geomin fornisce un metodo di rotazione che riduce al minimo la media geometrica delle saturazioni fattoriali innalzate al quadrato. Qui è usato per ottenere una soluzione ortogonale.

out_geomin_orh <- orthRotate(unrotated, method = "geomin")
out <- summary(out_geomin_orh, sort = FALSE, suppress = 0.3)
print(out)
Standardized Rotated Factor Loadings
Warning message in testLoadings(object):
“The standard error is currently invalid because it does not account for the variance of the rotation function. It is simply based on the delta method.”
   factor1 factor2 factor3
x1  0.315          -0.621 
x2                 -0.474 
x3                 -0.671 
x4  0.838                 
x5  0.867                 
x6  0.814                 
x7          0.696         
x8          0.677         
x9          0.456  -0.468 

Factor Correlation
        factor1 factor2 factor3
factor1       1       0       0
factor2       0       1       0
factor3       0       0       1

Method of rotation:	Geomin 

Test Statistics for Standardized Rotated Factor Loadings
Warning message in testLoadings(object):
“The standard error is currently invalid because it does not account for the variance of the rotation function. It is simply based on the delta method.”
       lhs op rhs std.loading     se      z     p ci.lower ci.upper
1  factor1 =~  x1       0.315 18.335  0.017 0.986  -35.620   36.251
2  factor1 =~  x2       0.130 15.803  0.008 0.993  -30.843   31.103
3  factor1 =~  x3       0.074 20.141  0.004 0.997  -39.402   39.550
4  factor1 =~  x4       0.838  3.295  0.254 0.799   -5.620    7.295
5  factor1 =~  x5       0.867  0.785  1.105 0.269   -0.671    2.406
6  factor1 =~  x6       0.814  4.938  0.165 0.869   -8.863   10.491
7  factor1 =~  x7       0.112  8.390  0.013 0.989  -16.332   16.556
8  factor1 =~  x8       0.085  0.907  0.094 0.925   -1.692    1.862
9  factor1 =~  x9       0.172  8.417  0.020 0.984  -16.325   16.669
10 factor2 =~  x1       0.053  7.144  0.007 0.994  -13.949   14.055
11 factor2 =~  x2      -0.099  4.019 -0.025 0.980   -7.976    7.778
12 factor2 =~  x3       0.033  4.239  0.008 0.994   -8.275    8.342
13 factor2 =~  x4       0.051 11.503  0.004 0.996  -22.495   22.597
14 factor2 =~  x5       0.054 11.508  0.005 0.996  -22.501   22.609
15 factor2 =~  x6       0.035 11.432  0.003 0.998  -22.372   22.442
16 factor2 =~  x7       0.696  1.519  0.458 0.647   -2.281    3.674
17 factor2 =~  x8       0.677  2.366  0.286 0.775   -3.959    5.313
18 factor2 =~  x9       0.456  4.541  0.101 0.920   -8.444    9.356
19 factor3 =~  x1      -0.621  9.925 -0.063 0.950  -20.073   18.831
20 factor3 =~  x2      -0.474  3.464 -0.137 0.891   -7.264    6.316
21 factor3 =~  x3      -0.671  2.405 -0.279 0.780   -5.385    4.043
22 factor3 =~  x4      -0.129 25.939 -0.005 0.996  -50.969   50.711
23 factor3 =~  x5      -0.048 26.872 -0.002 0.999  -52.717   52.621
24 factor3 =~  x6      -0.176 25.131 -0.007 0.994  -49.431   49.080
25 factor3 =~  x7      -0.021  6.845 -0.003 0.998  -13.438   13.396
26 factor3 =~  x8      -0.257  5.935 -0.043 0.965  -11.890   11.376
27 factor3 =~  x9      -0.468  7.535 -0.062 0.950  -15.236   14.300
       lhs op rhs std.loading     se      z     p ci.lower ci.upper
1  factor1 =~  x1       0.315 18.335  0.017 0.986  -35.620   36.251
2  factor1 =~  x2       0.130 15.803  0.008 0.993  -30.843   31.103
3  factor1 =~  x3       0.074 20.141  0.004 0.997  -39.402   39.550
4  factor1 =~  x4       0.838  3.295  0.254 0.799   -5.620    7.295
5  factor1 =~  x5       0.867  0.785  1.105 0.269   -0.671    2.406
6  factor1 =~  x6       0.814  4.938  0.165 0.869   -8.863   10.491
7  factor1 =~  x7       0.112  8.390  0.013 0.989  -16.332   16.556
8  factor1 =~  x8       0.085  0.907  0.094 0.925   -1.692    1.862
9  factor1 =~  x9       0.172  8.417  0.020 0.984  -16.325   16.669
10 factor2 =~  x1       0.053  7.144  0.007 0.994  -13.949   14.055
11 factor2 =~  x2      -0.099  4.019 -0.025 0.980   -7.976    7.778
12 factor2 =~  x3       0.033  4.239  0.008 0.994   -8.275    8.342
13 factor2 =~  x4       0.051 11.503  0.004 0.996  -22.495   22.597
14 factor2 =~  x5       0.054 11.508  0.005 0.996  -22.501   22.609
15 factor2 =~  x6       0.035 11.432  0.003 0.998  -22.372   22.442
16 factor2 =~  x7       0.696  1.519  0.458 0.647   -2.281    3.674
17 factor2 =~  x8       0.677  2.366  0.286 0.775   -3.959    5.313
18 factor2 =~  x9       0.456  4.541  0.101 0.920   -8.444    9.356
19 factor3 =~  x1      -0.621  9.925 -0.063 0.950  -20.073   18.831
20 factor3 =~  x2      -0.474  3.464 -0.137 0.891   -7.264    6.316
21 factor3 =~  x3      -0.671  2.405 -0.279 0.780   -5.385    4.043
22 factor3 =~  x4      -0.129 25.939 -0.005 0.996  -50.969   50.711
23 factor3 =~  x5      -0.048 26.872 -0.002 0.999  -52.717   52.621
24 factor3 =~  x6      -0.176 25.131 -0.007 0.994  -49.431   49.080
25 factor3 =~  x7      -0.021  6.845 -0.003 0.998  -13.438   13.396
26 factor3 =~  x8      -0.257  5.935 -0.043 0.965  -11.890   11.376
27 factor3 =~  x9      -0.468  7.535 -0.062 0.950  -15.236   14.300

19.5.5. Oblique Geomin#

La rotazione Geomin può anche essere usata per ottenere una soluzione obliqua.

out_geomin_obl <- oblqRotate(unrotated, method = "geomin")
out <- summary(out_geomin_obl, sort = FALSE, suppress = 0.3)
print(out)
Standardized Rotated Factor Loadings
Warning message in testLoadings(object):
“The standard error is currently invalid because it does not account for the variance of the rotation function. It is simply based on the delta method.”
   factor1 factor2 factor3
x1                 -0.604*
x2                 -0.507*
x3                 -0.691*
x4  0.839*                
x5  0.887*                
x6  0.806*                
x7          0.726*        
x8          0.703*        
x9          0.463* -0.368*

Factor Correlation
           factor1    factor2    factor3
factor1  1.0000000  0.2296072 -0.3271574
factor2  0.2296072  1.0000000 -0.2776990
factor3 -0.3271574 -0.2776990  1.0000000

Method of rotation:	Geomin 

Test Statistics for Standardized Rotated Factor Loadings
Warning message in testLoadings(object):
“The standard error is currently invalid because it does not account for the variance of the rotation function. It is simply based on the delta method.”
       lhs op rhs std.loading    se       z     p ci.lower ci.upper
1  factor1 =~  x1       0.188 0.070   2.670 0.008    0.050    0.326
2  factor1 =~  x2       0.044 0.054   0.806 0.420   -0.062    0.150
3  factor1 =~  x3      -0.073 0.049  -1.467 0.142   -0.170    0.024
4  factor1 =~  x4       0.839 0.032  26.468 0.000    0.777    0.901
5  factor1 =~  x5       0.887 0.029  30.078 0.000    0.829    0.945
6  factor1 =~  x6       0.806 0.030  26.717 0.000    0.747    0.865
7  factor1 =~  x7       0.031 0.034   0.914 0.360   -0.036    0.099
8  factor1 =~  x8      -0.045 0.048  -0.948 0.343   -0.139    0.048
9  factor1 =~  x9       0.025 0.034   0.747 0.455   -0.041    0.091
10 factor2 =~  x1       0.029 0.051   0.567 0.571   -0.071    0.129
11 factor2 =~  x2      -0.119 0.072  -1.663 0.096   -0.260    0.021
12 factor2 =~  x3       0.020 0.037   0.538 0.591   -0.053    0.092
13 factor2 =~  x4       0.007 0.043   0.174 0.862   -0.076    0.091
14 factor2 =~  x5       0.010 0.036   0.285 0.775   -0.060    0.080
15 factor2 =~  x6      -0.009 0.030  -0.309 0.758   -0.068    0.049
16 factor2 =~  x7       0.726 0.072  10.079 0.000    0.585    0.867
17 factor2 =~  x8       0.703 0.118   5.965 0.000    0.472    0.934
18 factor2 =~  x9       0.463 0.080   5.816 0.000    0.307    0.619
19 factor3 =~  x1      -0.604 0.081  -7.441 0.000   -0.763   -0.445
20 factor3 =~  x2      -0.507 0.073  -6.976 0.000   -0.649   -0.364
21 factor3 =~  x3      -0.691 0.061 -11.379 0.000   -0.810   -0.572
22 factor3 =~  x4      -0.024 0.034  -0.702 0.483   -0.091    0.043
23 factor3 =~  x5       0.065 0.045   1.459 0.145   -0.022    0.153
24 factor3 =~  x6      -0.080 0.048  -1.679 0.093   -0.173    0.013
25 factor3 =~  x7       0.150 0.107   1.399 0.162   -0.060    0.361
26 factor3 =~  x8      -0.106 0.164  -0.645 0.519   -0.428    0.216
27 factor3 =~  x9      -0.368 0.133  -2.772 0.006   -0.629   -0.108
       lhs op rhs std.loading    se       z     p ci.lower ci.upper
1  factor1 =~  x1       0.188 0.070   2.670 0.008    0.050    0.326
2  factor1 =~  x2       0.044 0.054   0.806 0.420   -0.062    0.150
3  factor1 =~  x3      -0.073 0.049  -1.467 0.142   -0.170    0.024
4  factor1 =~  x4       0.839 0.032  26.468 0.000    0.777    0.901
5  factor1 =~  x5       0.887 0.029  30.078 0.000    0.829    0.945
6  factor1 =~  x6       0.806 0.030  26.717 0.000    0.747    0.865
7  factor1 =~  x7       0.031 0.034   0.914 0.360   -0.036    0.099
8  factor1 =~  x8      -0.045 0.048  -0.948 0.343   -0.139    0.048
9  factor1 =~  x9       0.025 0.034   0.747 0.455   -0.041    0.091
10 factor2 =~  x1       0.029 0.051   0.567 0.571   -0.071    0.129
11 factor2 =~  x2      -0.119 0.072  -1.663 0.096   -0.260    0.021
12 factor2 =~  x3       0.020 0.037   0.538 0.591   -0.053    0.092
13 factor2 =~  x4       0.007 0.043   0.174 0.862   -0.076    0.091
14 factor2 =~  x5       0.010 0.036   0.285 0.775   -0.060    0.080
15 factor2 =~  x6      -0.009 0.030  -0.309 0.758   -0.068    0.049
16 factor2 =~  x7       0.726 0.072  10.079 0.000    0.585    0.867
17 factor2 =~  x8       0.703 0.118   5.965 0.000    0.472    0.934
18 factor2 =~  x9       0.463 0.080   5.816 0.000    0.307    0.619
19 factor3 =~  x1      -0.604 0.081  -7.441 0.000   -0.763   -0.445
20 factor3 =~  x2      -0.507 0.073  -6.976 0.000   -0.649   -0.364
21 factor3 =~  x3      -0.691 0.061 -11.379 0.000   -0.810   -0.572
22 factor3 =~  x4      -0.024 0.034  -0.702 0.483   -0.091    0.043
23 factor3 =~  x5       0.065 0.045   1.459 0.145   -0.022    0.153
24 factor3 =~  x6      -0.080 0.048  -1.679 0.093   -0.173    0.013
25 factor3 =~  x7       0.150 0.107   1.399 0.162   -0.060    0.361
26 factor3 =~  x8      -0.106 0.164  -0.645 0.519   -0.428    0.216
27 factor3 =~  x9      -0.368 0.133  -2.772 0.006   -0.629   -0.108

19.6. Interpretazione#

Per interpretare i fattori comuni latenti, dobbiamo decidere se usare la matrice pattern o la matrice struttura. Un fattore individuato dall’analisi fattoriale è una caratteristica latente univariata che rappresenta l’essenza di un fenomeno psicologico. Dovrebbe essere interpretato come il significato semplice che si trova dietro l’intersezione dei significati delle variabili che saturano nel fattore.

Nella rotazione obliqua, i fattori sono correlati ma vogliamo comunque interpretarli come dimensioni psicologiche distinte. L’etichetta che diamo al fattore \(F_1\) dovrebbe aiutare a separare teoricamente il fenomeno psicologico corrispondente a \(F_1\) dal fenomeno denotato dall’etichetta del fattore \(F_2\), anche se sono correlati.

Se questa è la strategia interpretativa, allora lo strumento principale per l’interpretazione è la matrice pattern. I coefficienti della matrice pattern mostrano l’influenza causale del fattore comune sulle variabili manifeste. La matrice struttura descrive le correlazioni tra variabili e fattori e dipende sia dai percorsi diretti che indiretti. Quindi, non descrive gli effetti diretti dei fattori comuni latenti sulle variabili manifeste ma solo la covariazione tra di loro.