# Esempio: frequenze assolute semplici
fi <- table(burnout$StressLevel)
fi
1 2 3 4 5 6 7 8 9 10
220 199 199 200 196 197 191 208 214 176
Test per le organizzazioni - A.A. 2025/2026
Dispensa Testing psicologico by Corrado Caudek
Brown, Anna. (2023). Psychometrics in Exercises using R and RStudio. Textbook and data resource. Available from https://bookdown.org/annabrown/psychometricsR.
Altoè, G. (2022). Corso di Testing Psicologico, Scienze psicologiche dello sviluppo, della personalità e delle relazioni interpersonali, A.A. 2022/23
Marci, M. (2025). Corso di Testing Psicologico, Scienze psicologiche dello sviluppo, della personalità e delle relazioni interpersonali, A.A. 2025/26
Altri riferimenti utili sono:
Petersen, I. T. (2026). Principles of psychological assessment: With applied examples in R. Version 1.0.9. University of Iowa Libraries. https://isaactpetersen.github.io/Principles-Psychological-Assessment. https://doi.org/10.25820/work.007199
Martinková, P., & Hladká, A. (2023). Computational Aspects of Psychometric Methods: With R (1st ed.). Chapman and Hall/CRC. https://doi.org/10.1201/9781003054313
Processo di assegnazione di numeri o simboli a proprietà di oggetti, eventi o fenomeni, seguendo regole definite e condivise per rappresentarne quantitativamente le proprietà e consentirne la descrizione, il confronto e l’analisi.
Vanno distinte le quantità dalle qualità delle unità di analisi:
| Quantità | Qualità |
|---|---|
| Misurazione | Rilevazione |
| esprime una manifestazione particolare della quantità | si esprime con simboli (anche numerici), ma i numeri non esprimono misure di quantità |
| Esempio | La larghezza della cattedra è una misura della quantità “lunghezza” |
La misurazione implica una relazione tra due sistemi:
Questi due sistemi sono collegati da una regola di misurazione.
Il bastoncino \(a\) è lungo il doppio del bastoncino \(b\):
\[b = \frac{1}{2}a \quad \text{oppure} \quad a = 2b\]
Se aggiungiamo una costante \(k\) ad \(a\) e \(b\), il rapporto tra \(a\) e \(b\) non cambia. Il sistema relazionale numerico è in relazione diretta con il sistema relazionale empirico.
Le variabili psicologiche non fanno parte del sistema relazionale empirico! Come si possono quantificare? Come si possono misurare?
L’operazionalizzazione della variabile latente è cruciale.
Le variabili latenti devono essere collegate alle variabili osservate attraverso modelli matematici e statistici.
Assunzioni:
La leadership, per esempio, non si può vedere né toccare — non si può osservare direttamente → non è nel sistema relazionale empirico.
Quello che si può vedere direttamente sono i comportamenti che possono essere ricondotti alla leadership → sono nel sistema relazionale empirico e si possono misurare.
Si “traduce” la definizione teorica di una variabile/caratteristica psicologica in qualcosa di osservabile → i comportamenti (che possono anche essere le risposte a un questionario!).
Si tratta della “traduzione” in comportamenti osservabili ed oggettivi di variabili latenti psicologiche non direttamente osservabili.
La definizione teorica del costrutto è di vitale importanza per la definizione dei comportamenti osservabili ad esso legati: la misurazione del costrutto dipende proprio da questi!
Universo dei possibili comportamenti che, coerentemente con la definizione, possono rappresentare le operazionalizzazioni del costrutto.
Quando è molto ampio → facets
Definizione: L’estroversione è un tratto di personalità caratterizzato da socievolezza, assertività, livello elevato di attività, ricerca di stimoli ed esperienza di emozioni positive (Costa & McCrae, 1992).
| Facets | Aggettivi prototipici |
|---|---|
| Socievolezza | Socievole |
| Assertività | Deciso |
| Attività | Energico |
| Ricerca di stimoli | Avventuroso |
| Emozioni positive | Entusiastico |
| Espansività | Espansivo |
Definizione: La leadership è il processo attraverso cui un individuo influenza un gruppo di persone al fine di raggiungere un obiettivo comune (Northouse, 2021).
| Facets | Aggettivi prototipici |
|---|---|
| Influenza sociale | Persuasivo |
| Visione | Ispiratore |
| Decisione | Determinato |
| Gestione del gruppo | Coordinatore |
| Motivazione | Coinvolgente |
| Responsabilità | Affidabile |
Alcuni costrutti di personalità sono concettualizzati come dimensioni relativamente unitarie, senza una struttura gerarchica stabile composta da facets.
Un esempio è la Triade Oscura della personalità, composta da:
(Paulhus & Williams, 2002)
QUALITATIVE / CATEGORIALI
QUANTITATIVE / METRICHE
Le variabili si differenziano in base alla quantità di informazione che può essere ricavata:
Distingue un insieme di dati in diverse categorie. Vale solo l’equivalenza (\(=\) o \(\neq\)).
Esempi: Comune di residenza, genere, patologia clinica.
Al posto di “A”, “B”, “C” si poteva scrivere \(\alpha\), \(\beta\), \(\gamma\), 1, 2, 3 (ma i numeri valgono solo come etichette!).
Caratteristiche:
Distingue un insieme di dati in diverse categorie che sono ordinabili a seconda della quantità di caratteristica posseduta. Vale sia l’equivalenza (\(=\) o \(\neq\)) sia l’ordinamento (\(<\) o \(>\)).
Esempi: Titolo di studio, gradimento di un prodotto, valutazione di una malattia (alto, medio, basso).
Le etichette numeriche valgono per il loro ordine (non ha senso compiere operazioni tra di loro).
Lo \(0\) è arbitrario, ma c’è un’unità di misura per cui le categorie si trovano alla stessa distanza. Vale equivalenza (\(=\) o \(\neq\)), ordinamento (\(<\) o \(>\)) e differenza (\(+\) o \(-\)).
Esiste una relazione d’ordine tra le quantità e la distanza tra le quantità e nota e definita da una unità di misura costante e nota.
Esempi: Temperatura in Celsius, Q.I., scale di atteggiamento.
Se ci sono 0°C, non vuol dire che non c’è calore!
Prendiamo due temperature, \(T_a\) e \(T_b\). Queste temperature in Celsius \(C\) sono \(T_a(C) = 5\) e \(T_b(C) = 10\).
Quello che si può dire:
Infatti, volendo trasformare le due temperature in Fahrenheit tramite la relazione
\[F = \dfrac{9}{5}C + 32\] si vedrebbe che \(T_a(F) = \dfrac{9}{5}5 + 32 = 41\) e \(T_a(F) = \dfrac{9}{5}10 + 32 = 50\). Rimane la relazione d’ordine, per cui anche \(T_a(F) < T_b(F)\), ma cambia sia la differenza tra le due quantità \(T_b(F) - T_a(F) = 9\) sia la relazione tra le due, per cui si vede chiaramente che \(T_a(F) \neq T_b(F)\).
Lo \(0\) è assoluto: indica assenza del fenomeno. Vale equivalenza (\(=\) o \(\neq\)), ordinamento (\(<\) o \(>\)), differenza (\(+\) o \(-\)) e rapporto (\(\times\) o \(\div\)).
Esempi: Peso, altezza, valori diagnostici.
La presenza dello 0 assoluto permette di andare oltre la mera relazione d’ordine e distanza tra le quantità.
Si prendano ad esempio due pesi, \(P_a\) e \(P_b\). Questi pesi, misurati in chilogrammi \(K\), sono \(P_a(K)= 10\) e \(P_b(K) = 30\). Quello che si può dire:
La relazione tra \(P_a\) e \(P_b\) rimane invariante attraverso le diverse trasformazioni di scala.
Ad esempio, trasformando \(P_a(K)\) e \(P_b(K)\) in libbre (\(L\)) mediante la relazione
\[L = K \times 2.20462\] per cui \(P_a(L) = 10 \times 2.20462 = 22.0462\) e \(P_b(L) = 20 \times 2.20462 = 44.0924\). La relazione d’ordine è matenuta e, al netto dei decimali, rimane anche invariante il rapporto tra i due pesi.
Statistica descrittiva:
Statistica inferenziale:
Notazioni fondamentali:
La frequenza assoluta semplice di una categoria è il numero naturale di unità statistiche che presentano tale categoria.
\[f_i \geq 0, \quad \sum_{i=1}^{k} f_i = n\]
# Esempio: frequenze assolute semplici
fi <- table(burnout$StressLevel)
fi
1 2 3 4 5 6 7 8 9 10
220 199 199 200 196 197 191 208 214 176
La frequenza assoluta cumulata di una categoria è la somma delle frequenze assolute semplici delle categorie precedenti più la frequenza assoluta semplice della categoria data.
\[F_i = f_1 + f_2 + \ldots + f_i = \sum_{j=1}^{i} f_j\]
Fi <- cumsum(table(burnout$StressLevel))
Fi 1 2 3 4 5 6 7 8 9 10
220 419 618 818 1014 1211 1402 1610 1824 2000
Le frequenze cumulate si calcolano solo quando le categorie di una variabile presentano un ordinamento (quindi non si calcolano per variabili misurate a livello nominale).
La frequenza relativa semplice è data dal rapporto tra la frequenza assoluta semplice di tale categoria e il numero totale di unità statistiche osservate.
\[f_i\% = \frac{f_i}{n} \cdot 100 \quad (0 \leq f_i\% \leq 100, \quad \sum_{i=1}^{k} f_i\% = 100)\]
n <- nrow(burnout)
pi_rel <- table(burnout$StressLevel) / n
round(pi_rel, 3)
1 2 3 4 5 6 7 8 9 10
0.110 0.100 0.100 0.100 0.098 0.098 0.096 0.104 0.107 0.088
Una frequenza relativa semplice varia sempre tra 0 e 1.
La frequenza relativa cumulata è la somma delle frequenze relative semplici delle categorie precedenti più la frequenza relativa semplice della categoria data.
Pi <- cumsum(table(burnout$StressLevel) / n)
round(Pi, 3) 1 2 3 4 5 6 7 8 9 10
0.110 0.210 0.309 0.409 0.507 0.606 0.701 0.805 0.912 1.000
Una frequenza relativa cumulata varia sempre tra 0 e 1.
Un indice di tendenza centrale è un valore che descrive e riassume il centro di una distribuzione di dati.
| Indice | Variabile nominale | Variabile ordinale | Variabile quantitativa |
|---|---|---|---|
| Moda | SI | SI | SI |
| Mediana | NO | SI | SI |
| Media | NO | NO | SI |
La moda di una distribuzione è la categoria che si presenta con la massima frequenza:
\[Mo(X) = \max(f_i)\]
Si può calcolare per le variabili misurate a qualsiasi livello, anche se di fatto viene calcolata solo per le variabili categoriali.
La mediana è il dato che occupa la posizione centrale rispetto alla distribuzione ordinata dei dati:
La posizione della mediana è:
\[Pos_{Me} = \frac{n+1}{2}\]
Per individuarla sulla distribuzione di frequenza, si cerca la prima frequenza cumulata maggiore o uguale alla posizione cercata.
median(as.numeric(burnout$StressLevel))[1] 5
La media aritmetica è data dalla somma dei dati divisa per il numero di unità statistiche:
\[\bar{X} = \frac{\sum_{i=1}^{n} x_i}{n}\]
La media è una sorta di baricentro della distribuzione dei dati. È sensibile ai valori estremi (outlier).
mean(burnout$Age)[1] 40.6945
Il concetto di variabilità si riferisce a quanto i punteggi di una distribuzione sono sparsi, ovvero quanto siano simili o dissimili tra loro.
Gli indici di variabilità possono assumere solo valori positivi (non ha senso parlare di dispersione negativa) o nulli (quando i dati hanno tutti lo stesso valore).
Il campo di variazione è la differenza tra il valore massimo e il valore minimo osservato:
\[\text{gamma} = X_{max} - X_{min}\]
team_A <- c(38, 42, 44, 36, 39, 42, 38, 41)
max(team_A) - min(team_A)[1] 8
Dipende solo da due valori (massimo e minimo) e non considera la distribuzione dei dati intermedi.
La varianza \(\sigma^2\) è la media degli scarti al quadrato tra i dati e la media:
\[\sigma^2 = \frac{\sum_i^n (X_i - \bar{X})^2}{n}\]
La varianza assume valore minimo \(0\) quando tutti i dati sono uguali tra loro e aumenta all’aumentare della dispersione.
La funzione var() di R calcola la varianza campionaria, che divide per \(n-1\) anziché \(n\). Per dati descrittivi (popolazione osservata) si usa \(n\); per stimare la varianza della popolazione da un campione si usa \(n-1\).
La deviazione standard è la radice della varianza:
\[\sigma = \sqrt{\sigma^2}\]
Riporta l’indice di variabilità sulla scala della variabile.
Esempio: Se in un campione di dipendenti la variabile WorkHoursPerWeek ha media \(40\) ore e deviazione standard \(2.5\), i dipendenti differiscono mediamente di \(2.5\) ore dal carico di lavoro medio.
Il coefficiente di variazione è il rapporto tra la deviazione standard e il valore assoluto della media:
\[CV = \frac{\sigma}{|\bar{X}|}\]
Il CV è un indice di variabilità relativa fondamentale per eseguire confronti tra fenomeni misurati su scale diverse.
media_esp <- abs(mean(burnout$Experience))
sd_esp <- sd(burnout$Experience)
media_ore <- abs(mean(burnout$WorkHoursPerWeek))
sd_ore <- sd(burnout$WorkHoursPerWeek)
cv_esp <- sd_esp / media_esp
cv_ore <- sd_ore / media_ore
round(cv_esp, 2)[1] 0.91
round(cv_ore, 2)[1] 0.24
La differenza interquartilica è la differenza tra il terzo e il primo quartile:
\[IQR = Q_{75} - Q_{25}\]
L’IQR misura la dispersione del 50% centrale dei dati ed è un indice robusto perché i valori estremi incidono poco o per nulla.
Outlier: valori oltre \([Q_1 - 1.5 \times IQR \;;\; Q_3 + 1.5 \times IQR]\).
Q1 <- quantile(burnout$Experience, prob = 0.25)
Q3 <- quantile(burnout$Experience, prob = 0.75)
differenza_iqr <- Q3 - Q1
limite_inferiore <- Q1 - (1.5 * differenza_iqr)
limite_superiore <- Q3 + (1.5 * differenza_iqr)Il boxplot visualizza Q1, mediana, Q3 e gli outlier in un unico grafico.
Il percentile \(x_p\) di ordine \(p\) è quella categoria/valore che è:
| Tipo | Ordine |
|---|---|
| Quartili | percentili di ordine 25 - 50 - 75 |
| Decili | percentili di ordine 10 - 20 - … - 90 |
| Percentili | percentili di ordine 1 - 2 - … - 98 - 99 |
quantile(burnout$SatisfactionLevel, probs = c(0.05, 0.25, 0.50, 0.75, 0.95)) 5% 25% 50% 75% 95%
1.2100 2.0000 3.0250 4.0000 4.7905
Il rango percentile (\(Rp\)) indica la percentuale di casi che hanno un valore uguale o inferiore a un particolare punteggio \(X_i\):
\[Rp = \frac{B}{N} \times 100\]
dove \(B\) è il numero di casi \(\leq X_i\) e \(N\) è il numero totale di casi.
Gli indici di forma descrivono come è distribuita una variabile, oltre alla sua posizione centrale e dispersione. Due distribuzioni possono avere stessa media e deviazione standard ma forma diversa.
L’asimmetria misura quanto una distribuzione si discosta dalla simmetria rispetto al centro.
| Tipo | Valore indice | Caratteristiche |
|---|---|---|
| Simmetrica | \(\approx 0\) | Media = Mediana = Moda |
| Asimmetria positiva | \(> 0\) | Moda < Mediana < Media |
| Asimmetria negativa | \(< 0\) | Media < Mediana < Moda |
library(psych)
skew(burnout$WorkHoursPerWeek)[1] 0.05606748
Interpretazione: valore vicino a 0 indica distribuzione approssimativamente simmetrica.
La curtosi misura quanto i dati si concentrano nelle code della distribuzione. Molti software riportano l’eccesso di curtosi rispetto alla distribuzione normale (il cui valore di curtosi è 3):
| Tipo | Valore indice | Forma |
|---|---|---|
| Mesocurtica | \(\approx 0\) | Forma normale |
| Leptocurtica | \(>0\) | Code pesanti |
| Platicurtica | \(<0\) | Code leggere |
kurtosi(burnout$WorkHoursPerWeek)[1] -1.186166
Si presuppone che la caratteristica misurata abbia una distribuzione nota nella popolazione. Di solito si assume una distribuzione normale: la maggior parte degli individui ha quantità intermedie della caratteristica, quindi pochi individui si collocano agli estremi.
La distribuzione normale è definita da due parametri:
Scale comuni: percentili, punti Z, punteggi T…
Il campione normativo è il gruppo di soggetti le cui risposte al test costituiscono il termine di riferimento per valutare qualsiasi soggetto sottoposto successivamente al test.
Un buon manuale deve descrivere le caratteristiche del campione normativo.
La trasformazione lineare che riscala \(X\) verso una distribuzione target:
\[Y = (X - \bar{X})\frac{s_Y}{s_X} + \bar{Y}\]
dove \(\bar{Y}\) e \(s_Y\) sono la media e deviazione standard target:
| Scala | \(\bar{Y}\) | \(s_Y\) |
|---|---|---|
| Punteggi T | 50 | 10 |
| QI | 100 | 15 |
| Punteggi Z | 0 | 1 |
Se la distribuzione target ha \(\bar{Y} = 0\) e \(s_Y = 1\):
\[Z = \frac{X - \bar{X}}{s_X}\]
Dove:
Esprime la distanza di \(X\) dalla media in unità di deviazioni standard.
I punteggi standardizzati permettono di confrontare misure su scale diverse, portandole tutte sulla stessa unità di misura.
Un esempio classico è il lancio di una moneta equa: la probabilità di ottenere testa è \(\frac{1}{2}\). In una singola serie di lanci potremmo ottenere più o meno del 50% di teste, ma all’aumentare del numero di lanci la frequenza relativa si avvicina sempre di più a \(\frac{1}{2}\).
Dato un fenomeno casuale, l’insieme di tutti i possibili esiti è detto spazio campionario \(S\). Gli elementi di \(S\) devono essere:
Quando entrambe le condizioni valgono, diciamo che gli eventi costituiscono una partizione dello spazio campionario.
Un evento \(E\) è semplicemente un sottoinsieme di \(S\).
Esempio 1: Moneta
Esempio 2: Dado
La probabilità \(P(\cdot)\) è una funzione che assegna un valore numerico a ogni evento:
Esempio: dado
Poiché le sei facce sono equiprobabili: \(P(1) = P(2) = \cdots = P(6) = a\). Per l’assioma 2: \(6a = 1 \Rightarrow a = \frac{1}{6}\).
La probabilità di ottenere un numero pari è:
\[P(E) = P(2) + P(4) + P(6) = \frac{1}{6} + \frac{1}{6} + \frac{1}{6} = \frac{1}{2}\]
| Discreto | Continuo | |
|---|---|---|
| Definizione | Esiti numerabili in categorie | Esiti su un continuum di valori |
| Esempio | Numero di errori: \(S = \{0, 1, 2, \ldots\}\) | Tempo di risposta: \(S = \{\theta > 0\}\) |
| Probabilità | \(P(X = x) = f(x)\) | \(P(a \leq X \leq b) = \int_a^b f(x)\,dx\) |
Nel caso continuo, la probabilità di un singolo valore esatto è sempre zero: ha senso solo chiedersi la probabilità di un intervallo. Questa probabilità si calcola come area sotto una curva.
Una variabile aleatoria è una funzione \(X : S \to \mathbb{R}\) che assegna un valore reale a ogni esito dello spazio campionario.
Esempio: nel lancio di una moneta, \(X(\text{croce}) = 0\) e \(X(\text{testa}) = 1\).
Una distribuzione di probabilità descrive quali valori può assumere \(X\) e con che probabilità.
Il valore atteso è la media ponderata di tutti i valori possibili, con pesi dati dalle probabilità — ovvero il valore “tipico” nel lungo periodo:
\[E(X) = \sum_{x \in X(S)} x \times P(X = x)\]
Per un dado equo: \(E(X) = \frac{1}{6}(1+2+3+4+5+6) = 3.5\).
La varianza misura quanto i valori si disperdono attorno alla media:
\[\text{Var}(X) = E\!\left[(X - E(X))^2\right]\]
Nella distribuzione normale, valore atteso e varianza corrispondono esattamente a \(\mu\) e \(\sigma^2\).
| Distribuzione | Supporto | \(E[Y]\) | \(\text{Var}(Y)\) |
|---|---|---|---|
| Normale \((\mu, \sigma^2)\) | \(x \in \mathbb{R}\) | \(\mu\) | \(\sigma^2\) |
| Gamma \((\alpha, \lambda)\) | \(x \in (0,\infty)\) | \(\alpha/\lambda\) | \(\alpha/\lambda^2\) |
| Binomiale \((n, p)\) | \(x \in \{0,1,\dots,n\}\) | \(np\) | \(np(1-p)\) |
| Poisson \((\lambda)\) | \(x \in \{0,1,2,\dots\}\) | \(\lambda\) | \(\lambda\) |
La distribuzione normale standard è una distribuzione di probabilità continua con spazio campionario \(S = (-\infty, +\infty)\), media \(\mu = 0\) e deviazione standard \(\sigma = 1\).
Esempio: l’area tra \(z = -1\) e \(z = +1\) è circa \(0.68\): il 68% dei soggetti cade in questo intervallo.
Se un punteggio PSWQ ha \(z \geq 2\) e ci chiediamo quanto sia raro ottenere un punteggio del genere: dobbiamo calcolare l’area sotto la curva a destra di \(z = 2\). Quella area è la probabilità: \(P(Z \geq 2) \approx 0.023\).
Solo il 2.3% della popolazione rientra in quella zona critica.
In R sono disponibili quattro funzioni per ogni distribuzione di probabilità:
d*: calcola la massa di probabilità (discrete) o la densità (continue)p*: calcola la probabilità cumulata \(P(X \leq q)\) dato un quantileq*: calcola il quantile dato un livello di probabilità cumulatar*: genera un campione casuale dalla distribuzionedove * è il nome della distribuzione in R (es. norm, binom, t, …).
| Distribuzione | Tipo | Nome R |
|---|---|---|
| Binomiale | discreta | binom |
| Poisson | discreta | pois |
| Uniforme | continua | unif |
| Normale | continua | norm |
| t di Student | continua | t |
| Funzione | Cosa calcola |
|---|---|
dnorm(x, mean, sd) |
Densità in \(x\) (altezza della curva, non una probabilità) |
pnorm(q, mean, sd) |
\(P(X \leq q)\) — area a sinistra di \(q\) |
qnorm(p, mean, sd) |
Il valore \(x\) tale che \(P(X \leq x) = p\) |
rnorm(n, mean, sd) |
Genera \(n\) valori casuali dalla Normale |
dnorm()
dnorm() restituisce la densità in un punto, cioè l’altezza della curva. Per le distribuzioni continue, la densità non è una probabilità: la probabilità di un singolo valore esatto è sempre zero.
Per le distribuzioni discrete (es. Binomiale), dbinom() restituisce invece una vera probabilità: \(P(X = x)\).
# Probabilità di punteggio >= 60, con mu=40, sd=10
pnorm(60, mean = 40, sd = 10, lower.tail = FALSE)[1] 0.02275013
# Probabilità di punteggio compreso tra 30 e 50
pnorm(50, mean = 40, sd = 10) - pnorm(30, mean = 40, sd = 10)[1] 0.6826895
# Quale punteggio corrisponde al 95° percentile?
qnorm(0.95, mean = 40, sd = 10)[1] 56.44854
A psychological test is any procedure on the basis of which inferences are made concerning a person’s capacity, propensity or liability to act, react, experience, or to structure or order thoughts or behaviours in particular ways.
A psychological test is a set of standard items or stimuli, the responses to which form the basis for an inference which goes beyond item content and for which psychologists accept ethical responsibility in professional use.
I test misurano alcuni aspetti del comportamento attraverso metodi di somministrazione, di scoring e di interpretazione altamente standardizzati e controllati. I comportamenti vengono registrati e interpretati secondo le procedure specifiche di ogni test \(\rightarrow\) vengono espressi sinteticamente in un indice numerico.
Possono misurare diversi aspetti della persona:
Queste caratteristiche possono essere distinte in:
La somministrazione di stimoli/domande standard predefiniti riduce gli effetti di distorsione dovuti ad elementi estranei.
L’analisi delle risposte è un processo aperto e standardizzato \(\rightarrow\) replicabile da chiunque.
I test sono (devono essere):
I test servono a ottenere dai soggetti delle prestazioni nella situazione contingente (attenzione!). A partire da quelle prestazioni si dovrebbe poter arrivare a una generalizzazione al comportamento fuori dalla situazione sperimentale, permettendo quindi previsioni relative alla vita quotidiana.
In particolare, servono a:
Test di intelligenza, test di profitto. Possono aiutare a migliorare la progettazione didattica o a individuare studenti con particolari difficoltà (o con particolari talenti → plusdotazione).
Fini diagnostici e di cura. Non solo intelligenza, ma anche aspetti legati alla personalità, all’emotività.
Screening del personale attraverso (spesso) test di intelligenza e test specifici per l’azienda.
Somministrazione “pilota” a un campione di soggetti (\(n \approx 100\)).
Analisi preliminari delle statistiche descrittive degli item e del punteggio totale al test, ad esempio:
Esplorazione della dimensionalità del test e della coerenza interna degli item.
Somministrazione della versione rifinita al passo precedente a un campione più ampio (\(n \approx 200\)).
Analisi esplorativa della struttura fattoriale della scala (Quante dimensioni latenti ci sono?) → Exploratory Factor Analysis. La dimensionalità del tratto latente è ricavata dalla variabilità nei dati.
Quante dimensioni latenti sono necessarie per spiegare la variabilità osservata nei dati?
Viene studiata la dimensionalità della struttura trovata allo step precedente per capire quanto questa sia replicabile e viene investigata la validità esterna della misura.
Somministrazione della versione definitiva a un altro campione (\(n \approx 200\)).
Analisi confermativa della struttura fattoriale → Confirmatory Factor Analysis. La dimensionalità del tratto latente è stabilita a priori, così come le relazioni tra item e tratto latente.
Il modello fattoriale è adatto a spiegare la variabilità tra i dati?
Il campione deve essere rappresentativo della popolazione target e deve essere estremamente ampio (nell’ordine delle migliaia).
Standardizzazione dei punteggi:
Produzione delle tavole di conversione grezzi–standardizzati.
Misura quanto una persona sa fare nelle migliori condizioni possibili o quanto una persona conosca di un determinato ambito.
Questo presuppone che le domande abbiano una risposta corretta.
Riguardano risorse cognitive, abilità, intelligenza.
Alcune caratteristiche:
In caso di test a risposta chiusa, l’item è composto da:
Possono essere utilizzati per la selezione del personale:
La validità concerne principalmente il tipo di scenario più che la metodologia in sé.
Lo sviluppo richiede l’analisi e conoscenza approfondita delle dinamiche aziendali e dei vari problemi emersi, da cui sviluppare gli scenari ipotetici con le possibili strategie risolutive.
Misura come una persona pensa/sente/si comporta in situazioni tipiche.
Esistono solo risposte personali che non sono né corrette né errate.
Riguardano tratti di personalità, atteggiamenti, motivazioni, sistemi di valori (ecc.).
Alcune caratteristiche:
Test di personalità, questionari per la valutazione degli atteggiamenti, opinioni ecc.
| Caratteristica | Prestazione massima | Prestazione tipica |
|---|---|---|
| Cosa misura | Abilità | Tratti e comportamenti |
| Risposte corrette | Sì | No |
| Sforzo richiesto | Alto e intenzionale | Riflessivo/auto-descrittivo |
| Esempi | Test cognitivi | Questionari di personalità |
| Uso in azienda | Selezione capacità | Fit organizzativo |
Sono item formulati in modo che l’unica possibile risposta possa essere Sì/No o Vero/Falso.
Mi commuovo quando vedo un film drammatico.
- Sì
- No
Sono estremamente facili da comprendere per chiunque.
La scala di risposta potrebbe essere troppo riduttiva e particolarmente complessa per certe tipologie di persone.
Usati sia per prestazione tipica sia massima.
Preferisco un lavoro nel quale:
- Posso crescere come persona
- Posso guadagnare bene
- Posso imparare cose nuove
Le opzioni di risposta sono realmente ordinabili? Sono anche solo comparabili?
Una persona con un alto livello di narcisismo ha più probabilità di scegliere la seconda opzione.
In prestazione massima sono i tipici item a risposta multipla.
L’evoluzione delle scale con item Sì/No o Vero/Falso \(\rightarrow\) aggiunta di livelli intermedi.
Summating rating scales: Scale composte da diverse domande (item) il cui punteggio totale è ottenuto attraverso la somma dei punteggi alle valutazioni fornite ad ogni item.
Il costrutto latente si muove lungo un continuum sottostante alle opzioni di risposta, ovvero è possibile dare una quantità alla variabile psicologica misurata a seconda dell’opzione di risposta scelta.
Esempio: Esprimere il proprio livello di accordo con l’affermazione “Sono una persona organizzata”:
\[\text{Per niente d'accordo} \quad \square \quad \square \quad \square \quad \square \quad \square \quad \text{Completamente d'accordo}\]
L’assunzione è che il livello di accordo con l’affermazione vari lungo un continuum delimitato dagli ancoraggi “Per niente d’accordo” e “Completamente d’accordo”.
Molto utilizzate anche in psicologia dello sviluppo. Prevedono una linea continua su cui la persona indica la propria risposta segnando un punto.
Indicare il grado di accordo con un’affermazione.
Esempio: Sono una persona organizzata
\[\text{Per niente d'accordo} \qquad — \qquad \text{Completamente d'accordo}\]
Dare una valutazione vera e propria rispetto a un argomento in termini di buono/cattivo, insufficiente/sufficiente, importante/non importante, ecc.
Esempio: Indicare il proprio livello di competenze informatiche
5 = alto; 4 = medio-alto; 3 = medio; 2 = medio-basso; 1 = basso
Indicare la frequenza con cui vengono messi in atto i comportamenti o vengono sperimentati i vissuti descritti dall’item.
Esempio: Nell’ultimo anno, mi sono sentito ansioso:
Mai — Raramente — Qualche volta — Spesso — Sempre
Attenzione! Cosa vuol dire “Spesso”? E “Qualche volta”? Vogliono dire la stessa cosa per tutti?
Come regola generale, più è alto il numero di punti della scala, maggiore è poi l’attendibilità della misura.
Solitamente si considerano scale con un numero di punti tra 4 e 7. Più di 7 punti sono “inutili”.
Numero dispari o numero pari di punti?
Un numero dispari di punti permette l’alternativa neutra:
Essere sistematicamente d’accordo con le affermazioni proposte dagli item.
Scegliere sempre le risposte estreme.
Scegliere sempre i punti centrali della scala o le risposte “Non so”.
Rispondere in modo da mostrarsi delle belle persone sempre e comunque.
Grado in cui una procedura di misurazione produce lo stesso risultato in prove ripetute.
\[X = V + E\]
dove:
L’attendibilità di una misura è la proporzione di \(X\) che non riflette l’errore di misurazione:
\[\rho = \dfrac{V}{V + E}\]
Quando l’errore va sempre dalla stessa parte, è sistematico (bias).
Quello che si sta misurando… è proprio quello che si voleva misurare e non altro!
Elementi utili per la validità di costrutto:
Convergente: La misura di interesse correla con misure che misurano lo stesso costrutto o costrutti simili.
Esempio: La leadership misurata con un nuovo questionario correla fortemente con la leadership misurata con il gold standard.
Divergente/Discriminante: La misura di interesse NON correla con misure che misurano costrutti diversi.
Esempio: La nuova misura della leadership non correla con una misura per la mindfulness.
Quello che stiamo inferendo a partire dalle analisi ha senso perché le analisi hanno senso!
Elementi utili per la validità statistica:
I risultati osservati in uno studio riflettono realmente l’effetto della variabile indipendente sulla variabile dipendente, senza essere distorti da fattori confondenti.
Elementi utili per la validità interna:
Il grado in cui i risultati sono rappresentativi della popolazione di interesse e il grado in cui sono replicabili.
Elementi utili per la validità esterna:
Esempio: Il nuovo questionario per la leadership è stato somministrato a un campione di studenti e studentesse universitari. I risultati sono generalizzabili alla popolazione degli studenti iscritti al corso di studio, NON per la popolazione dei manager aziendali.
Rappresenta la generalizzabilità dei risultati di una ricerca a quella che è la vita quotidiana.
I dati raccolti devono essere rappresentativi del comportamento dell’individuo nella sua realtà abituale.
Il problema degli esperimenti di laboratorio, dei questionari, degli scenari: non sono la vita reale. Il laboratorio fornisce la possibilità di avere un alto controllo rispetto alle manipolazioni sperimentali e alle variabili confondenti. Tuttavia è un ambiente molto lontano dall’ambiente in cui le persone agiscono normalmente.
Il Big Five Inventory (BFI) misura cinque dimensioni della personalità:
| Dimensione | Item |
|---|---|
| Estroversione (8 item) | item01, item06, item11, item16, item21, item26, item31, item36 |
| Gradevolezza (9 item) | item02, item07, item12, item17, item22, item27, item32, item37, item42 |
| Coscienziosità (9 item) | item03, item08, item13, item18, item23, item28, item33, item38, item43 |
| Nevroticismo (8 item) | item04, item09, item14, item19, item24, item29, item34, item39 |
| Apertura all’esperienza (10 item) | item05, item10, item15, item20, item25, item30, item35, item40, item41, item44 |
Gli item in grassetto sono gli item reverse.
Sono item il cui contenuto è formulato nella direzione del costrutto.
A punteggi alti nell’item sono verosimilmente associati livelli alti del costrutto.
Sono item il cui contenuto è formulato nella direzione opposta al costrutto.
A punteggi bassi nell’item sono verosimilmente associati livelli alti del costrutto.
Esempio (Estroversione):
L’item 21 è un item reverse!
Nell’item reverse viene utilizzato un termine che è concettualmente contrario al termine usato nell’item straight.
Nell’item reverse viene aggiunta la negazione sul termine usato nell’item straight.
Nell’item reverse viene aggiunta la negazione al termine che è concettualmente contrario al termine usato nell’item straight.
La doppia negazione implica che l’item reverse stia affermando la stessa identica cosa dell’item straight.
Esempio: Io mi vedo come una persona che… LAVORA IN MODO ACCURATO
Scala a 5 punti:
| 1 | 2 | 3 | 4 | 5 | |
|---|---|---|---|---|---|
| Straight | 1 | 2 | 3 | 4 | 5 |
| Reverse | 5 | 4 | 3 | 2 | 1 |
Scala a 7 punti:
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | |
|---|---|---|---|---|---|---|---|
| Straight | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| Reverse | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
La difficoltà è semplicemente la proporzione di risposte corrette a un item:
\[p_i = \frac{1}{N} \sum_{n=1}^{N} Y_{ni}\]
dove \(N\) è il totale dei rispondenti e \(Y_{ni} \in \{0,1\}\).
Più correttamente, \(p_i\) rappresenta la facilità dell’item, per cui la difficoltà è stimata come \(1 - p_i\).
La difficoltà corrisponde al punteggio medio osservato su ogni item:
\[p_i = \frac{1}{N} \sum_{n=1}^{N} Y_{ni}\]
dove \(Y_{ni} \in \{1, 2, \ldots, K\}\) e \(K\) sono le categorie di risposta dell’item. La difficoltà è quindi la tendenza media dell’item.
La difficoltà degli item dipende dal campione di rispondenti considerato, ovvero dal livello latente di abilità delle persone sotto osservazione. Questo vuol dire che non è una qualità assoluta degli item.
La deviazione standard per ogni item è:
\[s_i = \sqrt{p_i(1-p_i)}\]
Per cui la variabilità è massima quando \(p_i = .50\).
Il punteggio medio per ogni item \(p_i\) è una buona stima della difficoltà. Per rendere però i punteggi comparabili, si “corregge” il punteggio dell’item considerando il valore massimo e minimo ottenibile teoricamente:
\[\pi_i = \dfrac{p_i - \min(Y_i)}{\max(Y_i) - \min(Y_i)}\]
È possibile anche dicotomizzare:
\[\pi_i = \dfrac{1}{n} \sum_{n = 1}^{N}Y_{pi} = \max(Y_i)\]
La difficoltà è la proporzione di persone che hanno scelto il punteggio massimo.
\(k_i\) è un valore di cut-off deciso arbitrariamente (può essere la media, la mediana, un punto a caso):
\[\pi_i = \dfrac{1}{n}\sum_{n = 1}^{N} Y_{pi} = Y_{pi} \geq k_i\]
Con discriminatività di un item si intende la sua capacità di distinguere tra rispondenti con livelli alti e bassi di tratto latente.
La misura “prediletta” è la correlazione item-totale (meglio item totale corretta).
Assume che il tratto misurato sia unidimensionale.
Come la difficoltà, dipende dal campione. Maggiore è l’eterogeneità dei livelli di abilità delle persone, maggiore è la capacità discriminativa degli item.
Se si considera la correlazione tra ogni singolo item e il punteggio totale, calcolato come somma dei punteggi a ogni item, sarà sempre positiva.
Per questo si utilizza la correlazione “corretta”, ovvero senza l’item incluso nel totale \(T_{n(-i)} = \sum_{j \ne i} Y_{nj}\):
\[r_{i,\mathrm{tot}(-i)} = \frac{\sum_{n=1}^{N} (Y_{ni} - \bar{Y}_i)(T_{n(-i)} - \overline{T_{(-i)}})}{\sqrt{\sum_{n=1}^{N} (Y_{ni} - \bar{Y}_i)^2} \sqrt{\sum_{n=1}^{N} (T_{n(-i)} - \overline{T_{(-i)}})^2}}\]
Per item dicotomici si applica la correlazione punto-biseriale:
\[r_{pb,i}^{*} = \frac{\bar{T}_{1(-i)} - \bar{T}_{0(-i)}}{s_{T(-i)}} \sqrt{p_i q_i}\]
dove di nuovo il totale è calcolato escludendo un item alla volta.
La risposta corretta è sempre il focus dell’analisi, ma la difficoltà e discriminatività di ogni item dipendono anche da come sono strutturati i distrattori.
I distrattori non devono mai essere più probabili della risposta corretta, né deve esserci un distrattore più scelto degli altri o meno scelto degli altri.
Ci si aspetta che i distrattori vengano scelti in maniera uniforme, ovvero abbastanza a caso.
Questa analisi si può fare sia considerando il campione nella sua totalità sia considerando diversi gruppi di rispondenti, suddivisi a seconda del punteggio totale osservato.
L’analisi dei missing permette di indagare più a fondo la validità degli item e del test. Questa analisi permette di capire se la lunghezza del questionario è adeguata (solo se la somministrazione degli item non è randomizzata) o se gli item hanno delle formulazioni che non permettono di dare una risposta.
Se un item ha circa più del 5% di risposte missing dovrebbe essere ricontrollato ed eventualmente eliminato.
Tra gli scopi di una validazione di test, si vuole trovare il numero delle dimensioni non osservate (i fattori latenti) che permettono di raggruppare tra di loro gli item in base alle loro similarità.
Triste, Artistic3, Curios3, Inventiv3, Loquace, Stressat3, Ansios3, Socievole, Energic3
Come potrebbero raggrupparsi? Cosa potrebbero indicare?
L’assunzione sottostante è che item con contenuto simile tendono a ricevere risposte simili.
La correlazione è una misura della similarità tra gli item: più gli item hanno un contenuto simile, più le correlazioni tra i loro punteggi dovrebbero essere simili.
\[r_{ij} = r_{Y_i Y_j} = \frac{\operatorname{Cov}(Y_i, Y_j)}{\sigma_{Y_i}\,\sigma_{Y_j}} = \frac{\sum_{m=1}^{N} (y_{mi} - \bar{y}_i)(y_{mj} - \bar{y}_j)}{\sqrt{\sum_{m=1}^{N} (y_{mi} - \bar{y}_i)^2} \,\sqrt{\sum_{m=1}^{N} (y_{mj} - \bar{y}_j)^2}}\]
dove \(r_{ij}\) è la correlazione per ogni coppia di item \((i,j)\) e \(m\) è l’indice del soggetto.
La correlazione di Pearson va bene quando si hanno item con distribuzioni quasi normali. Peccato che gli item siano quasi sempre misurati su scala Likert!
Considerando \(k\) come numero di categorie di risposta:
Skewness e Kurtosis sono indici fondamentali per fare inferenze circa la normalità delle distribuzioni:
Per variabili dicotomiche (e.g., vero vs. falso), non ha senso calcolare la correlazione di Pearson.
Le risposte agli item \(Y_i\) sono la realizzazione di una variabile latente \(Y_i^*\):
\[Y_i = \begin{cases} 1 & \text{se } Y_i^* \geq \tau_i \\ 0 & \text{se } Y_i^* < \tau_i \end{cases}\]
dove \(\tau_i\) è una soglia fissa (incognita) da cui dipende la risposta positiva.
\[r_{\text{tet}_{Y_i Y_j}} = r_{Y_i^* Y_j^*}\]
Punto di partenza: la tabella di contingenza \(2 \times 2\):
| \(Y_j = 0\) | \(Y_j = 1\) | Totale | |
|---|---|---|---|
| \(Y_i = 0\) | \(n_{00}\) | \(n_{01}\) | \(n_{0\bullet}\) |
| \(Y_i = 1\) | \(n_{10}\) | \(n_{11}\) | \(n_{1\bullet}\) |
| Totale | \(n_{\bullet0}\) | \(n_{\bullet1}\) | \(n\) |
La correlazione tetracorica è calcolata a partire dai valori marginali della tabella:
\[r_{\text{tet}_{Y_i, Y_j}} \approx \cos \left(\dfrac{\pi}{1+ \sqrt{\dfrac{\hat{\pi}_{00}\hat{\pi}_{11}}{\hat{\pi}_{10}\hat{\pi}_{01}}}}\right)\]
Call: tetrachoric(x = table(lsats6$Q3, lsats6$Q4))
tetrachoric correlation
[1] 0.19
with tau of
0 0
-0.13 -0.72
Le soglie \(\tau\) esprimono il livello di costrutto che bisogna possedere (sul tratto latente non osservato) per dare una risposta corretta
In questo caso, la correlazione è positiva, non molto forte. Per osservare una risposta corretta al primo item bisogna avere un livello latente di almeno \(-0.13\), per il secondo item \(-0.72\). Entrambi gli item sono poco sotto la media \(0\), per cui si potrebbe pensare che sono item a cui è abbastanza semplice rispondere.
È la metodologia più appropriata per calcolare le correlazioni tra item misurati su scala Likert con \(k\) categorie.
Come per la tetracorica, le risposte agli item \(Y_i\) sono la realizzazione di una variabile latente \(Y_i^*\):
\[Y_i = \begin{cases} 0 & \text{se } Y_i^* < \tau_{i,0} \\ k & \text{se } \tau_{i, k-1} \leq Y_i^* \leq \tau_{i, k} \end{cases}\]
con \(k = 1, \ldots, K_i\).
La correlazione tra i punteggi degli item è stimata sulla variabile latente continua sottostante. Le soglie associate ad ogni categoria per ogni item vengono stimate insieme alla correlazione.
Quanti e quali dimensioni latenti si devono utilizzare per spiegare le covariazioni tra le variabili osservate?
Sono i dati che guidano la scelta delle dimensioni latenti
Esiste un modello teorico rispetto a quanti fattori latenti sono coinvolti, sulla loro relazione tra loro e con le variabili osservate
Viene testato un modello teorico per vedere se si conforma ed è in grado di spiegare le variazioni nei dati
Le saturazioni (factor loadings) esprimono la correlazione tra l’item e il fattore latente (elevate al quadrato: varianza spiegata dal fattore per i punteggi osservati negli item)
# se non avete il pacchetto -> install.packages("nomepacchetto")
# e poi...
library(psych)
library(corrplot)
library(ggplot2)
library(patchwork)
library(tidyverse)
library(lavaan)
# impostazione grafica
set_theme(theme_bw(base_size = 14))| Simbolo | Significato |
|---|---|
| \(n\) | Numero di soggetti |
| \(s\) | Indice del soggetto (\(s = 1, \ldots, n\)) |
| \(p\) | Numero di item (variabili osservate) |
| \(i\) | Indice dell’item generico (\(i = 1, \ldots, p\)) |
| \(k\) | Secondo indice di item, usato nelle formule di covarianza tra coppie (\(k \neq i\)) |
| \(Y_{si}\) | Risposta del soggetto \(s\) all’item \(i\) |
| \(m\) | Numero di fattori comuni (\(m \ll p\)) |
| \(j\) | Indice del fattore (\(j = 1, \ldots, m\)) |
| \(\mu_i\) | Intercetta (media) dell’item \(i\) |
| \(\theta_{sj}\) | Punteggio latente del soggetto \(s\) sul fattore \(j\) |
| \(\lambda_{ij}\) | Saturazione fattoriale dell’item \(i\) sul fattore \(j\) |
| \(\varepsilon_{si}\) | Errore specifico del soggetto \(s\) sull’item \(i\) |
| \(\psi_i\) | Varianza dell’errore specifico dell’item \(i\) (unicità) |
| \(h_i^2\) | Comunalità dell’item \(i\) |
| \(\mathbf{R}\) | Matrice di correlazione osservata (\(p \times p\)) |
| \(\hat{\mathbf{R}}\) | Matrice di correlazione riprodotta dal modello |
| \(\boldsymbol{\Lambda}\) | Matrice dei loading (\(p \times m\)) |
| \(\boldsymbol{\Phi}\) | Matrice di correlazione tra i fattori (\(m \times m\); \(= \mathbf{I}\) se ortogonali) |
| \(\boldsymbol{\Psi}\) | Matrice diagonale delle unicità (\(p \times p\)) |
La matrice di correlazione policorica dei 25 item mostra una struttura a blocchi: gli item della stessa scala correlano molto tra loro, mentre le correlazioni tra scale diverse sono più basse.
La domanda centrale è: perché questi blocchi emergono?
L’analisi fattoriale esplorativa parte da una matrice di correlazioni \(p \times p\) tra \(p\) variabili osservate e cerca una matrice \(p \times m\) di saturazioni fattoriali (\(\lambda\)) che spieghi le correlazioni tramite \(m \ll p\) fattori comuni latenti.
Gli item non correlano direttamente tra loro, ma perché sono tutti influenzati da una stessa variabile latente (il fattore \(\theta\)).
Per \(i = 1, \ldots, p\) item e \(s = 1, \ldots, n\) soggetti, il modello monofattoriale è:
\[ Y_{si} = \mu_i + \lambda_i \,\theta_s + \varepsilon_{si} \]
dove:
| Assunzione | Notazione |
|---|---|
| (Convenzione) Item centrati e standardizzati | \(\mathbb{E}(Y_i) = 0\) |
| Il fattore comune è standardizzato | \(\mathbb{E}(\theta) = 0\), \(\mathbb{V}(\theta) = 1\) |
| Gli errori hanno media nulla e varianza \(\psi_i\) | \(\mathbb{E}(\varepsilon_i) = 0\), \(\mathbb{V}(\varepsilon_i) = \psi_i\) |
| Errori tra loro incorrelati | \(\mathrm{Cov}(\varepsilon_i, \varepsilon_k) = 0\) per \(i \neq k\) |
| Errori incorrelati con il fattore | \(\mathrm{Cov}(\varepsilon_i, \theta) = 0\) |
Date queste ipotesi, l’interdipendenza (cioè le correlazioni) fra le variabili osservate è interamente spiegata dal singolo fattore (indipendenza locale/indipendenza condizionale): una volta noto il valore del fattore \(\theta\), le risposte agli item non si influenzano a vicenda, \[P(Y_i, Y_k \mid \theta) = P(Y_i \mid \theta) \cdot P(Y_k \mid \theta).\]
La correlazione tra due item è spuria: nasce perché entrambi dipendono da \(\theta\).
La relazione tra consumo di gelati e violenza, ad esempio, è dovuta alla causa comune “temperatura”, non a un legame diretto.
Sotto le assunzioni del modello, la varianza di \(Y_i\) si scompone in due parti:
\[ \underbrace{\mathbb{V}(Y_i)}_{= 1 \text{ se std.}} = \underbrace{h_i^2}_{\text{comunalità}} + \underbrace{\psi_i}_{\text{unicità}} \]
Unicità. Varianza non spiegata dai fattori comuni: \(\psi_i = 1 - h_i^2\)
Comunalità. Varianza spiegata dai fattori comuni: \(h_i^2 = \lambda_i^2\)
con \({\lambda}_i = ({\lambda}_{i1},{\lambda}_{i2}, \dots, {\lambda}_{im})\) e \(\mathbf{\Phi}\) (matrice di correlazione \(m \times m\))
Spearman osservò che le prestazioni scolastiche (Classics, English, Math, …) correlano tutte tra loro, quindi ipotizzò l’estistenza di un fattore generale \(g\) (intelligenza) latente…
\[ \begin{array}{ccccc} \hline & y_c & y_e & y_m & y_p \\ \hline y_c & 1.00 & 0.78 & 0.70 & 0.66 \\ y_e & & 1.00 & 0.64 & 0.54 \\ y_m & & & 1.00 & 0.45 \\ y_p & & & & 1.00 \\ \hline \end{array} \]
Se esiste un fattore comune \(\theta\), allora \(y_i\) e \(y_k\), una volta controllato \(\theta\), devono risultare condizionalmente indipendenti. La correlazione parziale vale zero quando:
\[ r_{ik} = r_{i\theta} \cdot r_{k\theta} = \lambda_i \cdot \lambda_k \]
Questa condizione implica che ogni correlazione osservata è scomponibile come prodotto di due saturazioni.
set.seed(123)
n <- 1000
f <- rnorm(n, 24, 12) # fattore latente
y1 <- 10 + 7 * f + rnorm(n, 0, 50) # osservate funzione della latente
y2 <- 3 + 2 * f + rnorm(n, 0, 50)
Y <- cbind(y1, y2, f) #variabili osservate e latente
round(cor(Y), 3) # correlazioni semplici y1 y2 f
y1 1.000 0.380 0.867
y2 0.380 1.000 0.423
f 0.867 0.423 1.000
fm1 <- lm(y1 ~ f) # controllo per il fattore
fm2 <- lm(y2 ~ f)
round(cor(fm1$res, fm2$res), 3) # correlazione parziale[1] 0.028
La correlazione tra \(y_1\) e \(y_2\) era interamente dovuta all’effetto condiviso di \(f\).
Senza bisogno di guardare i residui, avendo le correlazioni tra una variabile comune \(f\) e tra le \(y\), la correlazione parziale si può ottenere:
\[ r_{12 \mid f} = \frac{r_{12} - r_{1f}\,r_{2f}}{\sqrt{(1 - r_{1f}^2)(1 - r_{2f}^2)}} \]
R <- cor(Y)
R y1 y2 f
y1 1.0000000 0.3799708 0.8673960
y2 0.3799708 1.0000000 0.4233576
f 0.8673960 0.4233576 1.0000000
# formula
(R[1, 2] - R[1, 3] * R[2, 3]) /
sqrt((1 - R[1, 3]^2) * (1- R[2, 3]^2)) [1] 0.02828618
Se \(r_{ij} = \lambda_i \lambda_j\) per ogni coppia, possiamo ricavare i loading dalle sole correlazioni osservate.
\[ \begin{array}{ccccc} \hline & y_c & y_e & y_m & y_p \\ \hline y_c & 1.00 & 0.78 & 0.70 & 0.66 \\ y_e & & 1.00 & 0.64 & 0.54 \\ y_m & & & 1.00 & 0.45 \\ y_p & & & & 1.00 \\ \hline \end{array} \]
Per tre variabili \(c\), \(e\), \(m\):
\[ \lambda_m = \sqrt{\frac{r_{cm} \cdot r_{em}}{r_{ce}}} \]
Applicando questa formula con diverse terne si ottengono stime multiple dello stesso loading:
\[ \hat\lambda_m = \sqrt{\frac{0.70 \times 0.64}{0.78}} \approx 0.76, \qquad \hat\lambda_m = \sqrt{\frac{0.78 \times 0.45}{0.66}} \approx 0.69, \qquad \hat\lambda_m = \sqrt{\frac{0.64 \times 0.45}{0.54}} \approx 0.73 \]
Se tutte le stime sono coerenti, il modello a un fattore è plausibile. Se divergono, servono almeno due fattori.
Assumi tre variabili \(c,e,m\). Dal modello a un fattore:
\[ r_{cm}=\lambda_c\lambda_m,\qquad r_{em}=\lambda_e\lambda_m,\qquad r_{ce}=\lambda_c\lambda_e. \]
Moltiplica le prime due:
\[ r_{cm}r_{em} = (\lambda_c\lambda_m)(\lambda_e\lambda_m) = \lambda_c\lambda_e\lambda_m^2. \]
Ora dividi per la terza:
\[ \frac{r_{cm}r_{em}}{r_{ce}} = \frac{\lambda_c\lambda_e\lambda_m^2}{\lambda_c\lambda_e} = \lambda_m^2, \]
quindi
\[ \lambda_m=\sqrt{\frac{r_{cm}r_{em}}{r_{ce}}}. \]
Formalmente, se hai \(p\) item e 1 fattore, la matrice dei loadings è un vettore colonna:
\[ \Lambda = \begin{bmatrix} \lambda_1\\ \lambda_2\\ \vdots\\ \lambda_p \end{bmatrix} \]
e quindi
\[ \Lambda \Lambda^\mathsf{T} = \begin{bmatrix} \lambda_1^2 & \lambda_1\lambda_2 & \cdots & \lambda_1\lambda_p\\ \lambda_2\lambda_1 & \lambda_2^2 & \cdots & \lambda_2\lambda_p\\ \vdots & \vdots & \ddots & \vdots\\ \lambda_p\lambda_1 & \lambda_p\lambda_2 & \cdots & \lambda_p^2 \end{bmatrix}. \]
La diagonale contiene le comunalità degli item, mentre fuori diagonale compaiono le covarianze riprodotte tra item.
Per ottenere la matrice di covarianza teorica del modello bisogna aggiungere la matrice delle unicità \(\Psi = \operatorname{diag}(\psi_1, \psi_2, \ldots, \psi_p)\):
\[ \Sigma = \Lambda \Lambda^\mathsf{T} + \Psi = \begin{bmatrix} \lambda_1^2 + \psi_1 & \lambda_1\lambda_2 & \cdots & \lambda_1\lambda_p\\ \lambda_2\lambda_1 & \lambda_2^2 + \psi_2 & \cdots & \lambda_2\lambda_p\\ \vdots & \vdots & \ddots & \vdots\\ \lambda_p\lambda_1 & \lambda_p\lambda_2 & \cdots & \lambda_p^2 + \psi_p \end{bmatrix}. \]
Il termine \(\psi_i\) rappresenta la varianza specifica (o unicità) dell’item \(i\), cioè la quota di varianza non spiegata dal fattore comune.
| Elemento | Formula | Interpretazione |
|---|---|---|
| Diagonale | \(\lambda_i^2 + \psi_i\) | Varianza totale = comunalità + unicità |
| Fuori diagonale | \(\lambda_i \lambda_j\) | Covarianza riprodotta tra item \(i\) e \(j\) |
Quindi \(\Lambda\Lambda^\mathsf{T}\) da sola riproduce correttamente le covarianze fuori diagonale, ma sulla diagonale contiene solo le comunalità \(\lambda_i^2\), ovvero la quota di varianza spiegata dal fattore comune. Aggiungere \(\Psi\) completa la decomposizione: varianza totale = parte comune + parte specifica.
Dato che le variabili sono standardizzate (varianza = 1), la matrice di correlazione riprodotta dal modello è:
\[ R = \Lambda \Lambda^\mathsf{T} + \Psi \]
con \(\psi_i = 1 - \lambda_i^2\) sulla diagonale, così che \(\sigma_{i} = \lambda_i^2 + (1 - \lambda_i^2) = 1\). Le correlazioni riprodotte fuori diagonale sono semplicemente \(\hat{r}_{ij} = \lambda_i \lambda_j\).
Spearman <- matrix(c(
1.00, 0.78, 0.70, 0.66,
0.78, 1.00, 0.64, 0.54,
0.70, 0.64, 1.00, 0.45,
0.66, 0.54, 0.45, 1.00
), byrow = TRUE, ncol = 4,
dimnames = list(c("C","E","M","P"), c("C","E","M","P")))
Spearman C E M P
C 1.00 0.78 0.70 0.66
E 0.78 1.00 0.64 0.54
M 0.70 0.64 1.00 0.45
P 0.66 0.54 0.45 1.00
# funzione del pacchetto stats R base
fm <- factanal(covmat = Spearman, factors = 1) #specifico matrice e fattori
fm
Call:
factanal(factors = 1, covmat = Spearman)
Uniquenesses:
C E M P
0.086 0.329 0.460 0.539
Loadings:
Factor1
C 0.956
E 0.819
M 0.735
P 0.679
Factor1
SS loadings 2.587
Proportion Var 0.647
The degrees of freedom for the model is 2 and the fit was 0.023
La somma dei quadrati delle saturazioni fornisce la varianza totale spiegata dal fattore:
\[ \sum_i \lambda_i^2 = \text{SS loadings} = 2.587 \]
Ciascun \(\lambda_i^2\) è la comunalità del singolo item: \(C^2 + E^2 + M^2 + P^2\), il risultato è visualizzato in SS loadings 2.587.
# loadings
C <- 0.956
E <- 0.819
M <- 0.735
P <- 0.679
# total variance
C^2 + E^2 + M^2 + P^2[1] 2.585963
La Proportion Var ci dice quanto della varianza è spiegata dal fattore. Assumendo variabili standardizzate, la varianza totale attesa è \(4\) e quindi \(2.587 / 4 \approx 0.647\).
# proportion of variance
(C^2 + E^2 + M^2 + P^2)/4[1] 0.6464908
La comunalità di ciascun item è \(h_i^2 = 1 - \text{uniqueness}\), cioè la quota di varianza spiegata dal/i fattore/i comuni.
Nel caso monofattoriale, coincide con \(\lambda_i^2\), quindi il loading si recupera come radice quadrata della comunalità.
comm <- 1 - fm$uniquenesses # comunalità: quanto il fattore spiega quell'item?
tab <- data.frame(
loading = sqrt(comm), # solo con 1 fattore!
communality = comm, # h² = λ² (quota spiegata)
uniqueness = fm$uniquenesses # ψ = 1 - h² (quota residua)
)
tab$prop_var_item <- comm / 4 # contributo di ciascun item
# alla Proportion Var totale
tab loading communality uniqueness prop_var_item
C 0.9562592 0.9144316 0.08556841 0.2286079
E 0.8193894 0.6713990 0.32860098 0.1678498
M 0.7350297 0.5402686 0.45973140 0.1350671
P 0.6790257 0.4610759 0.53892412 0.1152690
# se sommo i contributi ho la varianza totale spiegata dal fattore
sum(tab$prop_var_item) [1] 0.6467938
Si può anche ricostruire esplicitamente la matrice di correlazione riprodotta \(\hat{R} = \Lambda\Lambda^\mathsf{T} + \Psi\) e confrontarla con quella osservata:
lambda <- sqrt(comm) # vettore dei loadings (1 fattore)
Psi <- diag(fm$uniquenesses) # matrice diagonale delle unicità
R_hat <- lambda %*% t(lambda) + Psi # matrice riprodotta
# aggiungo i nomi alle colonne e righe
rownames(R_hat) <- colnames(R_hat) <- c("C","E","M","P")
round(R_hat, 3)# correlazioni riprodotte dal modello C E M P
C 1.000 0.784 0.703 0.649
E 0.784 1.000 0.602 0.556
M 0.703 0.602 1.000 0.499
P 0.649 0.556 0.499 1.000
round(Spearman - R_hat, 3) # residui (differenze dalla matrice osservata) C E M P
C 0.000 -0.004 -0.003 0.011
E -0.004 0.000 0.038 -0.016
M -0.003 0.038 0.000 -0.049
P 0.011 -0.016 -0.049 0.000
Con \(m\) fattori comuni e \(p\) variabili, il modello è:
\[ \mathbf{Y}_s = \boldsymbol{\mu} + \boldsymbol{\Lambda}\,\boldsymbol{\theta}_s + \boldsymbol{\varepsilon}_s \]
In forma scalare: \[ Y_{si} = \mu_i + \lambda_{i1}\theta_{s1} + \cdots + \lambda_{im}\theta_{sm} + \varepsilon_{si} \]
La matrice di covarianza teorica risulta:
Fattori ortogonali (\(\boldsymbol{\Phi} = \mathbf{I}\)): \(\boldsymbol{\Sigma} = \boldsymbol{\Lambda}\boldsymbol{\Lambda}^\mathsf{T} + \boldsymbol{\Psi}\)
Fattori obliqui (\(\boldsymbol{\Phi} \neq \mathbf{I}\)): \(\boldsymbol{\Sigma} = \boldsymbol{\Lambda}\boldsymbol{\Phi}\boldsymbol{\Lambda}^\mathsf{T} + \boldsymbol{\Psi}\)
dove \(\boldsymbol{\Phi}\) è la matrice di correlazioni tra i fattori, e \(\boldsymbol{\Psi}\) la matrice diagonale delle unicità (\(p \times p\)).
Dati di 250 pazienti con 4 scale di Neuroticismo (N1–N4) e 4 di Estroversione (E1–E4).
varnames <- c("N1","N2","N3","N4","E1","E2","E3","E4")
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)
psychot_cor_mat N1 N2 N3 N4 E1 E2 E3 E4
N1 1.000 0.767 0.731 0.778 -0.351 -0.316 -0.296 -0.282
N2 0.767 1.000 0.709 0.738 -0.302 -0.280 -0.289 -0.254
N3 0.731 0.709 1.000 0.762 -0.356 -0.300 -0.297 -0.292
N4 0.778 0.738 0.762 1.000 -0.318 -0.267 -0.296 -0.245
E1 -0.351 -0.302 -0.356 -0.318 1.000 0.675 0.634 0.534
E2 -0.316 -0.280 -0.300 -0.267 0.675 1.000 0.651 0.593
E3 -0.296 -0.289 -0.297 -0.296 0.634 0.651 1.000 0.566
E4 -0.282 -0.254 -0.292 -0.245 0.534 0.593 0.566 1.000
n_brown <- 250
efa_ort <- factanal(
covmat = psychot_cor_mat,
factors = 2,
rotation = "varimax",
n.obs = n_brown
)
efa_ort
Call:
factanal(factors = 2, covmat = psychot_cor_mat, n.obs = n_brown, rotation = "varimax")
Uniquenesses:
N1 N2 N3 N4 E1 E2 E3 E4
0.219 0.280 0.289 0.217 0.362 0.293 0.381 0.511
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
Test of the hypothesis that 2 factors are sufficient.
The chi square statistic is 9.58 on 13 degrees of freedom.
The p-value is 0.728
Partendo dai loading calcola con R (o con la calcolatrice o a mano) le quantità:
SS loadings,Proportion VarCumulative Varcommunalità (vedi sopra)unicità (controlla che il risultato sia come quello riportato in efa_ort$uniquenesses)lambda <- efa_ort$loadings[1:8,1:2]
lambda Factor1 Factor2
N1 0.8537641 -0.2277964
N2 0.8257412 -0.1944553
N3 0.8105499 -0.2334530
N4 0.8651568 -0.1860795
E1 -0.2015257 0.7729335
E2 -0.1387371 0.8294011
E3 -0.1584101 0.7707741
E4 -0.1467635 0.6837448
# ...Matrice riprodotta e residui
# loadings * trasposto(loadings) + diagonale unicità
Rr <- lambda %*% t(lambda) + diag(efa_ort$uniqueness)
round(Rr, 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
round(psychot_cor_mat - Rr, 3) # residui: idealmente prossimi a 0 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
Visualizzaione:
fa.diagram(lambda)efa_obl <- fa(psychot_cor_mat, nfactors = 2, n.obs = n_brown,
rotate = "oblimin")efa_oblFactor Analysis using method = minres
Call: fa(r = psychot_cor_mat, nfactors = 2, n.obs = n_brown, rotate = "oblimin")
Standardized loadings (pattern matrix) based upon correlation matrix
MR1 MR2 h2 u2 com
N1 0.88 -0.02 0.78 0.22 1
N2 0.85 0.01 0.72 0.28 1
N3 0.83 -0.04 0.71 0.29 1
N4 0.90 0.03 0.78 0.22 1
E1 -0.05 0.77 0.63 0.37 1
E2 0.03 0.86 0.71 0.29 1
E3 0.00 0.79 0.63 0.37 1
E4 -0.01 0.70 0.49 0.51 1
MR1 MR2
SS loadings 3.00 2.45
Proportion Var 0.37 0.31
Cumulative Var 0.37 0.68
Proportion Explained 0.55 0.45
Cumulative Proportion 0.55 1.00
With factor correlations of
MR1 MR2
MR1 1.00 -0.43
MR2 -0.43 1.00
Mean item complexity = 1
Test of the hypothesis that 2 factors are sufficient.
df null model = 28 with the objective function = 5.02 with Chi Square = 1231.22
df of the model are 13 and the objective function was 0.04
The root mean square of the residuals (RMSR) is 0.01
The df corrected root mean square of the residuals is 0.02
The harmonic n.obs is 250 with the empirical chi square 1.73 with prob < 1
The total n.obs was 250 with Likelihood Chi Square = 9.65 with prob < 0.72
Tucker Lewis Index of factoring reliability = 1.006
RMSEA index = 0 and the 90 % confidence intervals are 0 0.047
BIC = -62.12
Fit based upon off diagonal values = 1
Measures of factor score adequacy
MR1 MR2
Correlation of (regression) scores with factors 0.96 0.94
Multiple R square of scores with factors 0.93 0.87
Minimum correlation of possible factor scores 0.85 0.75
Il modello è stato stimato con il metodo minres (minimum residual) su una matrice di correlazione (psychot_cor_mat), con 2 fattori e 250 osservatori. La rotazione usata è oblimin, una rotazione obliqua che permette ai fattori di essere correlati tra loro.
Pattern Matrix (Carichi Fattoriali)
La tabella mostra i carichi standardizzati (pattern matrix) degli 8 item sui 2 fattori. La struttura è estremamente semplice: ogni item carica quasi esclusivamente su un solo fattore.
| Item | MR1 | MR2 | h² | u² |
|---|---|---|---|---|
| N1 | 0.88 | −0.02 | 0.78 | 0.22 |
| N2 | 0.85 | 0.01 | 0.72 | 0.28 |
| N3 | 0.83 | −0.04 | 0.71 | 0.29 |
| N4 | 0.90 | 0.03 | 0.78 | 0.22 |
| E1 | −0.05 | 0.77 | 0.63 | 0.37 |
| E2 | 0.03 | 0.86 | 0.71 | 0.29 |
| E3 | 0.00 | 0.79 | 0.63 | 0.37 |
| E4 | −0.01 | 0.70 | 0.49 | 0.51 |
MR1 cattura gli item N1–N4 (probabilmente Nevroticismo), MR2 cattura E1–E4 (probabilmente Estroversione).
Varianza Spiegata
| Indice | MR1 | MR2 |
|---|---|---|
| SS Loadings | 3.00 | 2.45 |
| Proportion Var | 0.37 | 0.31 |
| Cumulative Var | 0.37 | 0.68 |
| Proportion Explained | 0.55 | 0.45 |
| Cumulative Proportion | 0.55 | 1.00 |
I due fattori spiegano congiuntamente il 68% della varianza totale degli item.
Correlazione tra Fattori
\[r_{\text{MR1, MR2}} = -0.43\]
I fattori risultano correlati negativamente, il che è teoricamente sensato per Nevroticismo ed Estroversione.
Indici di Fit del Modello
Tutti gli indici indicano un ottimo adattamento del modello ai dati:
| Indice | Valore | Soglia consigliata |
|---|---|---|
| RMSR | 0.01 | < 0.05 |
| Likelihood \(\chi^2\) | 9.65 (p = 0.72) | p > 0.05 |
| TLI | 1.006 | > 0.95 |
| RMSEA | 0.00 [90% CI: 0, 0.047] | < 0.05 |
| BIC | −62.12 | Più basso = meglio |
Il test \(\chi^2\) non significativo indica che il modello a 2 fattori non viene rifiutato: i residui sono compatibili con l’errore casuale.
Correlazione tra i fattori:
round(efa_obl$Phi, 3) MR1 MR2
MR1 1.000 -0.431
MR2 -0.431 1.000
Phi <- efa_obl$PhiLamdba e unicità:
lambda_obl <- matrix(efa_obl$loadings[, 1:2], nrow = 8)
lambda_obl [,1] [,2]
[1,] 0.877075569 -0.01577815
[2,] 0.852280802 0.01128419
[3,] 0.826584447 -0.03684789
[4,] 0.898762806 0.03121279
[5,] -0.048589010 0.77186847
[6,] 0.034700239 0.85566012
[7,] 0.002815265 0.79291602
[8,] -0.007884591 0.69545191
Psi_obl <- diag(efa_obl$uniquenesses)
Psi_obl [,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 0.2185506 0.0000000 0.0000000 0.000000 0.0000000 0.0000000 0.0000000
[2,] 0.0000000 0.2817872 0.0000000 0.000000 0.0000000 0.0000000 0.0000000
[3,] 0.0000000 0.0000000 0.2891237 0.000000 0.0000000 0.0000000 0.0000000
[4,] 0.0000000 0.0000000 0.0000000 0.215453 0.0000000 0.0000000 0.0000000
[5,] 0.0000000 0.0000000 0.0000000 0.000000 0.3695024 0.0000000 0.0000000
[6,] 0.0000000 0.0000000 0.0000000 0.000000 0.0000000 0.2922572 0.0000000
[7,] 0.0000000 0.0000000 0.0000000 0.000000 0.0000000 0.0000000 0.3732021
[8,] 0.0000000 0.0000000 0.0000000 0.000000 0.0000000 0.0000000 0.0000000
[,8]
[1,] 0.0000000
[2,] 0.0000000
[3,] 0.0000000
[4,] 0.0000000
[5,] 0.0000000
[6,] 0.0000000
[7,] 0.0000000
[8,] 0.5115539
Matrice riprodotta:
R_hat_obl <- lambda_obl %*% Phi %*% t(lambda_obl) + Psi_obl
round(R_hat_obl, 2) [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 1.00 0.75 0.75 0.78 -0.35 -0.31 -0.31 -0.28
[2,] 0.75 1.00 0.71 0.75 -0.32 -0.28 -0.28 -0.25
[3,] 0.75 0.71 1.00 0.74 -0.34 -0.31 -0.31 -0.28
[4,] 0.78 0.75 0.74 1.00 -0.32 -0.27 -0.28 -0.25
[5,] -0.35 -0.32 -0.34 -0.32 1.00 0.67 0.63 0.55
[6,] -0.31 -0.28 -0.31 -0.27 0.67 1.00 0.67 0.59
[7,] -0.31 -0.28 -0.31 -0.28 0.63 0.67 1.00 0.55
[8,] -0.28 -0.25 -0.28 -0.25 0.55 0.59 0.55 1.00
Residui
round(psychot_cor_mat - R_hat_obl, 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
Visualizzazione
fa.diagram(efa_obl) # qui al posto di lambda mettiamo il modelloPrima di condurre FA (sia esplorativa sia confermativa), ci si deve porre delle domande circa le correlazioni e la struttura di covarianza tra gli indciatori osservati:
Le prime due domande richiedono una risposta sia che si voglia usare un approccio esplorativo sia che si voglia usare un approccio confermativo. La terza fa parte del mondo esplorativo
Verifica se la matrice di correlazione \(\mathbf{R}\) è significativamente diversa da una matrice identità \(\mathbf{I}\) (ovvero una matrice dove è prevista la non correlazione tra tutte le variabili).
\(H_0: \mathbf{R} = \mathbf{I} \qquad H_1: \mathbf{R} \neq \mathbf{I}\)
\[\chi^2 = - (n-1 - \dfrac{2I + 5}{6}) \ln |\mathbf{R}| \qquad \text{con} \quad df = \dfrac{I(I-1)}{2}\] con \(n\) ampiezza campionaria, \(I\) numero di item e \(|\mathbf{R}|\) determinante di \(\mathbf{R}\)
\(n = 50\); \(I = 2\)
\[\mathbf{R} = \begin{pmatrix} 1 & 0.6 \\ 0.6 & 1 \end{pmatrix}\]
\[\mathbf{I} = \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix}\]
Determinante: \(|\mathbf{R}|=1\cdot 1−0.6^2=1−0.36=0.64\)
\(\chi^2 = - (n-1 - \dfrac{2I + 5}{6}) \ln |\mathbf{R}| = - (50-1 - \dfrac{2\cdot2 + 5}{6}) \ln 0.64 = \approx 21.2\)
\(\dfrac{I(I-1)}{2} = \dfrac{2(2-1)}{2} = 1\)
\(p\)-value \(= 4.1376451\times 10^{-6}\)
\(I = 3\)
\[\mathbf{R} = \begin{pmatrix} 1 & 0.6 & 0.5 \\ 0.6 & 1 & 0.4 \\ 0.5 & 0.4 & 1 \end{pmatrix}\]
\(r_{12}^2 = 0.36, \quad r_{13}^2 = 0.25, \quad r_{23}^2 = 0.16\)
\(\sum r_{ij}^2 = 0.36 + 0.25 + 0.16 = 0.77\)
\[\Omega = \mathbf{R}^{-1} \approx \begin{pmatrix} 1.56 & -0.88 & -0.43 \\ -0.88 & 1.45 & -0.22 \\ -0.43 & -0.22 & 1.29 \end{pmatrix}\]
con \(p_{ij} = -\frac{\omega_{ij}}{\sqrt{\omega_{ii}\,\omega_{jj}}}\) si ottengono:
\(p_{12} = -\frac{\omega_{12}}{\sqrt{\omega_{11}\,\omega_{22}}} = -\frac{-0.88}{\sqrt{1.56 \cdot 1.45}} \approx 0.59\)
\(p_{13} = -\frac{\omega_{13}}{\sqrt{\omega_{11}\,\omega_{33}}} = -\frac{-0.43}{\sqrt{1.56 \cdot 1.29}} \approx 0.30\)
\(p_{23} = -\frac{\omega_{23}}{\sqrt{\omega_{22}\,\omega_{33}}} = -\frac{-0.22}{\sqrt{1.45 \cdot 1.29}} \approx 0.16\)
\(\sum p_{ij}^2 = 0.59^2 + 0.30^2 + 0.16^2 \approx 0.47\)
\[KMO = \frac{\sum r_{ij}^2}{\sum r_{ij}^2 + \sum p_{ij}^2} = \frac{0.77}{0.77 + 0.47} \approx 0.62\]
La domanda: Di quanti fattori ho bisogno?
L’EFA è esplorativa: non impone a priori quanti fattori estrarre.
Prima di stimare il modello EFA si analizza la matrice di correlazione \(\mathbf{R}\) per capire quanta struttura latente contiene. Uno strumento utile è la sua scomposizione in autovalori e autovettori:
\[\mathbf{R}\,\mathbf{v} = e\,\mathbf{v}\]
dove \(\mathbf{v}\) è un autovettore (una direzione nello spazio degli item lungo cui la matrice si limita a scalare i vettori senza ruotarli) e \(e\) è il corrispondente autovalore, il fattore di scala: ci dice quanta varianza totale è concentrata lungo quella direzione. Per una matrice di correlazione la somma di tutti gli autovalori è uguale a \(p\) (uno per item standardizzato).
Gli autovettori individuano le direzioni di massima varianza in ordine decrescente: il primo autovettore punta nella direzione in cui i dati variano di più (il “fattore generale” comune a tutti gli item), il secondo nella direzione di massima varianza residua ortogonale al primo, e così via.
Per capire meglio è utile rappresentarli geometricamente, consideriamo il caso più semplice: 2 item e correlazione variabile. Ogni partecipante è un punto nello spazio bidimensionale definito dai due item; la forma di questa nuvola dipende interamente dalla correlazione \(r\).
L’Asse 1 (rosso) cattura ciò che i due item hanno in comune: punta sempre lungo la diagonale positiva quando \(r > 0\), lungo quella negativa quando \(r < 0\). L’Asse 2 (arancione) è sempre ortogonale al primo e cattura la varianza residua non condivisa. Con \(r = 0.95\) l’Asse 2 è quasi scomparso (\(e_2 = 0.05\)): un solo fattore basterebbe a descrivere quasi tutta la struttura.
Gli autovalori ci dicono quindi quanti fattori estrarre.
Trattenere i fattori con autovalore \(\geq 1\) (cioè che spiegano più varianza di un singolo item standardizzato). Utile come prima indicazione, ma tende a sovrastimare il numero di fattori.
Lo scree plot mostra il “gomito” dopo il quale gli autovalori calano gradualmente: si trattengono i fattori prima del gomito.
Confronta gli autovalori osservati con la distribuzione degli autovalori attesi da dati completamente casuali (stessa dimensione del dataset). Si trattengono solo i fattori il cui autovalore reale supera il 95° percentile della distribuzione casuale:
\[ \text{soglia}_k = \hat{q}_{0.95} \!\left(\lambda^{\text{rand}}_{k,1}, \ldots, \lambda^{\text{rand}}_{k,B}\right) \]
Il MAP misura la correlazione residua media rimasta tra gli item dopo aver rimosso via via 1, 2, 3, … fattori:
\[MAP(f) = \dfrac{1}{p(p-1)} \sum_{i \neq j} {r_{ij}^{(f)}}^2\]
\[f^* = \arg \min_f MAP(f)\]
\(p(p-1)\): Numero di coppie di variabili
\(r_{ij}^{(f)}\) correlazione parziale tra ogni coppia di variabili dopo aver estratto \(f\) fattori
Si sceglie \(f\) che minimizza MAP(\(f\)): troppo pochi fattori → correlazioni residue ancora alte; troppi fattori → i nuovi fattori inseguono rumore e MAP risale.
| Criterio | Logica | Tendenza |
|---|---|---|
| Kaiser (\(\lambda \geq 1\)) | Autovalore ≥ varianza di 1 item | Sovrastima |
| Parallel Analysis | Autovalore reale > autovalore casuale (95°pct) | Più conservativo |
| MAP | Minimizza la correlazione residua | Generalmente accurato |
In pratica, usarli insieme: se concordano, la scelta è robusta.
Estrarre i fattori significa trovare \(\boldsymbol{\Lambda}\) che minimizza la differenza tra \(\mathbf{R}\) osservata e la matrice ricostruita dal modello \(\hat{\mathbf{R}}\).
Una volta estratti, i loadings descrivono la struttura: quanto ciascun item è correlato con ciascun fattore latente. Geometricamente, si rappresentano gli item come punti in uno spazio dove gli assi sono i fattori. Con 1 fattore lo spazio è monodimensionale: il loading è semplicemente la coordinata dell’item su quell’unico asse.
Con 2 fattori lo spazio diventa bidimensionale (F1 \(\times\) F2): ogni item ha due coordinate, e la proiezione ortogonale del punto su ciascun asse dà il loading corrispondente. Un loading alto su F1 significa che il punto cade vicino all’asse F1 (e lontano da F2); un cross-loading si verifica quando un punto è equidistante da entrambi gli assi.
Gli autovalori iniziali (scree plot, Kaiser) sono proprietà della matrice \(\mathbf{R}\) prima della stima del modello. I loadings stimati misurano l’associazione tra ogni item e il fattore; la loro somma dei quadrati (SS Loadings = \(\sum_i \hat{\lambda}_{ik}^2\)) indica quanta varianza comune cattura ciascun fattore.
Lavoriamo sugli item E + N del dataset bfi:
fit_efa_EN <- fa(R_EN, nfactors = 2, fm = "minres",
rotate = "none", n.obs = n_obs)
round(fit_efa_EN$loadings[,], 3) MR1 MR2
E1 -0.398 0.501
E2 -0.640 0.458
E3 -0.380 0.467
E4 -0.536 0.479
E5 -0.344 0.465
N1 0.661 0.501
N2 0.649 0.480
N3 0.659 0.422
N4 0.681 0.088
N5 0.525 0.203
Prima della rotazione, il primo fattore tende ad essere generale (tutti gli item caricano nella stessa direzione); il secondo separa parzialmente i cluster, ma gli assi non sono ancora allineati ai dati.
La soluzione non ruotata è spesso difficile da interpretare. La rotazione trasforma gli assi per ottenere la simple structure: ogni item carica alto su un solo fattore e vicino a zero sugli altri. Concretamente, ruotare gli assi equivale a cambiare il sistema di riferimento: i punti non si spostano, ma le loro coordinate (= i loadings) cambiano.
data.frame(item = c("E1","E2","E3","E4","E5","N1","N2","N3","N4","N5"),
orto = unname(fit_varimax$loadings[,]),
obli = unname(fit_oblimin$loadings[,])) item orto.1 orto.2 obli.1 obli.2
1 E1 -0.027089709 0.639785522 0.08835104 0.654370957
2 E2 -0.248418033 0.746620903 -0.11589160 0.752709875
3 E3 -0.032168309 0.601427011 0.07628341 0.614799996
4 E4 -0.151197447 0.702607959 -0.02564875 0.712501774
5 E5 -0.004451518 0.578385566 0.10011297 0.592581647
6 N1 0.829313831 0.015594220 0.84051647 0.057799840
7 N2 0.807017875 0.005902044 0.81624219 0.046741777
8 N3 0.781040964 -0.046263437 0.78056783 -0.008034159
9 N4 0.602064742 -0.329252928 0.54859984 -0.307103846
10 N5 0.543706187 -0.144682669 0.52303366 -0.120874443
Con una rotazione ortogonale (es. varimax) i fattori sono incorrelati per costruzione: esiste una sola matrice di loadings. Con una rotazione obliqua (es. oblimin) i fattori possono correlare tra loro, e questo introduce tre quantità distinte:
\(\boldsymbol{\Phi}\) ha 1 sulla diagonale e correlazioni \(\phi_{jj'}\) fuori diagonale. Con rotazione ortogonale \(\boldsymbol{\Phi} = \mathbf{I}\) per costruzione.
Ogni elemento \(s_{ij}\) è la correlazione totale tra l’item \(i\) e il fattore \(j\). Risponde alla domanda:
“Quanto si muove insieme l’item \(i\) con il fattore \(j\), considerando anche le relazioni tra i fattori?”
\[\boldsymbol{S} = \boldsymbol{\Lambda}\,\boldsymbol{\Phi}\]
L’elemento \(s_{ij}\) include due contributi: l’effetto diretto del fattore \(j\) sull’item \(i\) (il pattern loading \(\lambda_{ij}\)) più gli effetti indiretti degli altri fattori \(j'\), mediati dalla loro correlazione \(\phi_{jj'}\) con il fattore \(j\):
\[s_{ij} = \lambda_{ij} + \sum_{j' \neq j} \lambda_{ij'}\,\phi_{j'j}\]
Se \(\boldsymbol{\Phi} = \mathbf{I}\) (fattori ortogonali), \(\boldsymbol{S} = \boldsymbol{\Lambda}\): le due matrici coincidono.
fit_oblimin <- fa(R_EN, nfactors = 2, fm = "minres",
rotate = "oblimin", n.obs = n_obs)
# Pattern matrix — effetti diretti, output di default di fa()
L_pattern <- fit_oblimin$loadings[,]
round(L_pattern, 3) MR1 MR2
E1 0.088 0.654
E2 -0.116 0.753
E3 0.076 0.615
E4 -0.026 0.713
E5 0.100 0.593
N1 0.841 0.058
N2 0.816 0.047
N3 0.781 -0.008
N4 0.549 -0.307
N5 0.523 -0.121
# Phi — correlazione tra i fattori (m × m)
round(fit_oblimin$Phi, 3) MR1 MR2
MR1 1.000 -0.224
MR2 -0.224 1.000
# Structure matrix — correlazioni totali item-fattore (p × m)
L_structure <- L_pattern %*% fit_oblimin$Phi
round(L_structure, 3) MR1 MR2
E1 -0.058 0.635
E2 -0.285 0.779
E3 -0.062 0.598
E4 -0.186 0.718
E5 -0.033 0.570
N1 0.828 -0.131
N2 0.806 -0.136
N3 0.782 -0.183
N4 0.618 -0.430
N5 0.550 -0.238
Per scegliere il “miglior” modello di EFA, vanno confrontate diverse soluzioni che prendano in considerazione diversi modelli fattoriali
Pensato per modelli confermativi
In EFA viene usato in senso compartivo, nel senso di vedere come cambia la fit del modelo in base al numero di fattori inseriti nel modello fattoriale
Viene definito indice comparativo ma non con lo stesso significato degli indici di entropia (AIC e BIC)
Per valutare la buona fit di un modello fattoriale esplorativo vanno tenuti a mente i principi di:
A differenza dell’EFA, l’Analisi Fattoriale Confermativa (CFA) permette di testare delle ipotesi specificando a priori un modello in cui vengono esplicitate:
Ogni indicatore è la realizzazione di un singolo e specifico fattore latente.
Ogni indicatore satura su una specifica dimensione latente definita a priori sulla base di un modello teorico.
\[\mathbf{Y}_p = \boldsymbol{\mu} + \boldsymbol{\Lambda}\,\boldsymbol{\theta}_p + \boldsymbol{\varepsilon}_p\]
con:
L’idea centrale della CFA è confrontare due matrici di covarianza:
dove \(\boldsymbol{\zeta}\) contiene tutti i parametri del modello (saturazioni, varianze, covarianze, errori specifici).
Stimare i parametri a partire dalla matrice di covarianza osservata in modo che:
\[\mathbf{S} \approx \boldsymbol{\Sigma}(\boldsymbol{\zeta})\]
L’ipotesi nulla del test del \(\chi^2\) è:
\[H_0: \mathbf{S} = \boldsymbol{\Sigma}(\boldsymbol{\zeta})\]
I gradi di libertà sono:
\[df = \dfrac{I(I+1)}{2} - t\]
dove \(I\) è il numero di indicatori e \(t\) il numero di parametri liberi che si stimano nel modello (contenuti in \(\boldsymbol{\zeta}\)).
Se \(I = 4\), la matrice di covarianza è:
\[ \mathbf{S} = \begin{pmatrix} \mathbf{s_{11}} & s_{12} & s_{13} & s_{14} \\ s_{21} & \mathbf{s_{22}} & s_{23} & s_{24} \\ s_{31} & s_{32} & \mathbf{s_{33}} & s_{34} \\ s_{41} & s_{42} & s_{43} & \mathbf{s_{44}} \end{pmatrix} \]
Ci sono \(\dfrac{I(I+1)}{2} = \dfrac{4(4+1)}{2} = 10\) elementi unici:
Dati questi 10 elementi, si possono stimare AL MASSIMO 9 parametri.
Il modello è testabile perché c’è più informazione nei dati di quanto richiesto dal modello.
La matrice di covarianza \(\mathbf{S}\) non può essere riprodotta perfettamente da \(\boldsymbol{\Sigma}(\boldsymbol{\zeta})\): il modello è falsificabile.
Situazione al limite dove il numero di parametri è uguale ai dati empirici.
La matrice di covarianza \(\mathbf{S}\) può essere riprodotta perfettamente da \(\boldsymbol{\Sigma}(\boldsymbol{\zeta})\).
Il modello non è falsificabile.
Ci sono più parametri che informazione disponibile.
Diversi set di parametri possono essere usati per \(\boldsymbol{\Sigma}(\boldsymbol{\zeta})\) (sistema indeterminato, non esiste una soluzione unica).
Indice di fit assoluto basato sul \(\chi^2\):
\[\text{RMSEA} = \sqrt{\dfrac{\chi^2 - df}{df(n-1)}}\]
Poiché \(E(\chi^2) = df\), più è piccolo il valore di RMSEA, minore è l’errore e migliore è il modello.
Confronta la performance del modello target (\(T\)) e di un modello baseline (\(B\)) in cui tutte le covarianze sono fissate a 0 (non c’è correlazione tra le variabili manifeste) e le varianze sono stimate liberamente a partire dai dati:
\[\text{CFI} = \dfrac{(\chi_B^2 - df_B) - (\chi_T^2 - df_T)}{(\chi_B^2 - df_B)}\]
Se il modello \(T\) è correttamente specificato: \((\chi_T^2 - df_T) \approx 0 \Rightarrow \text{CFI} \approx 1\).
Stesso principio del CFI ma basato su \(\chi_N^2 = \chi^2/df\) (che tende a 1 quando \(\chi^2 = df\)):
\[\text{TLI} = \dfrac{(\chi_B^2/df_B) - (\chi_T^2/df_T)}{\chi_B^2/df_B - 1}\]
I parametri da stimare sono di due tipi:
\[\boldsymbol{\Phi} = \operatorname{Var}(\boldsymbol{\theta}_p) \in \mathbb{R}^{F \times F}\]
Matrice delle varianze e covarianze delle \(F\) variabili latenti.
Se il modello prevede \(F\) fattori ortogonali, allora \(\phi_{ij} = 0\ \forall i \neq j\) e quindi \(\boldsymbol{\Phi}\) è una matrice diagonale.
\[\boldsymbol{\Lambda} \in \mathbb{R}^{I \times F} \quad \text{e} \quad \boldsymbol{\varepsilon}_p = (\varepsilon_{1p}, \varepsilon_{2p}, \ldots, \varepsilon_{Ip})^\top\]
Per gli errori viene stimata la varianza \(\operatorname{Var}(\varepsilon_i)\) di ogni indicatore.
Rimane il problema di fissare la scala per l’interpretazione delle saturazioni sulla variabile latente. Due approcci:
I due metodi sono matematicamente equivalenti: si può passare da uno all’altro senza problemi.
Non cambia il fit del modello, non cambia il numero di parametri stimati in \(\boldsymbol{\zeta}\) (ma cambiano i parametri specifici che vengono stimati). Cambia la scala e l’interpretazione delle saturazioni (e delle covarianze).
\[\boldsymbol{\zeta} = \{\boldsymbol{\Lambda},\ \operatorname{Var}(\varepsilon_i),\ \boldsymbol{\Phi}\}\]
Si fissa una saturazione (solitamente quella del primo item di ogni fattore):
\[\lambda_1 = 1\]
La variabile latente \(\theta\) assume così la scala del primo item. La varianza \(\operatorname{Var}(\theta)\) viene stimata liberamente (e influenza l’interpretazione delle saturazioni).
Conteggio dei parametri:
\[|\boldsymbol{\zeta}| = I + (I - F) + \dfrac{F(F+1)}{2}\]
Viene fissata la varianza della variabile latente:
\[\operatorname{Var}(\theta) = 1\]
Vengono stimati tutti i \(\lambda_i\) relativi a quella variabile latente. I \(\lambda_i\) si possono interpretare come venivano interpretati in EFA (cioè come correlazioni variabile latente—indicatore). Al posto delle covarianze tra fattori si stimano direttamente le correlazioni.
Conteggio dei parametri:
\[|\boldsymbol{\zeta}| = 2I + \dfrac{F(F-1)}{2}\]
cfa() di lavaanLa sintassi di lavaan usa alcuni simboli specifici:
| Simbolo | Significato |
|---|---|
=~ |
Factor loading (saturazione \(\lambda_i\)) |
~~ |
Varianza/covarianza |
user = 1 |
Parametro stabilito dall’utente |
ustart = 1 |
Constraint sulla stima dei parametri (non stimato, fissato a priori per settare la metrica) |
free = 0 |
Parametri NON stimati |
free != 0 |
Parametri stimati |
start |
Valore iniziale del parametro usato come punto di partenza della stima |
est |
Stima ottenuta attraverso gli algoritmi di ottimizzazione |
HolzingerSwineford1939Per illustrare la CFA usiamo il classico dataset incluso in lavaan, che contiene 9 test cognitivi somministrati a 301 bambini. L’ipotesi teorica è che ci siano 3 fattori latenti: visual (x1, x2, x3), textual (x4, x5, x6) e speed (x7, x8, x9).
library(lavaan)
library(semPlot)
modello <- '
visual =~ x1 + x2 + x3
textual =~ x4 + x5 + x6
speed =~ x7 + x8 + x9
'
# Metodo Indicatore-LV: la prima saturazione di ogni fattore è fissata a 1
fit_ind <- cfa(modello, data = HolzingerSwineford1939)
# Metodo Standardizzazione-LV: la varianza dei fattori è fissata a 1
fit_std <- cfa(modello, data = HolzingerSwineford1939, std.lv = TRUE)Esaminiamo la tabella dei parametri del modello con metodo Indicatore-LV:
parTable(fit_ind)[, c("lhs", "op", "rhs", "user", "free", "ustart", "est")] lhs op rhs user free ustart est
1 visual =~ x1 1 0 1 1.000
2 visual =~ x2 1 1 NA 0.554
3 visual =~ x3 1 2 NA 0.729
4 textual =~ x4 1 0 1 1.000
5 textual =~ x5 1 3 NA 1.113
6 textual =~ x6 1 4 NA 0.926
7 speed =~ x7 1 0 1 1.000
8 speed =~ x8 1 5 NA 1.180
9 speed =~ x9 1 6 NA 1.082
10 x1 ~~ x1 0 7 NA 0.549
11 x2 ~~ x2 0 8 NA 1.134
12 x3 ~~ x3 0 9 NA 0.844
13 x4 ~~ x4 0 10 NA 0.371
14 x5 ~~ x5 0 11 NA 0.446
15 x6 ~~ x6 0 12 NA 0.356
16 x7 ~~ x7 0 13 NA 0.799
17 x8 ~~ x8 0 14 NA 0.488
18 x9 ~~ x9 0 15 NA 0.566
19 visual ~~ visual 0 16 NA 0.809
20 textual ~~ textual 0 17 NA 0.979
21 speed ~~ speed 0 18 NA 0.384
22 visual ~~ textual 0 19 NA 0.408
23 visual ~~ speed 0 20 NA 0.262
24 textual ~~ speed 0 21 NA 0.173
Nella colonna ustart si vede il vincolo 1 sulla prima saturazione di ogni fattore (x1, x4, x7). I parametri stimati liberamente hanno free != 0.
Con \(I = 9\) indicatori e \(F = 3\) fattori:
\[|\boldsymbol{\zeta}| = I + (I - F) + \dfrac{F(F+1)}{2} = 9 + 6 + 6 = 21\]
summary(fit_ind, fit.measures = TRUE, standardized = TRUE)lavaan 0.6-19 ended normally after 35 iterations
Estimator ML
Optimization method NLMINB
Number of model parameters 21
Number of observations 301
Model Test User Model:
Test statistic 85.306
Degrees of freedom 24
P-value (Chi-square) 0.000
Model Test Baseline Model:
Test statistic 918.852
Degrees of freedom 36
P-value 0.000
User Model versus Baseline Model:
Comparative Fit Index (CFI) 0.931
Tucker-Lewis Index (TLI) 0.896
Loglikelihood and Information Criteria:
Loglikelihood user model (H0) -3737.745
Loglikelihood unrestricted model (H1) -3695.092
Akaike (AIC) 7517.490
Bayesian (BIC) 7595.339
Sample-size adjusted Bayesian (SABIC) 7528.739
Root Mean Square Error of Approximation:
RMSEA 0.092
90 Percent confidence interval - lower 0.071
90 Percent confidence interval - upper 0.114
P-value H_0: RMSEA <= 0.050 0.001
P-value H_0: RMSEA >= 0.080 0.840
Standardized Root Mean Square Residual:
SRMR 0.065
Parameter Estimates:
Standard errors Standard
Information Expected
Information saturated (h1) model Structured
Latent Variables:
Estimate Std.Err z-value P(>|z|) Std.lv Std.all
visual =~
x1 1.000 0.900 0.772
x2 0.554 0.100 5.554 0.000 0.498 0.424
x3 0.729 0.109 6.685 0.000 0.656 0.581
textual =~
x4 1.000 0.990 0.852
x5 1.113 0.065 17.014 0.000 1.102 0.855
x6 0.926 0.055 16.703 0.000 0.917 0.838
speed =~
x7 1.000 0.619 0.570
x8 1.180 0.165 7.152 0.000 0.731 0.723
x9 1.082 0.151 7.155 0.000 0.670 0.665
Covariances:
Estimate Std.Err z-value P(>|z|) Std.lv Std.all
visual ~~
textual 0.408 0.074 5.552 0.000 0.459 0.459
speed 0.262 0.056 4.660 0.000 0.471 0.471
textual ~~
speed 0.173 0.049 3.518 0.000 0.283 0.283
Variances:
Estimate Std.Err z-value P(>|z|) Std.lv Std.all
.x1 0.549 0.114 4.833 0.000 0.549 0.404
.x2 1.134 0.102 11.146 0.000 1.134 0.821
.x3 0.844 0.091 9.317 0.000 0.844 0.662
.x4 0.371 0.048 7.779 0.000 0.371 0.275
.x5 0.446 0.058 7.642 0.000 0.446 0.269
.x6 0.356 0.043 8.277 0.000 0.356 0.298
.x7 0.799 0.081 9.823 0.000 0.799 0.676
.x8 0.488 0.074 6.573 0.000 0.488 0.477
.x9 0.566 0.071 8.003 0.000 0.566 0.558
visual 0.809 0.145 5.564 0.000 1.000 1.000
textual 0.979 0.112 8.737 0.000 1.000 1.000
speed 0.384 0.086 4.451 0.000 1.000 1.000
L’output di summary() riporta:
Test statistic (\(\chi^2\)) e relativi gradi di libertà e p-valueCFI e TLI (Comparative e Tucker-Lewis Fit Index)RMSEA con intervallo di confidenzaSRMR (Standardized Root Mean Square Residual)Latent Variables, varianze/covarianze)Std.all riporta le stime completamente standardizzate (interpretabili come correlazioni quando le variabili sono standardizzate)semPaths(fit_std, what = "std", layout = "tree2",
style = "OpenMx", edge.label.cex = 0.9)Nel diagramma:
Quando gli item non permettono di sostenere la normalità e linearità dei punteggi (i.e., item su scala Likert con poche categorie), si utilizzano:
Le risposte agli item \(Y_i\) sono trattate come la realizzazione di una variabile latente \(Y_i^*\) continua e distribuita normalmente. Nel caso dicotomico:
\[Y_i = \begin{cases} 1 & \text{se } Y_i^* \geq \tau_i \\ 0 & \text{se } Y_i^* < \tau_i \end{cases}\]
dove \(\tau_i\) è una soglia fissa (incognita) da cui dipende la risposta positiva.
\[r_{\text{tet}_{Y_i Y_j}} = r_{Y_i^* Y_j^*}\]
In questo caso le soglie stimate per ogni item vanno considerate sia come parametri del modello sia come parte dell’informazione iniziale a disposizione per la stima.
Considerando il caso di variabili categoriali e quindi la correlazione policorica, \(\mathbf{S}\) diventa una matrice di correlazione (con 1 sulla diagonale), perché le variabili osservate sono prese come realizzazione di variabili latenti standardizzate:
\[ \mathbf{S} = \begin{pmatrix} 1 & s_{12} & s_{13} & s_{14} \\ s_{21} & 1 & s_{23} & s_{24} \\ s_{31} & s_{32} & 1 & s_{34} \\ s_{41} & s_{42} & s_{43} & 1 \end{pmatrix} \]
Il numero di parametri unici in \(\mathbf{S}\) è quindi:
\[\dfrac{I(I-1)}{2}\]
Nella quantità di informazione totale vanno contate anche le soglie per ogni item:
\[\sum_{i=1}^{I}(k_i - 1)\]
dove \(k_i\) è il numero di categorie di risposta dell’item \(i\).
L’informazione totale è quindi:
\[\dfrac{I(I-1)}{2} + \sum_{i=1}^{I}(k_i - 1)\]
Ad esempio, con \(I = 4\) e \(k = 5\):
\[\dfrac{4(4-1)}{2} + 4 \times 4 = 6 + 16 = 22\]
Si applica la stessa metodologia per scalare e interpretare i parametri presentata sopra (Indicatore-LV o Standardizzazione-LV). Il tipo di scalatura non influisce sul numero totale di parametri stimati.
Nel caso delle correlazioni basate sulle soglie (policoriche o tetracoriche), il conteggio dei parametri deve includere anche le soglie:
\[\boldsymbol{\zeta} = \{\boldsymbol{\Lambda},\ \operatorname{Var}(\varepsilon_i),\ \boldsymbol{\Phi},\ \boldsymbol{\tau}\}\]
con
\[\boldsymbol{\tau} = I \times (k - 1)\]
Siccome il modello è ordinale (i.e., i dati osservati sono la realizzazione di variabili latenti con varianza nota), non vengono stimate le varianze d’errore degli item.
Ad esempio, con \(I = 20\) item, \(k = 5\) categorie e \(F = 2\) fattori, usando il metodo Indicatore-Variabile Latente:
\[(20 - 2) + \dfrac{2(2+1)}{2} + 20(5-1) = 18 + 3 + 80 = 101\]
In lavaan basta indicare quali item trattare come ordinali tramite l’argomento ordered:
fit_ord <- cfa(modello, data = dati, ordered = colnames(dati))
summary(fit_ord, fit.measures = TRUE)Tutto il discorso che segue sull’attendibilità e sulla sua valutazione riguarda la Classical Test Theory.
L’attendibilità è il grado in cui una procedura di misurazione produce lo stesso risultato in prove ripetute. Come visto precedentemente:
\[X = V + E\]
con \(X\) misura rilevata, \(V\) parte vera, \(E\) errore (fluttuazioni casuali oppure costante e sistematico).
L’attendibilità di una misura è la proporzione di \(X\) che non riflette l’errore di misurazione:
\[\rho = \dfrac{V}{V + E}\]
Problema: non è possibile conoscere \(V\) (non lo osserviamo mai), quindi non è effettivamente possibile stimare l’attendibilità a partire da questa definizione. Si utilizzano metodologie che permettono di approssimare il calcolo di \(V\):
Viene somministrato lo stesso test allo stesso gruppo di soggetti in due momenti distinti (solitamente almeno 3 mesi di distanza).
Si calcola il coefficiente di correlazione tra i punteggi ottenuti nelle due somministrazioni.
→ Coefficiente di stabilità
Vengono somministrate due versioni dello stesso test che possono essere considerate equivalenti allo stesso gruppo di persone.
Il contenuto, la formulazione degli item e degli eventuali distrattori devono essere pressoché identici.
Si calcola la correlazione tra i punteggi ottenuti ai due test.
→ Coefficiente di equivalenza
Si basa sulla somministrazione di una singola misura che viene suddivisa in due metà equivalenti (in termini di copertura del dominio di contenuto).
Viene calcolata la correlazione tra i punteggi delle due metà → attendibilità che si osserverebbe su una misura lunga la metà dell’originale.
Viene impiegato il coefficiente di Spearman-Brown per calcolare l’attendibilità complessiva dell’intera misura.
→ Coefficiente di coerenza interna
È la misura di attendibilità più conosciuta e usata. È interamente basata sulla correlazione tra gli item:
\[\alpha = \dfrac{I}{I-1}\left(1 - \dfrac{\sum_{i=1}^{I}\sigma_{X_i}^2}{\sigma_X^2}\right)\]
dove:
| \(\alpha\) | Interpretazione |
|---|---|
| \(< .70\) | inaccettabile |
| \(.70 - .79\) | accettabile |
| \(.80 - .89\) | buona |
| \(\geq .90\) | eccellente |
Per questo motivo \(\alpha\) va sempre calcolato separatamente per ogni dimensione della scala, mai sull’insieme degli item se questi misurano costrutti diversi.
library(psych)
# Sbagliato: calcolare alpha su item che misurano costrutti diversi
alpha(dati[, c(itemN, itemC)])$total
# Corretto: calcolare alpha separatamente per ogni dimensione
alpha(dati[, itemN])$total
alpha(dati[, itemC])$totalMisura il contributo di ogni singolo item alla coerenza interna (non è un giudizio assoluto sulla bontà dell’item o su quanto contribuisce alla misurazione del costrutto):
\[\Delta \alpha = \alpha_{(-i)} - \alpha\]
Interpretazione:
In R, l’output di psych::alpha() contiene una sezione alpha.drop con i valori di \(\alpha\) ottenuti rimuovendo un item alla volta:
res <- alpha(dati[, itemN])
round(res$alpha.drop[, c("raw_alpha", "std.alpha", "alpha se")], 2)