Ricerca Sociale con R

Una wiki per l'analisi dei dati con R

Strumenti Utente

Strumenti Sito


r:analisi_descrittiva:alpha_di_cronbach

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

Domande? Scrivimi

su Telegram per email
r/analisi_descrittiva/alpha_di_cronbach.txt · Ultima modifica: 11/08/2025 14:35 da Agnese Vardanega