Indice
Alpha di Cronbach
L'alpha ($\alpha$) di Cronbach è un indice statistico utilizzato per misurare la coerenza interna o affidabilità di una scala, e dunque la sua unidimensionalità: quanto cioè i singoli items si riferiscano ad uno stesso costrutto sottostante.
\begin{equation} \alpha = \frac{k\bar{c}}{\bar{v}+(k-1)\bar{c}} \end{equation}
Dove: $k$ = numero di items; $v$ = varianza media; $\bar{c}$ = covarianza inter-item media
Questa formula evidenzia il rapporto tra le varianze e covarianze dei singoli item e la varianza del punteggio totale della scala: tanto più la varianza media si avvicina alla media delle covarianze degli item, tanto più il valore sarà vicino a 1 (vedi oltre).
Altrimenti detto: se la covarianza degli items fra di loro “esaurisse” (spiegasse) la varianza totale, il valore sarebbe pari a 1, gli item sarebbero perfettamente allineati e la scala sarebbe quindi perfettamente unidimensionale.
L'alpha ($\alpha$) di Cronbach
- Assume valori compresi tra 0 e 1 (1 indica che le domande misurano lo stesso costrutto)
- Va applicato a batterie di domande in ipotesi riferibili ad una dimensione (Cronbach 1951)
- Aumenta all'aumentare del numero degli items, a parità di altre condizioni (Cortina 1993); La formula include anche un fattore di correzione basato sul numero di item ($k/(k−1)$)
Per scale che usano sistemi di punteggi differenti (ad es. 4 e 5 punti) si può calcolare sui punteggi standardizzati, cioè con la matrice delle correlazioni invece che con quella della covarianza (alpha standardizzato).
I valori di $\alpha$ vengono indicativamente interpretati come segue:
- 0,9 - Ottimo
- 0,8 - Buono
- 0,7 - Accettabile
- 0,6 - Mediocre, inadeguato
Non esiste una regola universalmente accettata che ci dica come comportarci se la scala non è affidabile e coerente. Essendo una misura pensata per l'item analysis, il passo successivo potrebbe essere quello di individuare quale item funziona peggio analizzando la matrice delle covarianze o delle correlazioni, e considerare l'alpha condizionato (vedi oltre).
Vedi anche:
Con il pacchetto DescTools
La gran parte dei software statistici prevede questa misura. In R, è disponibile nel pacchetto DescTools.
Riprendiamo l'esempio alla pagina dedicata al trattamento delle Scale Likert.
library(tidyverse) library(likert) data(pisaitems) items24 <- pisaitems %>% select_at(vars(starts_with("ST24Q"))) # nomi degli items names(items24) <- c(ST24Q01="only if I have to", ST24Q02="one of my favorite hobbies", ST24Q03="like talking about b", ST24Q04="hard to finish b", ST24Q05="happy receving b as a present.", ST24Q06="a waste of time", ST24Q07="enjoy bookstore", ST24Q08="to get information", ST24Q09="cannot sit still and read", ST24Q10="like express opinions about b", ST24Q11="like exchange b")
Il pacchetto DescTools mette a disposizione la funzione CronbachAlpha()
, che permette di eseguire il calcolo , con o senza intervalli di confidenza (il default è senza).
# install.packages("DescTools") # se necessario library(DescTools) items24 %>% # trasformiamo le variabili ordinali in numeriche mutate_all(as.numeric) %>% CronbachAlpha(na.rm =T)
[1] 0.2146792
Il valore è in questo caso molto basso, in quanto la scala contiene items con polarità invertita: 5 items su 11 vanno cioè in direzione opposta rispetto agli altri, e le correlazioni si annullano reciprocamente.
Modificando gli items come illustrato nella pagina dedicata, i risultati cambiano in maniera significativa:
items24r %>% mutate_all(as.numeric) %>% CronbachAlpha(na.rm =T)
[1] 0.8902519
Un valore di 0,890 indica un'elevata coerenza interna tra gli item: gli 11 item misurano in modo molto consistente la stessa dimensione sottostante.
Alpha condizionato o se item eliminato
Con la stessa funzione, possiamo calcolare anche l'alpha condizionato (o “alpha if item dropped”) misura, per ciascun item della scala, quale sarebbe il valore dell'alpha di Cronbach complessivo se quell'item venisse eliminato dalla scala. Serve a decidere se alcuni item andrebbero modificati o eliminati per migliorare l'affidabilità della scala. Infatti, se togliendo un item:
- l'alfa aumenta, significa che quell'item non è ben allineato con gli altri;
- l'alfa diminuisce, significa che quell'item contribuita positivamente alla coerenza interna.
Ad esempio, in presenza di un alpha complessivo insoddisfacente, l'alpha condizionato permette di valutare quali sono gli item meno correlati al costrutto.
items24r %>% mutate_all(as.numeric) %>% CronbachAlpha(cond = T, na.rm =T)
$unconditional [1] 0.8902519 $condCronbachAlpha Item Cronbach Alpha 1 1 0.8776748 2 2 0.8751599 3 3 0.8775610 4 4 0.8924449 5 5 0.8771772 6 6 0.8790445 7 7 0.8786391 8 8 0.8818855 9 9 0.8844367 10 10 0.8815754 11 11 0.8797483
L'ouput si compone di due elementi (è una lista):
$unconditional
: l'$\alpha$ complessivo;$condCronbachAlpha
: tabella dei valori dell'$\alpha$ se ciascun item venisse rimosso dalla scala.
In questo caso, il valore aumenterebbe eliminando l'item 4 (I find it hard to finish books), mentre diminuirebbe eliminando uno qualunque degli altri. Questo significa che l'item 4 è leggermente meno allineato, mentre tutti gli altri contribuiscono in modo importante alla coerenza interna della scala.
Alpha standardizzato
Per scale che usano sistemi di punteggi differenti (ad es. 4 e 5 punti), o in presenza di outliers e distribuzioni non normali, si usa l'alpha standardizzato, calcolato sui punteggi standardizzati o sulla matrice delle correlazioni.
\begin{equation} \alpha = \frac{m\bar{\rho}}{1+(m−1)\bar{\rho}} \end{equation}
La formula mostra come l'affidabilità della scala ($\alpha$) sia influenzata direttamente da due fattori chiave:
- da quanto mediamente gli item sono correlati tra loro ($\rho$).
- ma anche, come si è detto, da quanti item ci sono nella scala ($m$).
Per facilitare il confronto con la formula introdotta precedentemente, possiamo scrivere:
$$\alpha = \frac{k\bar{\rho}}{1+(k−1)\bar{\rho}} $$
Per $\bar{v}$ = 1 (standardizzate le variabili), e sostituita $\bar{c}$ (covarianza media) con $\bar{\rho}$ (correlazione media), la formula di calcolo è equivalente.
Questa misura è in generale più robusta e affidabile quando le varianze degli items sono molto diverse, ed è preferibile quando l'eventuale analisi fattoriale successiva sarà condotta sulla matrice delle correlazioni.
items24r %>% mutate_all(as.numeric) %>% # standardizziamo i valori mutate_all(scale) %>% CronbachAlpha(na.rm =T)
[1] 0.8899917
Il pacchetto DescTools non prevede l'uso diretto della matrice di correlazione.
Si veda anche Correlazione item-scala.
Relazioni fra grandezze (e formule di calcolo)
Varianza e covarianza
La formula di calcolo presentata all'inizio permette di calcolare l'alpha dalla matrice delle covarianza. Essa è l'equivalente algebrico della formula
$$\frac{k^2\overline{σ_{ij}}}{\sigma^2_X}$$
Dove:
- $\overline{\sigma_{ij}}$ = $\bar{c}$ = covarianza media tra le coppie di item;
- $\sigma^2_X$ = $k\bar{v}+k(k−1)\bar{c}$ = varianza del punteggio totale del test.
Questa formula mostra in maniera molto diretta il rapporto fra la varianza totale ($\sigma^2$) e covarianza degli items.
Sostituendo le notazioni e dividendo numeratore e denominatore per $k$, avremo:
$$\frac{k^2\overline{σ_{ij}}}{\sigma^2_X} = \frac{k^2\bar{c}}{k\bar{v}+k(k−1)\bar{c}} = \frac{k\bar{c}}{\bar{v}+(k-1)\bar{c}}$$
Esempio
Consideriamo il seguente esempio, per comprendere le relazioni fra queste quantità, e dunque il senso del test:
Consideriamo una scala con 5 items, e alpha di Cronbach basso:
# How often do you read these materials because you want to? items25 <- pisaitems %>% select_at(vars(starts_with("ST25Q"))) names(items25) <- c("Magazines", "Comic books", "Fiction", "Non-fiction books", "Newspapers")
Costruiamo la matrice di covarianza:
cov_25 <- items25 %>% # trasformiamo le variabili ordinali in numeriche mutate_all(as.numeric) %>% # DescTools usa solo le osservazioni complete ("listwise deletion") cov(use = "complete.obs") cov_25
Magazines Comic books Fiction Non-fiction books Newspapers Magazines 1.5479043 0.3962657 0.3362808 0.2306161 0.4923142 Comic books 0.3962657 1.6672176 0.4531497 0.2737085 0.3373558 Fiction 0.3362808 0.4531497 1.8029373 0.6927578 0.2187242 Non-fiction books 0.2306161 0.2737085 0.6927578 1.4366566 0.2949892 Newspapers 0.4923142 0.3373558 0.2187242 0.2949892 2.0796021
Di seguito, usiamo due funzioni per il calcolo matriciale, ovvero diag()
per l'estrazione della diagonale e upper.tri()
/lower.tri()
per l'estrazione dei valori nei 'triangoli'.
Sulla diagonale, abbiamo le varianze:
vars_25 <- cov_25 %>% diag() vars_25
Magazines Comic books Fiction Non-fiction books Newspapers 1.547904 1.667218 1.802937 1.436657 2.079602
Prendiamo uno dei triangoli per estrarre il vettore delle covarianze:
covs_25 <- cov_25[upper.tri(cov_25)] covs_25
[1] 0.3962657 0.3362808 0.4531497 0.2306161 0.2737085 0.6927578 0.4923142 [8] 0.3373558 0.2187242 0.2949892
Calcoliamo la media di questi due vettori:
v <- mean(vars_25, na.rm = TRUE) c <- mean(covs_25, na.rm = TRUE) v; c
[1] 1.706864 [1] 0.3726162
Si vede già che la covarianza media è molto inferiore alla varianza media. Applichiamo la formula:
k = 5 alpha = (k * c) / (v + ((k-1)*c)) alpha
[1] 0.5826993
Ovvero il valore che risulta applicando le funzioni viste sopra.
items25 %>% mutate_all(as.numeric) %>% CronbachAlpha(na.rm =T)
Test split-half
È inoltre equivalente alla media di tutti i possibili test “split-half” sulla scala: è dunque una misura di coerenza interna più generalizzata e robusta rispetto a questi test (che pure erano usati per valutare la coerenza interna delle scale).
Con il pacchetto psych
Si veda Correlazione item-scala.