::here("code", "_common.R") |>
heresource()
# Load packages
if (!requireNamespace("pacman")) install.packages("pacman")
::p_load(lavaan, psych, semPlot) pacman
42 CFA per matrici multi-tratto multi-metodo
Prerequisiti
Concetti e Competenze Chiave
Preparazione del Notebook
42.1 Introduzione
La validità descrive quanto accuratamente un metodo di misurazione riesce a quantificare ciò che è inteso misurare. Esistono diverse categorie di validità, ognuna delle quali si verifica attraverso metodi specifici. Una suddivisione convenzionale delle diverse tipologie di validità, che non riflette necessariamente gli sviluppi più recenti in questo campo, può essere descritta come segue (per ulteriori dettagli si rimanda al capitolo dedicato alla validità nella presente dispena):
Validità di facciata: Valuta se gli item di un test appaiono appropriati e ragionevoli rispetto al costrutto che si intende misurare, sia agli occhi di chi partecipa al test sia di chi lo utilizza. Questo tipo di validità è basato sulla percezione esteriore della misura e si valuta tramite i giudizi di esperti sulla plausibilità delle misure.
Validità di contenuto: Una misura possiede validità di contenuto quando i suoi indicatori rappresentano in modo esaustivo e accurato l’area di contenuto da misurare. Anche questa validità si basa sui giudizi di esperti.
Validità di costrutto: Corrisponde alla definizione generale di validità e si riferisce alla capacità di uno strumento di misurare il costrutto che intende misurare. La validità di costrutto si verifica attraverso la correttezza con cui gli indicatori misurano i costrutti teorici di interesse e si convalida attraverso l’analisi delle relazioni tra il costrutto misurato e altri costrutti correlati, secondo modelli teorici specifici.
Validità di criterio: Indica la capacità di uno strumento di fare previsioni accurate su un criterio esterno, valutando quanto bene la misura predice questo criterio.
Validità concorrente: Si determina osservando quanto uno strumento di misurazione correla con altri strumenti considerati validi per misurare lo stesso attributo. Una forte correlazione è generalmente vista come una conferma della validità.
Validità convergente: Si verifica confrontando e correlando i punteggi ottenuti con la misura da validare con quelli ottenuti da un altro costrutto teoricamente relazionato. La verifica di questa validità dipende dall’esistenza di misure valide per costrutti correlati.
Validità discriminante: È l’opposto della validità convergente e si verifica quando la misura in esame non mostra correlazioni significative con le misure di costrutti teoricamente distinti.
42.1.1 MTMM e CFA
La Matrice Multi-Tratto Multi-Metodo (MTMM) è un approccio utilizzato per valutare la validità di costrutto, esaminando la correlazione tra diversi costrutti misurati sia con gli stessi metodi sia con metodi differenti. La validità di costrutto è considerata alta quando la misura di un costrutto è indipendente dal metodo di misurazione utilizzato.
42.1.2 Un esempio concreto
Nell’esempio discusso da {cite:t}brown2015confirmatory
, il ricercatore desidera esaminare la validità del costrutto dei disturbi di personalità del Cluster A del DSM-IV, che sono pattern persistenti di sintomi caratterizzati da comportamenti strani o eccentrici (American Psychiatric Association, 1994). Il cluster A comprende tre costrutti di disturbo della personalità:
- paranoico (un pattern duraturo di sfiducia e sospetto tale che le motivazioni degli altri sono interpretate come malevole);
- schizoide (un pattern duraturo di distacco dalle relazioni sociali e una gamma ristretta di espressioni emotive);
- schizotipico (un pattern duraturo di disagio acuto nelle relazioni sociali, distorsioni cognitive e percettive ed eccentricità comportamentali).
In un campione di 500 pazienti, ciascuno di questi tre tratti è misurato mediante tre metodi di valutazione:
- un inventario di autovalutazione dei disturbi di personalità;
- valutazioni dimensionali da un colloquio clinico strutturato sui disturbi della personalità;
- valutazioni osservazionali effettuate da psicologi.
I dati sono contenuti in una matrice 3 (T) × 3 (M), organizzata in modo tale che le correlazioni tra i diversi tratti (disturbi della personalità: paranoico, schizotipico, schizoide) siano annidate all’interno di ciascun metodo (tipo di valutazione: inventario, colloquio clinico, valutazioni degli osservatori).
I dati sono riportati qui sotto.
<- c(3.61, 3.66, 3.59, 2.94, 3.03, 2.85, 2.22, 2.42, 2.04)
sds
<- '
cors 1.000
0.290 1.000
0.372 0.478 1.000
0.587 0.238 0.209 1.000
0.201 0.586 0.126 0.213 1.000
0.218 0.281 0.681 0.195 0.096 1.000
0.557 0.228 0.195 0.664 0.242 0.232 1.000
0.196 0.644 0.146 0.261 0.641 0.248 0.383 1.000
0.219 0.241 0.676 0.290 0.168 0.749 0.361 0.342 1.000'
<- getCov(
covs
cors, sds = sds,
names = c("pari", "szti", "szdi", "parc", "sztc", "szdc", "paro", "szto", "szdo")
)
La Matrice Multi-Tratto Multi-Metodo (MTMM) si organizza in due tipi di blocchi di coefficienti:
Blocchi di mono-metodo: contengono le correlazioni tra indicatori che provengono dallo stesso metodo di misurazione. Questi blocchi esaminano come diversi indicatori del medesimo tratto si correlano tra loro quando misurati tramite lo stesso strumento.
Blocchi di etero-metodo: includono le correlazioni tra indicatori misurati mediante metodi diversi. Particolarmente significativa è la “diagonale di validità” all’interno di questi blocchi, dove le correlazioni rappresentano stime di validità convergente. In altre parole, misure diverse di costrutti teoricamente simili dovrebbero mostrare forti correlazioni.
Nell’analisi MTMM, una forte correlazione tra metodi che misurano lo stesso tratto evidenzia la validità convergente. Per esempio, potrebbe risultare che diverse misure della personalità schizotipica mostrino correlazioni elevate, con coefficienti ( r ) che variano da 0.676 a 0.749. Al contrario, elementi al di fuori della diagonale nei blocchi di etero-metodo rivelano la validità discriminante, dove le misure di costrutti teoricamente distinti non dovrebbero essere altamente correlate. Questa validità è confermata quando tali correlazioni sono significativamente più basse rispetto a quelle della diagonale di validità, ad esempio, coefficienti che variano da 0.126 a 0.290.
Inoltre, è possibile rilevare gli effetti del metodo esaminando gli elementi al di fuori della diagonale nei blocchi di mono-metodo. Qui, la varianza nelle correlazioni tra diversi tratti misurati con lo stesso metodo, rispetto alle correlazioni tra gli stessi tratti misurati con metodi diversi, riflette l’entità degli effetti del metodo. Ad esempio, le valutazioni dell’osservatore dei tratti della personalità paranoica e schizotipica potrebbero essere più correlate (r = 0.383) rispetto alle loro misure con metodi diversi (ad esempio, la correlazione tra le misure di personalità paranoide e schizotipica, con l’uso rispettivamente dell’inventario e della valutazione dell’osservatore, è di 0.196).
La validità del costrutto è supportata quando i dati indicano alta validità convergente e discriminante con effetti del metodo trascurabili.
Il modello CFA per analizzare la matrice MTMM può includere correlazioni residue tra le specificità di ciascun metodo, supponendo che ogni fattore comune (come paranoid
, schizotypal
, schizoid
) sia identificato da item misurati con metodi diversi e che le specificità di ciascun metodo siano correlate tra loro.
{cite:t}brown2015confirmatory
mostra come sia possibile analizzare la matrice MTMM con un modello CFA nel quale si ipotizza che vi siano correlazioni residue tra le specificità di ciascun metodo. Il modello è dunque formulato nel modo seguente: ogni fattore comune (paranoid
, schizotypal
, schizoid
) è identificato dagli item corrispondenti definiti da metodi diversi; le specificità di ciascun metodo, inoltre, sono correlate tra loro.
<- '
model paranoid =~ pari + parc + paro
schizotypal =~ szti + sztc + szto
schizoid =~ szdi + szdc + szdo
pari ~~ szti + szdi
szti ~~ szdi
parc ~~ sztc + szdc
sztc ~~ szdc
paro ~~ szto + szdo
szto ~~ szdo
'
Adattiamo il modello ai dati.
<- cfa(
fit
model, sample.cov = covs,
sample.nobs = 500,
std.lv = TRUE
)
Esaminiamo la soluzione ottenuta.
summary(fit, fit.measures = TRUE, standardized = TRUE) |>
print()
lavaan 0.6.17 ended normally after 59 iterations
Estimator ML
Optimization method NLMINB
Number of model parameters 30
Number of observations 500
Model Test User Model:
Test statistic 14.371
Degrees of freedom 15
P-value (Chi-square) 0.498
Model Test Baseline Model:
Test statistic 2503.656
Degrees of freedom 36
P-value 0.000
User Model versus Baseline Model:
Comparative Fit Index (CFI) 1.000
Tucker-Lewis Index (TLI) 1.001
Loglikelihood and Information Criteria:
Loglikelihood user model (H0) -9879.996
Loglikelihood unrestricted model (H1) -9872.811
Akaike (AIC) 19819.992
Bayesian (BIC) 19946.430
Sample-size adjusted Bayesian (SABIC) 19851.209
Root Mean Square Error of Approximation:
RMSEA 0.000
90 Percent confidence interval - lower 0.000
90 Percent confidence interval - upper 0.041
P-value H_0: RMSEA <= 0.050 0.989
P-value H_0: RMSEA >= 0.080 0.000
Standardized Root Mean Square Residual:
SRMR 0.025
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
paranoid =~
pari 2.588 0.145 17.833 0.000 2.588 0.712
parc 2.472 0.121 20.350 0.000 2.472 0.841
paro 1.747 0.088 19.946 0.000 1.747 0.788
schizotypal =~
szti 2.950 0.132 22.367 0.000 2.950 0.788
sztc 2.348 0.123 19.047 0.000 2.348 0.768
szto 2.047 0.089 22.905 0.000 2.047 0.843
schizoid =~
szdi 2.713 0.120 22.526 0.000 2.713 0.769
szdc 2.438 0.107 22.826 0.000 2.438 0.860
szdo 1.782 0.073 24.323 0.000 1.782 0.872
Covariances:
Estimate Std.Err z-value P(>|z|) Std.lv Std.all
.pari ~~
.szti 1.274 0.338 3.774 0.000 1.274 0.217
.szdi 2.537 0.329 7.703 0.000 2.537 0.441
.szti ~~
.szdi 3.872 0.342 11.329 0.000 3.872 0.746
.parc ~~
.sztc -0.335 0.210 -1.597 0.110 -0.335 -0.107
.szdc -0.608 0.176 -3.461 0.001 -0.608 -0.265
.sztc ~~
.szdc -0.933 0.188 -4.967 0.000 -0.933 -0.330
.paro ~~
.szto 0.737 0.118 6.240 0.000 0.737 0.413
.szdo 0.505 0.096 5.274 0.000 0.505 0.368
.szto ~~
.szdo 0.625 0.102 6.158 0.000 0.625 0.478
paranoid ~~
schizotypal 0.381 0.046 8.341 0.000 0.381 0.381
schizoid 0.359 0.046 7.856 0.000 0.359 0.359
schizotypal ~~
schizoid 0.310 0.047 6.666 0.000 0.310 0.310
Variances:
Estimate Std.Err z-value P(>|z|) Std.lv Std.all
.pari 6.514 0.513 12.695 0.000 6.514 0.493
.parc 2.529 0.334 7.562 0.000 2.529 0.293
.paro 1.867 0.179 10.434 0.000 1.867 0.380
.szti 5.309 0.460 11.529 0.000 5.309 0.379
.sztc 3.846 0.330 11.654 0.000 3.846 0.411
.szto 1.704 0.175 9.742 0.000 1.704 0.289
.szdi 5.080 0.386 13.158 0.000 5.080 0.408
.szdc 2.085 0.230 9.047 0.000 2.085 0.260
.szdo 1.005 0.107 9.351 0.000 1.005 0.240
paranoid 1.000 1.000 1.000
schizotypal 1.000 1.000 1.000
schizoid 1.000 1.000 1.000
::interpret(fit) |>
effectsizeprint()
Name Value Threshold Interpretation
1 GFI 0.99376810 0.95 satisfactory
2 AGFI 0.98130431 0.90 satisfactory
3 NFI 0.99425997 0.90 satisfactory
4 NNFI 1.00061169 0.90 satisfactory
5 CFI 1.00000000 0.90 satisfactory
6 RMSEA 0.00000000 0.05 satisfactory
7 SRMR 0.02482894 0.08 satisfactory
8 RFI 0.98622392 0.90 satisfactory
9 PNFI 0.41427499 0.50 poor
10 IFI 1.00025272 0.90 satisfactory
Per i dati considerati da {cite:t}brown2015confirmatory
, l’adattamento del modello MTMM è eccellente. Ciò fornisce forti evidenze di validità di costrutto per i fattori Paranoico, Schizoide e Schizotipico che sono stati ipotizzati.
42.2 Session Info
sessionInfo()
R version 4.3.3 (2024-02-29)
Platform: aarch64-apple-darwin20 (64-bit)
Running under: macOS Sonoma 14.4.1
Matrix products: default
BLAS: /Library/Frameworks/R.framework/Versions/4.3-arm64/Resources/lib/libRblas.0.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/4.3-arm64/Resources/lib/libRlapack.dylib; LAPACK version 3.11.0
locale:
[1] C
time zone: Europe/Rome
tzcode source: internal
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] ggokabeito_0.1.0 viridis_0.6.5 viridisLite_0.4.2 ggpubr_0.6.0
[5] ggExtra_0.10.1 bayesplot_1.11.1 gridExtra_2.3 patchwork_1.2.0
[9] semTools_0.5-6 semPlot_1.1.6 lavaan_0.6-17 psych_2.4.3
[13] scales_1.3.0 markdown_1.12 knitr_1.45 lubridate_1.9.3
[17] forcats_1.0.0 stringr_1.5.1 dplyr_1.1.4 purrr_1.0.2
[21] readr_2.1.5 tidyr_1.3.1 tibble_3.2.1 ggplot2_3.5.0
[25] tidyverse_2.0.0 here_1.0.1
loaded via a namespace (and not attached):
[1] rstudioapi_0.15.0 jsonlite_1.8.8 datawizard_0.9.1
[4] magrittr_2.0.3 TH.data_1.1-2 estimability_1.5
[7] nloptr_2.0.3 rmarkdown_2.26 vctrs_0.6.5
[10] minqa_1.2.6 effectsize_0.8.7 base64enc_0.1-3
[13] rstatix_0.7.2 htmltools_0.5.7 broom_1.0.5
[16] Formula_1.2-5 htmlwidgets_1.6.4 plyr_1.8.9
[19] sandwich_3.1-0 emmeans_1.10.0 zoo_1.8-12
[22] uuid_1.2-0 igraph_2.0.2 mime_0.12
[25] lifecycle_1.0.4 pkgconfig_2.0.3 Matrix_1.6-5
[28] R6_2.5.1 fastmap_1.1.1 shiny_1.8.0
[31] digest_0.6.35 OpenMx_2.21.11 fdrtool_1.2.17
[34] colorspace_2.1-0 rprojroot_2.0.4 Hmisc_5.1-1
[37] fansi_1.0.6 timechange_0.3.0 abind_1.4-5
[40] compiler_4.3.3 withr_3.0.0 glasso_1.11
[43] htmlTable_2.4.2 backports_1.4.1 carData_3.0-5
[46] performance_0.11.0 ggsignif_0.6.4 MASS_7.3-60.0.1
[49] corpcor_1.6.10 gtools_3.9.5 tools_4.3.3
[52] pbivnorm_0.6.0 foreign_0.8-86 zip_2.3.1
[55] httpuv_1.6.14 nnet_7.3-19 glue_1.7.0
[58] quadprog_1.5-8 nlme_3.1-164 promises_1.2.1
[61] lisrelToR_0.3 grid_4.3.3 pbdZMQ_0.3-11
[64] checkmate_2.3.1 cluster_2.1.6 reshape2_1.4.4
[67] generics_0.1.3 gtable_0.3.4 tzdb_0.4.0
[70] data.table_1.15.2 hms_1.1.3 car_3.1-2
[73] utf8_1.2.4 sem_3.1-15 pillar_1.9.0
[76] IRdisplay_1.1 rockchalk_1.8.157 later_1.3.2
[79] splines_4.3.3 lattice_0.22-5 survival_3.5-8
[82] kutils_1.73 tidyselect_1.2.0 miniUI_0.1.1.1
[85] pbapply_1.7-2 stats4_4.3.3 xfun_0.42
[88] qgraph_1.9.8 arm_1.13-1 stringi_1.8.3
[91] boot_1.3-29 evaluate_0.23 codetools_0.2-19
[94] mi_1.1 cli_3.6.2 RcppParallel_5.1.7
[97] IRkernel_1.3.2 rpart_4.1.23 parameters_0.21.6
[100] xtable_1.8-4 repr_1.1.6 munsell_0.5.0
[103] Rcpp_1.0.12 coda_0.19-4.1 png_0.1-8
[106] XML_3.99-0.16.1 parallel_4.3.3 ellipsis_0.3.2
[109] bayestestR_0.13.2 jpeg_0.1-10 lme4_1.1-35.1
[112] mvtnorm_1.2-4 insight_0.19.10 openxlsx_4.2.5.2
[115] crayon_1.5.2 rlang_1.1.3 multcomp_1.4-25
[118] mnormt_2.1.1