29.1 Un numero di fattori troppo piccolo
Una delle possibili fonti di mancanza di adattamento del modello può dipendere dal fatto che è stato ipotizzato un numero insufficiente di fattori latenti comuni. Brown (2015) discute il caso nel quale si confrontano gli indici di bontà di adattamento di un modello ad un solo fattore comune e un modello a due fattori comuni. L’esempio riguarda i dati già in precedenza discussi e relativi relativi a otto misure di personalità raccolte su un campione di 250 pazienti che hanno concluso un programma di psicoterapia. Le scale sono le seguenti:
- anxiety (N1),
- hostility (N2),
- depression (N3),
- self-consciousness (N4),
- warmth (E1),
- gregariousness (E2),
- assertiveness (E3),
- positive emotions (E4).
Leggiamo i dati in \(\mathsf{R}\).
varnames <- c("N1", "N2", "N3", "N4", "E1", "E2", "E3", "E4")
sds <- c(5.7, 5.6, 6.4, 5.7, 6.0, 6.2, 5.7, 5.6)
cors <- "
1.000
0.767 1.000
0.731 0.709 1.000
0.778 0.738 0.762 1.000
-0.351 -0.302 -0.356 -0.318 1.000
-0.316 -0.280 -0.300 -0.267 0.675 1.000
-0.296 -0.289 -0.297 -0.296 0.634 0.651 1.000
-0.282 -0.254 -0.292 -0.245 0.534 0.593 0.566 1.000"
psychot_cor_mat <- getCov(cors, names = varnames)
n <- 250
Supponiamo di adattare ai dati il modello “sbagliato” che include un unico fattore comune. Svolgiamo qui l’analisi fattoriale esplorativa usando la funzione sperimentale efa()
di lavaan
.
Adattiamo il modello ai dati.
Consideriamo ora un modello a due fattori.
Adattiamo il modello ai dati.
Esaminiamo gli indici di bontà di adattamento.
# define the fit measures
fit_measures_robust <- c("chisq", "df", "pvalue", "cfi", "tli", "rmsea", "srmr")
# collect them for each model
rbind(
fitmeasures(efa_f1, fit_measures_robust),
fitmeasures(efa_f2, fit_measures_robust)
) %>%
# wrangle
data.frame() %>%
mutate(
chisq = round(chisq, digits = 0),
df = as.integer(df),
pvalue = ifelse(pvalue == 0, "< .001", pvalue)
) %>%
mutate_at(vars(cfi:srmr), ~ round(., digits = 3))
#> chisq df pvalue cfi tli rmsea srmr
#> 1 375 20 < .001 0.71 0.594 0.267 0.187
#> 2 10 13 0.709310449320062 1.00 1.006 0.000 0.010
effectsize::interpret(efa_f1)
#> Name Value Threshold Interpretation
#> 1 GFI 0.6713421 0.95 poor
#> 2 AGFI 0.4084158 0.90 poor
#> 3 NFI 0.7006460 0.90 poor
#> 4 NNFI 0.5941736 0.90 poor
#> 5 CFI 0.7101240 0.90 poor
#> 6 RMSEA 0.2665811 0.05 poor
#> 7 SRMR 0.1873289 0.08 poor
#> 8 RFI 0.5809044 0.90 poor
#> 9 PNFI 0.5004614 0.50 satisfactory
#> 10 IFI 0.7120036 0.90 poor
effectsize::interpret(efa_f2)
#> Name Value Threshold Interpretation
#> 1 GFI 0.990554109 0.95 satisfactory
#> 2 AGFI 0.973842148 0.90 satisfactory
#> 3 NFI 0.992174918 0.90 satisfactory
#> 4 NNFI 1.005603388 0.90 satisfactory
#> 5 CFI 1.000000000 0.90 satisfactory
#> 6 RMSEA 0.000000000 0.05 satisfactory
#> 7 SRMR 0.009907613 0.08 satisfactory
#> 8 RFI 0.983145977 0.90 satisfactory
#> 9 PNFI 0.460652640 0.50 poor
#> 10 IFI 1.002570123 0.90 satisfactory
I risultati mostrano come, in un modello EFA, una soluzione a due fattori produca un adattamento adeguato, mentre ciò non si verifica con un modello ad un solo fattore.